跳到正文

sherpa-demo

仓库内 sherpa-onnx + 预置 models 的最小可运行 demo 集合。每个程序对应一个模型/场景, 方便:

  1. 验证 sherpa-onnx 与各模型在本机能跑通;
  2. sherpa-asr-online-server/sherpa-tts-server/ 这类服务化封装排查问题时做最小复现;
  3. 后续做对照实验(识别准确率、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_asrmodels 根(可选)
demo_online_asrmodels 根(可选)输入 wav(可选)
demo_tts文本(可选)models 根(可选)speaker_id(可选)
demo_vadmodels 根(可选)输入 wav(可选)
demo_vad_asrmodels 根(可选)输入 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 可执行:

    powershell
    chcp 65001
    $OutputEncoding = [System.Text.UTF8Encoding]::new()
  • RTF 偏高(>1):单线程 CPU 推理在小机器上正常,可在源码 num_threads = 1 处改为 24 后重新构建。

不包含

  • 麦克风实时输入。所有 demo 都从 wav 文件读,便于结果可重复。

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。