声音转文字的模型
1 介绍
开源的声音转文字的模型比较多,例如:Qwen3-ASR(阿里开源,中文较强,基础模型)、Fun-ASR-Nano(阿里开源,中文较强,工业级偏向实时会议)、Whisper(OpenAI开源,支持英文较强)、VibeVoice-ASR(微软开源,中英文混合)、MiMo-V2.5-ASR(小米,中文较强,偏向方言)、FireRedASR2-AED(小红书,中文较强,偏向方言/口音、英语)。
其中较强的是Fun-ASR-Nano-2512,不过我使用过程中发现,在噪杂的环境中识别文字较差,不过它偏向实时分析。因此,添加降噪的模型DeepFilterNet3。DeepFilterNet3 深度学习语音增强 人群嘈杂、非稳态噪声(会议室背景人声、走动杂音) 会议首选,保人声,抑制背景杂声,MIT开源,CPU/GPU都能跑,Python原生API,输出音频直接喂ASR 模型首次运行自动下载权重;输入48k,降噪后需要重采样到16k给ASR。
Fun-ASR-Nano模型地址
# 模型地址
https://modelscope.cn/models/FunAudioLLM/Fun-ASR-Nano-2512
# 开发文档
https://www.funasr.com/docs/
DeepFilterNet模型
# Github地址
https://github.com/Rikorose/DeepFilterNet
2 Python使用
2.1 安装依赖
Python安装依赖包
pip install torch torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install -U funasr modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装依赖
# Ubuntu安装依赖
sudo apt install ffmpeg
2.2 Python源代码
注意:下面的代码不能直接使用,需要做一些调整。
python
import os
from funasr import AutoModel
local_model_dir = "E:/asr/model"
cache_model_dir = "E:/asr/cache"
def first_online(audio_path, text_path):
# 第一次下载数据
from modelscope import snapshot_download
# 模型路径
model_id = r"FunAudioLLM/Fun-ASR-Nano-2512"
# 第一次下载数据
# model_dir = snapshot_download(model_id)
# 第二次,强制使用缓存
model_dir = snapshot_download(model_id, cache_dir=cache_model_dir, local_dir=local_model_dir, local_files_only=True)
# 第一次下载数据
model = AutoModel(model=model_dir, vad_model="fsmn-vad", device="cpu")
# # GPU
# model = AutoModel(model=model_dir, vad_model="fsmn-vad", device="cuda:0")
# 生成文本
res = model.generate(input=audio_path, batch_size=1)
# 识别结果写入文本文件
text = res[0]["text"]
print(text)
with open(text_path, "w", encoding="utf-8") as f:
f.write(text)
print("finished")
def generate_text_offline(audio_path, text_path):
# 彻底关闭 ModelScope/FunASR 的联网检查
os.environ["MODELSCOPE_DISABLE_REMOTE"] = "1"
os.environ["FUNASR_NO_UPDATE_CHECK"] = "1"
# 替换成你机器上实际下载好的模型路径
model_dir = local_model_dir + "/Fun-ASR-Nano-2512"
vad_dir = local_model_dir + "/speech_fsmn_vad_zh-cn-16k-common-pytorch"
# 支持GPU,disable_update=True表示禁用联网更新
model = AutoModel(model=model_dir, vad_model=vad_dir, device="cpu", disable_update=True)
# 生成文本
res = model.generate(input=audio_path, batch_size=1)
# 识别结果写入文本文件
text = res[0]["text"]
print(text)
with open(text_path, "w", encoding="utf-8") as f:
f.write(text)
print("finished")
if __name__ == '__main__':
audio_path_temp = r"E://sound/asr_example_zh.wav"
audio_text_path_temp = r"E://sound/asr_example_zh.txt"
# 在线模型
first_online(audio_path_temp, audio_text_path_temp)
# 离线
generate_text_offline(audio_path_temp, audio_text_path_temp)