modelscope-funasr这个问题怎么解决?实时语音识别场景,碰到了如下报错,是偶发现象,正常识别了一段时间后出现
使用的模型: paraformer-zh-streaming
segments = self.model.generate(input=frame.audio_nparray.astype(np.float32), cache=cache, is_final=True, chunk_size=[0, 8, 4], encoder_chunk_look_back=4, decoder_chunk_look_back=1)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/auto/auto_model.py", line 212, in generate
return self.inference(input, input_len=input_len, cfg)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/auto/auto_model.py", line 248, in inference
res = model.inference(batch, kwargs)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/models/paraformer_streaming/model.py", line 536, in inference
speech, speech_lengths = extract_fbank([audio_sample_i], data_type=kwargs.get("data_type", "sound"),
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/utils/load_utils.py", line 110, in extract_fbank
data, data_len = frontend(data, data_len, kwargs)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1511, in _wrapped_call_impl
return self._call_impl(args, **kwargs)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1520, in _call_impl
return forward_call(args, **kwargs)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/frontends/wav_frontend.py", line 450, in forward
feats, featslengths, = self.forward_lfr_cmvn(feats, feats_lengths, is_final, cache=cache)
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/frontends/wav_frontend.py", line 385, in forward_lfr_cmvn
mat, cache["lfr_splice_cache"][i], lfr_splice_frame_idx = self.apply_lfr(mat, self.lfr_m, self.lfr_n,
File "/data/miniconda3/envs/zhiming_env/lib/python3.9/site-packages/funasr/frontends/wav_frontend.py", line 310, in apply_lfr
LFR_outputs = torch.vstack(LFR_inputs)
RuntimeError: vstack expects a non-empty TensorList
根据您提供的错误信息,问题出现在torch.vstack(LFR_inputs)
这一行。这个错误是由于LFR_inputs
为空导致的。为了解决这个问题,您可以在调用torch.vstack()
之前检查LFR_inputs
是否为空。如果为空,可以跳过这次循环或者采取其他处理方式。
以下是修改后的代码:
import torch
# 其他代码...
if LFR_inputs:
LFR_outputs = torch.vstack(LFR_inputs)
else:
# 处理空列表的情况,例如跳过这次循环或者采取其他处理方式
pass
这样,当LFR_inputs
为空时,程序不会尝试执行torch.vstack()
,从而避免了报错。
关于报错的问题,可以尝试以下方法解决:
是不是你输入chunk太小了,一般建议,60ms或者100ms发一次包。此回答整理自钉群“modelscope-funasr社区交流”