sherpa-onnx 是什么
sherpa-onnx 是 Next-gen Kaldi 团队基于 ONNX Runtime 的开源语音工具库:
- 流式 / 离线 ASR(Zipformer、Paraformer、Whisper、SenseVoice…)
- TTS(VITS、Matcha、Kokoro…)
- VAD(Silero)
- 声纹、关键词检测、说话人分割
- C++ / Python / Go / Swift / Kotlin / JS / WASM 等多语言绑定
- 纯 ONNX,CPU 即可跑,对边缘部署友好
在本项目里,sherpa-onnx 是 ASR 服务和 TTS 服务的推理底座——业务侧并不直接调它,但所有识别 / 合成的”算力”都由它提供。
在仓库中的位置
1 | ai-voice-platform/ |
ASR 服务(sherpa-asr-online-server/)和 TTS 服务(sherpa-tts-server/)都通过 CMake 链接到 ../sherpa-onnx/ 下的头文件与库。
内置模型清单
1 | ai-voice-platform/models/ |
| 模型 | 用途 | 谁在用 | 大小级别 |
|---|---|---|---|
| streaming-zipformer-bilingual-zh-en | 流式实时识别 | sherpa-asr-online-server | ~70MB |
| sense-voice | 离线整段识别(高准确率,多语种) | sherpa-demo / 可选 ASR | ~250MB |
| vits-zh-aishell3 | TTS 合成 | sherpa-tts-server | ~120MB |
| silero_vad | 语音段检测 | sherpa-asr-online-server | <2MB |
测试音频也在 models/ 下:sherpa-onnx-sense-voice/test_wavs/。
sherpa-demo —— 5 个最小验证程序
sherpa-demo/ 是仓库内 sherpa-onnx + 预置 models 的最小可运行验证集合。任一组件出问题时,先用 demo 复现来定位”是模型挂了”还是”服务封装挂了”。
构建
1 | cd sherpa-demo |
等价于:
1 | cmake -S . -B build -G "Visual Studio 17 2022" -A x64 |
完成后 5 个 exe + 4 个 sherpa-onnx 运行时 DLL 一起出现在 build\Release\ 下。CMake 已配 POST_BUILD 自动 copy。
运行
工作目录建议 build\Release\。所有 demo 默认按 ..\..\..\models 自动定位模型根,可用第一个参数覆盖。
| Demo | 用途 |
|---|---|
demo_offline_asr.exe |
SenseVoice 离线 ASR,遍历 test_wavs/ 打印文本、语种、RTF |
demo_online_asr.exe [models_root] [wav_path] |
流式 zipformer,按 0.1s 切片喂入,partial 实时打印 |
demo_tts.exe [text] [models_root] [speaker_id] |
VITS 合成,输出 tts-out.wav |
demo_vad.exe |
silero-vad 切段,打印 [start_ms - end_ms] |
demo_vad_asr.exe |
VAD 切段 + 离线 ASR 联合,按段打印 `(lang) |
例:
1 | .\demo_online_asr.exe |
故障排查(demo 层)
| 现象 | 排查 |
|---|---|
启动找不到 onnxruntime.dll |
检查 build\Release\ 下 4 个 DLL 是否齐全;正常一次构建后已通过 CMake POST_BUILD copy |
Failed to create OfflineRecognizer / OnlineRecognizer / OfflineTts |
模型路径不对,或 onnxruntime 加载模型失败;看打印的绝对路径,再用 sherpa-onnx/win_x64/bin/sherpa-onnx-version.exe 验证本体 |
| 终端中文乱码 | PowerShell 执行 chcp 65001 ; $OutputEncoding = [System.Text.UTF8Encoding]::new() |
| RTF > 1(推理慢于实时) | 改源码 num_threads = 1 → 2/4 后重新构建;或换更快的机器 |
如何替换/升级模型
模型文件全部是 .onnx + 元数据,与代码完全解耦。升级步骤:
- 从 k2-fsa/sherpa-onnx Models 下载新模型
- 解压到
models/<新模型目录>/ - 改对应服务的
config.json中的模型路径 - 重启服务
例如把 ASR 模型从双语 zipformer 换成纯中文 zipformer:
1 | { |
无需重新编译。
在生产中需要关心 sherpa-onnx 吗
通常不需要。日常用法:
- 起 ASR / TTS 服务时 sherpa-onnx 是内嵌依赖,跟着
build.ps1走 - 排查识别偏差、TTS 音质、VAD 切分时,回到
sherpa-demo/做最小复现 - 想换语言、换音色、换模型架构时,到 sherpa-onnx 官网找新模型、改路径
不在 sherpa-onnx 层做的事
| 想做 | 在哪做 |
|---|---|
| 流式 WebSocket ASR | sherpa-asr-online-server 自己封装 |
| HTTP TTS + wav 缓存 | sherpa-tts-server 自己封装 |
| 业务编排 / 通话状态机 | callflow-esl |
| 与 FreeSWITCH 对接 | mod_audio_fork |
sherpa-onnx 只负责”喂样本进去、拿结果出来”。