SenseVoice 是一种语音基础模型,具有多种语音理解功能,包括自动语音识别 (ASR)、口语识别 (LID)、语音情感识别 (SER) 和音频事件检测 (AED)。本博客将指导您安装和使用 SenseVoice 模型,使其尽可能方便用户使用。
Github 仓库链接: https://github.com/FunAudioLLM/SenseVoice
SenseVoice专注于高精度多语言语音识别、语音情感识别和音频事件检测。
多语言语音识别:经过超过40万小时的数据训练,支持50多种语言,识别性能超越Whisper模型。
高效推理:SenseVoice-Small 模型采用非自回归端到端框架,从而实现极低的推理延迟。处理 10 秒的音频仅需 70ms,比 Whisper-Large 快 15 倍。
情绪识别:提供声音事件检测能力,支持bgm、掌声、笑声、哭泣、咳嗽、打喷嚏等各种常见人机交互事件的检测。
便捷的微调:提供方便的微调脚本和策略,让用户根据自己的业务场景轻松解决长尾样本问题。
服务部署:提供服务部署管道,支持多并发请求,客户端语言包括 Python、C++、HTML、Java 和 C# 等。
首先克隆官方项目并创建一个独立的 Python 虚拟环境。
git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice #创建一个独立的 Python 3.8 虚拟环境并激活它 conda create -n sensevoice python=3.8 conda activate sensevoice
至此,虚拟环境已被激活。现在下载并安装项目所依赖的第三方软件包。
# 如果在GPUMart上租赁的服务器上 pip install -r requirements.txt # 如果租赁的服务器在中国大陆,需要使用国内的镜像 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com
模型文件非常大,下载需要很长时间。完成后,使用以下命令启动服务:
python webui.py
现在,您可以通过访问局域网 IP 和端口号 7860 访问由gradient库构建的 WebUI 网络应用程序。
使用网页界面非常简单,只需上传音频文件,选择语言(可选),然后点击开始按钮,等待后台处理完成,识别出的文本就会输出到结果区域。
我们使用GPUMart 的 RTX A4000 测试了 90 分钟的音频,耗时约七八分钟。
如果需要基于模型进行应用程序开发,或调整更详细的参数,则需要对模型提供的应用程序接口进行封装和二次开发。
推理使用示例 - 支持任何格式和任何持续时间的音频输入。
from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess model_dir = "iic/SenseVoiceSmall" model = AutoModel( model=model_dir, trust_remote_code=True, remote_code="./model.py", vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, device="cuda:0", ) # en res = model.generate( input=f"{model.model_path}/example/en.mp3", cache={}, language="auto", # "zh", "en", "yue", "ja", "ko", "nospeech" use_itn=True, batch_size_s=60, merge_vad=True, # merge_length_s=15, ) text = rich_transcription_postprocess(res[0]["text"]) print(text)
对于更高级的用户,还可以使用以下命令将模型导出到 ONNX 或 Libtorch:
# 以 Libtorch 为例 from pathlib import Path from funasr_torch import SenseVoiceSmall from funasr_torch.utils.postprocess_utils import rich_transcription_postprocess model_dir = "iic/SenseVoiceSmall" model = SenseVoiceSmall(model_dir, batch_size=10, device="cuda:0") wav_or_scp = ["{}/.cache/modelscope/hub/{}/example/en.mp3".format(Path.home(), model_dir)] res = model(wav_or_scp, language="auto", use_itn=True) print([rich_transcription_postprocess(i) for i in res])
注意:Libtorch 模型会导出到原始模型目录。