import gradio as gr import torch import torchaudio import numpy as np from ichigo_asr.demo.utils import load_model # Hàm tải mô hình Ichigo Whisper với map_location=cpu def init_model(): try: # Chỉ định rõ ràng map_location='cpu' để tải mô hình trên CPU ichigo_model = load_model( ref="homebrewltd/ichigo-whisper:merge-medium-vi-2d-2560c-dim64.pth", size="merge-medium-vi-2d-2560c-dim64", map_location=torch.device('cpu') # Thêm tham số này ) device = "cpu" # Chỉ sử dụng CPU ichigo_model.ensure_whisper(device) ichigo_model.to(device) return ichigo_model, device except Exception as e: print(f"Lỗi khi tải mô hình: {e}") return None, "cpu" # Khởi tạo mô hình ichigo_model, device = init_model() def transcribe(audio_path): if ichigo_model is None: return "Không thể tải mô hình. Vui lòng kiểm tra logs." try: # Tải file âm thanh wav, sr = torchaudio.load(audio_path) # Chuyển đổi sang 16kHz nếu cần if sr != 16000: wav = torchaudio.functional.resample(wav, sr, 16000) # Chuyển đổi sang mono nếu là stereo if wav.shape[0] > 1: wav = wav.mean(dim=0, keepdim=True) # Đảm bảo dữ liệu nằm trên CPU wav = wav.to(device) # Thực hiện dự đoán transcribe_result = ichigo_model.inference(wav) # Trả về kết quả return transcribe_result[0].text except Exception as e: return f"Lỗi khi nhận dạng giọng nói: {str(e)}" # Tạo giao diện Gradio title = "Ichigo Whisper Speech Recognition Demo" description = """ # 🍓 Ichigo Whisper Speech Recognition Sử dụng mô hình Ichigo-whisper để nhận dạng giọng nói. Mô hình này có hiệu suất tốt cho cả tiếng Anh và tiếng Việt! """ demo = gr.Interface( fn=transcribe, inputs=gr.Audio(sources=["microphone", "upload"], type="filepath"), outputs=gr.Textbox(label="Phiên âm"), title=title, description=description ) # Khởi chạy ứng dụng if __name__ == "__main__": demo.launch()