修复funasr加载离线模型bug #2311
-
按照funasr1.2.0源码python38\Lib\site-packages\funasr\download\download_model_from_hub.py第45行,加载离线模型需要定义model_path,但是定义后出现报错: |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
你定位得对。先纠正我之前的回复:这不是网络问题,而是 FunASR 1.2.0 的本地模型解析 bug;之前让你“检查网络”的判断不准确,抱歉。 在 1.2.0 中,传入 你建议的这行修复是正确的: model_or_path = kwargs["model_path"]该修复后来通过 PR #2453 合入;首个包含它的 PyPI 版本是 1.2.7。当前源码也保留了这行处理:download_model_from_hub.py#L66。 1.2.0~1.2.6 的立即绕过方式不要同时传别名和 from funasr import AutoModel
model_dir = "/root/funasr/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online"
model = AutoModel(
model=model_dir,
device="cuda:0",
disable_update=True,
)这也是我之前回复中那段路径写法想表达的绕过方式,但当时没有说明版本 bug,结论不完整。 1.2.7 及之后版本推荐升级后仍然使用更明确的本地路径形式;真正离线时同时关闭版本检查: from funasr import AutoModel
model_dir = "/root/funasr/models/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online"
model = AutoModel(
model=model_dir,
device="cuda:0",
disable_update=True,
check_latest=False,
)升级后,原问题中的兼容写法也可以正常解析: model = AutoModel(
model="paraformer-zh-streaming",
model_path=model_dir,
device="cuda:0",
disable_update=True,
check_latest=False,
)这是流式模型,推理时需要维护 import soundfile as sf
speech, sample_rate = sf.read("test.wav")
assert sample_rate == 16000
chunk_size = [0, 10, 5]
chunk_stride = chunk_size[1] * 960
cache = {}
text = []
for offset in range(0, len(speech), chunk_stride):
speech_chunk = speech[offset : offset + chunk_stride]
is_final = offset + chunk_stride >= len(speech)
result = model.generate(
input=speech_chunk,
cache=cache,
is_final=is_final,
chunk_size=chunk_size,
encoder_chunk_look_back=4,
decoder_chunk_look_back=1,
)
if result and result[0].get("text"):
text.append(result[0]["text"])
print("".join(text))离线目录必须是从官方模型页完整下载后复制过来的,至少应包含 我重新用 FunASR 1.3.14 和完整官方模型做了断网验证:在代码层阻断所有 IPv4/IPv6 连接后,上面的“直接本地路径”和“别名 + model_path”两种形式都没有发起网络连接,均加载为 |
Beta Was this translation helpful? Give feedback.
你定位得对。先纠正我之前的回复:这不是网络问题,而是 FunASR 1.2.0 的本地模型解析 bug;之前让你“检查网络”的判断不准确,抱歉。
在 1.2.0 中,传入
model_path后,kwargs["model_path"]虽然有值,但局部变量model_or_path仍然是"paraformer-zh-streaming"。因此本地目录中的配置没有被解析,别名最终直接进入模型注册表,于是报:你建议的这行修复是正确的:
该修复后来通过 PR #2453 合入;首个包含它的 PyPI 版本是 1.2.7。当前源码也保留了这行处理:download_model_from_hub.py#L66。
1.2.0~1.2.6 的立即绕过方式
不要同时传别名和
model_path,直接把本地目录传给model:这也是我之前回复中那段…