| from pathlib import Path | |
| import numpy as np | |
| from lib.utils import Timer | |
| from s2ts import S2TS | |
| from s2ts import TaskExecInfo as CTaskExecInfo | |
| MODEL_DIR = Path(r"D:\yujuan\yoyo-translator-win\models\funasr") | |
| class FunAsrOv: | |
| def __init__(self, model_dir=MODEL_DIR): | |
| with Timer("load FunASR"): | |
| self.instance = S2TS() | |
| ret = self.instance.start_fun_asr(f'{model_dir}/model_files', f'{model_dir}/punc', f"{model_dir}/hotword.bin") | |
| print(f"model load {'success' if ret else 'failed'}") | |
| self._warm_up() | |
| def _warm_up(self): | |
| fake_audio = np.random.randn(16000).astype(np.float32) | |
| self.transcribe(fake_audio) | |
| def transcribe(self, audio: np.ndarray): | |
| task_info = CTaskExecInfo() | |
| task_info.audio_data = audio.tolist() | |
| task_info.audio_language = "zh" | |
| with Timer("FunASR inference") as t: | |
| self.instance.put_asr(task_info) | |
| res: CTaskExecInfo = self.instance.get_asr(0) | |
| return "".join(word.text for word in res.words), t.duration | |