diff --git a/tools/asr/funasr_asr.py b/tools/asr/funasr_asr.py index b0ffceb0..6a5c9989 100644 --- a/tools/asr/funasr_asr.py +++ b/tools/asr/funasr_asr.py @@ -4,9 +4,8 @@ import argparse import os import traceback -# from funasr.utils import version_checker -# version_checker.check_for_update = lambda: None from funasr import AutoModel +from modelscope import snapshot_download from tqdm import tqdm funasr_models = {} # 存储模型避免重复加载 @@ -16,40 +15,43 @@ def only_asr(input_file, language): try: model = create_model(language) text = model.generate(input=input_file)[0]["text"] - except: + except Exception: text = "" print(traceback.format_exc()) return text def create_model(language="zh"): - path_vad = "tools/asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch" - path_punc = "tools/asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch" - path_vad = path_vad if os.path.exists(path_vad) else "iic/speech_fsmn_vad_zh-cn-16k-common-pytorch" - path_punc = path_punc if os.path.exists(path_punc) else "iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch" - vad_model_revision = punc_model_revision = "v2.0.4" - if language == "zh": + path_vad = "tools/asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch" + path_punc = "tools/asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch" path_asr = "tools/asr/models/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" - path_asr = ( - path_asr - if os.path.exists(path_asr) - else "iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch" + snapshot_download( + "iic/speech_fsmn_vad_zh-cn-16k-common-pytorch", + local_dir="tools/asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch", + ) + snapshot_download( + "iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch", + local_dir="tools/asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch", + ) + snapshot_download( + "iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch", + local_dir="tools/asr/models/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch", ) model_revision = "v2.0.4" elif language == "yue": path_asr = "tools/asr/models/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online" - path_asr = ( - path_asr - if os.path.exists(path_asr) - else "iic/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online" + snapshot_download( + "iic/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online", + local_dir="tools/asr/models/speech_UniASR_asr_2pass-cantonese-CHS-16k-common-vocab1468-tensorflow1-online", ) - model_revision = "master" path_vad = path_punc = None - vad_model_revision = punc_model_revision = None - ###友情提示:粤语带VAD识别可能会有少量shape不对报错的,但是不带VAD可以.不带vad只能分阶段单独加标点。不过标点模型对粤语效果真的不行… + vad_model_revision = punc_model_revision = "" + model_revision = "master" else: - raise ValueError("FunASR 不支持该语言" + ": " + language) + raise ValueError(f"{language} is not supported") + + vad_model_revision = punc_model_revision = "v2.0.4" if language in funasr_models: return funasr_models[language] @@ -83,7 +85,7 @@ def execute_asr(input_folder, output_folder, model_size, language): file_path = os.path.join(input_folder, file_name) text = model.generate(input=file_path)[0]["text"] output.append(f"{file_path}|{output_file_name}|{language.upper()}|{text}") - except: + except Exception: print(traceback.format_exc()) output_folder = output_folder or "output/asr_opt"