sherpa-demo
仓库内 sherpa-onnx + 预置 models 的最小可运行 demo 集合(纯 Rust 实现)。每个程序对应一个模型/场景, 方便:
- 验证 sherpa-onnx 与各模型在本机能跑通;
- 给
sherpa-asr-server/与sherpa-tts-server/这类服务化封装排查问题时做最小复现; - 后续做对照实验(识别准确率、TTS 音质、VAD 切分边界等)。
依赖
- Windows x64 / Linux x64
- Rust 工具链(Rust 2021 edition,
cargo 1.98+) - 仓库内已下载的预编译 SDK
../sherpa-onnx/win_x64/或../sherpa-onnx/linux_x64/ - 仓库内已下载的模型
../models/:sherpa-onnx-sense-voice/:离线 ASR (SenseVoice)sherpa-onnx-streaming-zipformer-zh/:流式 ASR (zipformer)vits-zh-aishell3/:TTS (VITS)silero-vad/:VAD (Silero VAD v4)
构建
Windows (PowerShell 7):
powershell
pwsh .\build.ps1Linux:
bash
bash ./build.shCargo 构建遵循 Rust 官方默认约定(中间产物与缓存输出至 target/,支持安全的 cargo clean),最终自包含交付包装配至 dist/win_x64/ 或 dist/linux_x64/(5 个 demo 可执行文件与运行时动态链接库 DLL / SO)。
运行
工作目录建议为 dist\win_x64\(Linux 下为 dist/linux_x64/)。所有 demo 都按相对路径自动定位 models 根,也可以手动传参覆盖。
1. 离线 ASR (SenseVoice)
powershell
.\demo_offline_asr.exe
# 自定义 models 根与目标 wav/目录
.\demo_offline_asr.exe ..\..\..\models D:\path\to\target.wav输出:对 models/sherpa-onnx-sense-voice/test_wavs/ 下每个 wav 打印识别文本、检测语种、解码耗时、RTF 对齐表格。
2. 流式 ASR (streaming zipformer)
powershell
.\demo_online_asr.exe
# 默认输入:models/sherpa-onnx-sense-voice/test_wavs/zh.wav
.\demo_online_asr.exe ..\..\..\models D:\some\other.wav输出:以 0.1s 切片喂入识别器,文本变化时打印一行 partial,结尾打印 FINAL 与总耗时。
3. TTS (vits-zh-aishell3)
powershell
.\demo_tts.exe # 默认中文测试句
.\demo_tts.exe "今天天气真不错" # 自定义文本
.\demo_tts.exe "文本" ..\..\..\models 0 # 自定义 models 根 + speaker_id输出:当前目录下的 tts-out.wav,以及采样率/时长/RTF。
4. VAD (silero)
powershell
.\demo_vad.exe输出:对 zh_vad.wav 检测出的每段语音 [start_ms - end_ms] 与时长。
5. VAD + 离线 ASR 联合
powershell
.\demo_vad_asr.exe输出:先用 silero_vad 切段,再把每段送 SenseVoice,按段打印 [start_ms - end_ms] (lang) | 文本。
命令行参数约定
| demo | 参数 1 | 参数 2 | 参数 3 |
|---|---|---|---|
demo_offline_asr | models 根(可选) | 目标 wav 或 wav 目录(可选) | — |
demo_online_asr | models 根(可选) | 输入 wav(可选) | — |
demo_tts | 文本(可选) | models 根(可选) | speaker_id(可选) |
demo_vad | models 根(可选) | 输入 wav(可选) | — |
demo_vad_asr | models 根(可选) | 输入 wav(可选) | — |
故障排查
启动时弹"找不到 onnxruntime.dll" 或动态库加载失败:检查
dist\win_x64\(或dist/linux_x64/)下是否有必需的运行时动态库。build.ps1/build.sh已配置自动复制。Failed to create OfflineRecognizer / OnlineRecognizer / OfflineTts:通常是模型路径不对,或者 onnxruntime 加载该模型失败。看上面打印的绝对路径,再确认onnx-platform/models/对应模型文件是否完整。中文乱码:终端需要 UTF-8。PowerShell 可执行:
powershellchcp 65001 $OutputEncoding = [System.Text.UTF8Encoding]::new()RTF 偏高(>1):单线程 CPU 推理在小机器上正常,可在各 demo 源码
num_threads = 1处改为2或4后重新构建。
不包含
- 麦克风实时输入。所有 demo 都从 wav 文件读,便于结果可重复。