跳到正文

sherpa-demo ​

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

  1. 验证 sherpa-onnx 与各模型在本机能跑通;
  2. 给 sherpa-asr-server/ 与 sherpa-tts-server/ 这类服务化封装排查问题时做最小复现;
  3. 后续做对照实验(识别准确率、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.ps1

Linux:

bash
bash ./build.sh

Cargo 构建遵循 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_asrmodels 根(可选)目标 wav 或 wav 目录(可选)—
demo_online_asrmodels 根(可选)输入 wav(可选)—
demo_tts文本(可选)models 根(可选)speaker_id(可选)
demo_vadmodels 根(可选)输入 wav(可选)—
demo_vad_asrmodels 根(可选)输入 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 可执行:

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

不包含 ​

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

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