官方GitHub项目:https://github.com/modelscope/FunASR
1. 配置Python 3虚拟环境
我是用Anaconda来管理Python 3虚拟环境,可以参考我写的另一篇博文:Anaconda教程(持续更新ing…)
2. 安装FunASR环境
其实也不用太在乎环境依赖问题,我就是用的老版PyTorch所以没安torchaudio所以在安装torchaudio的过程中直接安了新版的PyTorch,虽然其实我的cuda版本不符合要求,但是反正cuda is_available了……
总之能跑,又不是不能跑,别管那么多。
在虚拟环境中运行如下命令:
pip install funasr
pip install modelscope
modelscope包是下载模型权重用的,如果不用SDK下载或者直接用huggingface下载可以不安这个包。
如果用torchaudio的话就补上:pip install torchaudio
3. 下载模型权重
如果时间充裕的话其实每次都可以直接在脚本里下载,但是我选择提前下好,在脚本里推理的时候就直接调用。
我是因为只用中文,所以就直接下了中文模型和对应的punctuation模型。
可以直接运行如下代码:
from modelscope import snapshot_download
model_dir = snapshot_download('iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch',
cache_dir="pretrained_checkpoints")
model_dir = snapshot_download('iic/punc_ct-transformer_cn-en-common-vocab471067-large',
cache_dir="pretrained_checkpoints")
4. 运行语音转文字脚本
代码:
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
model_dir = r"pretrained_checkpoints\iic\speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch"
punc_dir=r"pretrained_checkpoints\iic\punc_ct-transformer_cn-en-common-vocab471067-large"
model = AutoModel(
model=model_dir,
vad_model="fsmn-vad",
vad_kwargs={"max_single_segment_time": 30000},
device="cuda:0",
punc_model=punc_dir,
)
res = model.generate(
input=r"pretrained_checkpoints\iic\speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch\example\asr_example.wav",
cache={},
language="zn",
use_itn=True,
batch_size_s=60,
merge_vad=True,
merge_length_s=15,
)
text = rich_transcription_postprocess(res[0]["text"])
print(text)
输出text:正是因为存在绝对正义,所以我们接受现实的相对正义。但是不要因为现实的相对正义,我们就认为这个世界没有正义。因为如果当你认为这个世界没有正义。
需要注意的是,如果不设置punc_model的话输出会没有标点符号,是每个汉字之间空一格的那种形式。
5. 常见问题
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
解决方案:安装FFmpeg,可以参考这篇博文:【最新】windows电脑FFmpeg安装教程手把手详解_windows安装ffmpeg-CSDN博客
参考资料:为什么读取本地音频报错 · Issue #2213 · modelscope/FunASR