SenseVoiceSmall for sherpa-onnx (int8 quantized)
模型简介
本模型是 SenseVoiceSmall 的 ONNX 导出版本,经过 int8 量化,专为 sherpa-onnx 离线语音识别引擎优化。该模型支持中文(普通话)、粤语、英语、日语、韩语的多语言语音识别,同时具备语音情感识别(SER)、音频事件检测(AED)和语种识别(LID)能力,可输出带有情感标签、事件标签的富文本转写结果。
- 原模型来源:FunAudioLLM/SenseVoiceSmall(https://github.com/FunAudioLLM/SenseVoice)
- 转换来源:由 k2-fsa/sherpa-onnx 项目导出并量化(基于 2024-07-17 版本的 sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8)
- 量化类型:int8 动态量化,模型体积显著减小(model.int8.onnx ≈ 229MB),适合嵌入式设备、移动端和边缘计算部署
- 支持平台:Android、iOS、Linux、Windows、macOS、Raspberry Pi、RK3588/RK3576、Ascend NPU、Qualcomm QNN 等
- 许可证:Apache License 2.0(与原模型一致)
该模型在 sherpa-onnx 中实现了高效的非流式和流式推理,支持 VAD 集成,适用于离线语音转文字、实时语音助手、字幕生成等场景。
模型亮点(继承自 SenseVoiceSmall)
- 多语言支持:中文、粤语、英语、日语、韩语(语种自动检测)
- 富文本输出:支持情感识别(高兴、悲伤、愤怒等)、事件检测(笑声、掌声、咳嗽等)
- 高效推理:非自回归端到端架构,int8 量化后在 CPU 上 RTF 极低,适合低功耗设备
- 无网络依赖:完全离线运行
文件结构
解压后目录结构如下:
sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17/
├── model.int8.onnx # int8 量化模型文件(推荐使用)
├── tokens.txt # 词表文件
├── LICENSE
└── README.md
注意:本仓库提供 int8 量化版本,基于 sherpa-onnx 官方导出模型。
模型下载
如果您需要离线下载好模型,可以通过下面方式手动下载,之后在 sherpa-onnx 使用中指定模型本地路径即可。
SDK下载
# 安装ModelScope
pip install modelscope
# SDK模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('poloniumrock/SenseVoiceSmallOnnx')
Git下载
# Git模型下载
git clone https://www.modelscope.cn/poloniumrock/SenseVoiceSmallOnnx.git
或者直接从 sherpa-onnx 官方 releases 下载压缩包:
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17.tar.bz2 tar xvf sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2024-07-17.tar.bz2
使用方法
1. 安装 sherpa-onnx
请参考官方文档安装 sherpa-onnx:https://k2-fsa.github.io/sherpa/onnx/install/index.html
2. 命令行离线识别示例
# 使用 int8 模型(推荐,速度更快,内存更低)
sherpa-onnx-offline \
--tokens=./tokens.txt \
--sense-voice-model=./model.int8.onnx \
--num-threads=4 \
./test_wavs/zh.wav \
./test_wavs/en.wav \
./test_wavs/ja.wav \
./test_wavs/ko.wav \
./test_wavs/yue.wav
- 添加
--sense-voice-use-itn=1可启用逆文本正则化(ITN),输出更自然的标点和数字格式。 - 支持 VAD 集成、流式识别等高级功能,详见 sherpa-onnx 文档:https://k2-fsa.github.io/sherpa/onnx/sense-voice/index.html
3. Python API 示例
import sherpa_onnx
recognizer = sherpa_onnx.OfflineRecognizer.from_sense_voice(
tokens='./tokens.txt',
sense_voice_model='./model.int8.onnx',
num_threads=4,
use_itn=True,
)
stream = recognizer.create_stream()
stream.accept_waveform(16000, samples) # samples 为 numpy float32 数组
result = recognizer.decode(stream)
print(result.text)
更多 API 示例(C++、Python、Android、iOS 等)请参考 sherpa-onnx 官方文档。
性能参考
- 在 RK3588 CPU 上测试,int8 模型 RTF 极低(具体数据请参考 sherpa-onnx 文档中的速度测试)。
- 相比原 fp32 模型,int8 版本体积缩小约 75%,推理速度进一步提升,几乎无精度损失。
参考链接
- 原模型仓库:https://github.com/FunAudioLLM/SenseVoice
- sherpa-onnx 项目:https://github.com/k2-fsa/sherpa-onnx
- 预训练模型文档:https://k2-fsa.github.io/sherpa/onnx/sense-voice/pretrained.html
- 完整使用指南:https://k2-fsa.github.io/sherpa/onnx/sense-voice/index.html
如果您在使用过程中遇到问题,欢迎在 sherpa-onnx GitHub Issues 中反馈。享受离线多语言语音识别的乐趣!