外观
sherpa-demo
仓库内 sherpa-onnx + 预置 models 的最小可运行 demo 集合。每个程序对应一个模型/场景, 方便:
- 验证 sherpa-onnx 与各模型在本机能跑通;
- 给
sherpa-asr-online-server/与sherpa-tts-server/这类服务化封装排查问题时做最小复现; - 后续做对照实验(识别准确率、TTS 音质、VAD 切分边界等)。
依赖
- Windows x64
- Visual Studio 2022(CMake 通过 "Visual Studio 17 2022" 生成器)
- 仓库内已下载的预编译产物
../sherpa-onnx/win_x64/ - 仓库内已下载的模型
../models/:sherpa-onnx-sense-voice/:离线 ASR (SenseVoice)sherpa-onnx-streaming-zipformer-bilingual-zh-en/:流式 ASR (zipformer)vits-zh-aishell3/:TTS (VITS)silero_vad.onnx:VAD
构建
powershell
.\build.ps1等价于:
powershell
cmake -S . -B build/win_x64 -G "Visual Studio 17 2022" -A x64
cmake --build build/win_x64 --config Release
cmake --install build/win_x64 --config Release --prefix target/win_x64构建目录保留在 build/win_x64\,发布目录在 target\win_x64\。target/ 只保留 5 个 demo 可执行文件和必要的运行时 DLL,方便直接打包发布。
运行
工作目录建议为 target\win_x64\。所有 demo 都按相对路径 ..\..\..\models 自动定位 models 根,也可以手动传第一个参数覆盖。
1. 离线 ASR (SenseVoice)
powershell
.\demo_offline_asr.exe输出:对 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 根(可选) | — | — |
demo_online_asr | models 根(可选) | 输入 wav(可选) | — |
demo_tts | 文本(可选) | models 根(可选) | speaker_id(可选) |
demo_vad | models 根(可选) | 输入 wav(可选) | — |
demo_vad_asr | models 根(可选) | 输入 wav(可选) | — |
故障排查
启动时弹"找不到 onnxruntime.dll":检查
target\win_x64\下是否有 4 个 DLL。CMake 已配置 POST_BUILD 自动 copy,正常一次构建后即生效。Failed to create OfflineRecognizer / OnlineRecognizer / OfflineTts:通常是模型路径不对,或者 onnxruntime 加载该模型失败。看上面打印的绝对路径,再用sherpa-onnx\win_x64\bin\sherpa-onnx-version.exe验证 sherpa-onnx 本体是否完整。中文乱码:终端需要 UTF-8。PowerShell 可执行:
powershellchcp 65001 $OutputEncoding = [System.Text.UTF8Encoding]::new()RTF 偏高(>1):单线程 CPU 推理在小机器上正常,可在源码
num_threads = 1处改为2或4后重新构建。
不包含
- 麦克风实时输入。所有 demo 都从 wav 文件读,便于结果可重复。