sherpa-onnx 语音工具箱:3 分钟跑通离线语音合成与识别
2026/9/12 17:53:04 网站建设 项目流程

sherpa-onnx 语音工具箱:3 分钟跑通离线语音合成与识别

【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

sherpa-onnx 是一个完全离线的语音工具箱:语音识别(ASR)、语音合成(TTS)、VAD、说话人分离、语音增强都装在一箱里,不联网、零 API 费用。这篇走一遍最小路径:装包、下模型、跑出第一段声音。

🎬 先想两个场景:你的声音要留在哪

场景一:录音转写,数据不能出内网。把会议录音丢给 offline-decode-files.py,逐文件转成文字,全程不碰外网,也没有按字符计费的账单。

场景二:给自家软件加个朗读。App、网站、树莓派小盒子都可以。模型跑在本地 CPU 上,断网照常工作,数据不落地。

这两个场景,一个要"听懂",一个要"开口",都是 sherpa-onnx 的基本功。

🚀 三步跑通第一个语音合成

git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx cd sherpa-onnx pip install sherpa-onnx soundfile

装一个 Python 包就够了,不用自己编译 C++。接着下载一个约 20MB 的英文 TTS 模型,放进项目目录解压。模型列表在仓库 releases 页的 tts-models 标签下,命令示例直接写在 offline-tts.py 文件头部。

第 2 步:合成并试听

python3 ./python-api-examples/offline-tts.py \ --vits-model=./vits-piper-en_US-amy-low/en_US-amy-low.onnx \ --vits-tokens=./vits-piper-en_US-amy-low/tokens.txt \ --vits-data-dir=./vits-piper-en_US-amy-low/espeak-ng-data \ --output-filename=./generated.wav \ "Hello from sherpa-onnx. This runs fully offline."

跑完终端会打印RTF: 0.xxx/xx.xxx = 0.xxx,这就是实时率:合成耗时除以音频时长。小于 1 表示比实时快。生成的 wav 直接播放验证即可。

🧠 核心原理:一个工具箱,两种角色

别把它想成一个"引擎",更像是工具箱:识别、合成、VAD 各自是独立的 ONNX 模型,互不牵连,各对应一套 API。

  • ASR 像"速记员":wav 进来,切成 40ms 左右的小帧,逐帧算特征、喂进模型,吐出文字。
  • TTS 像"播音员":文本先经过数字、日期等规则改写(那几个.fst文件干这事),变成音素,再经神经网络生成音频波形。

推理底座是 ONNX Runtime。模型训练好之后导出成 .onnx,任何能跑 ONNX Runtime 的机器——手机、树莓派、RK NPU、服务器——都可以直接执行,这就是"一次训练、多端部署"的由来。

⚙️ 进阶用法与调参

换流式识别。麦克风实时转写用 online-decode-files.py,边采边出字,不等整句说完。

部署成 WebSocket 服务。一条命令起服务,浏览器直接录音上传:

python3 ./python-api-examples/http_server.py --port=6009 python3 ./python-api-examples/non_streaming_server.py --port=10095

VAD 打底再识别。长录音先用 vad-with-non-streaming-asr.py 把静音切掉,再送 ASR,省时间也省算力,这个组合也是字幕生成的标准套路。

调参先看这张表:

参数默认值作用
--num-threads1神经网络计算线程,调 2~4 提速明显
--sample-rate16000音频采样率,必须与 wav 实际一致
--decoding-methodgreedy_search解码方式,beam search 更准但更慢
--max-num-sentences1批内句数,防长文本 OOM
--speed1.0合成语速,越小越慢

🕳️ 三个新手必踩的坑

1. 采样率不匹配,识别结果全是"鬼话"。8k 的电话音频按 16k 读,音调全变。看 wav 标称采样率,--sample-rate填多少就传多少。

2. VITS 模型参数传混。官方给了 piper、matcha、kokoro、kitten 等多套模型。piper 系只用--vits-model--vits-tokens--vits-data-dir三项;带--vits-lexicon的是 icefall、zh-ll 那批模型。指定data-dir后 lexicon 和 tokens 会被忽略,别两个都传。

3. 长文本合成 OOM。--max-num-sentences控制批内句数,设 1 最稳,小值并不会比大值慢。

⚖️ 选型建议:它适合什么,不适合什么

适合:离线/内网部署;Android、iOS、鸿蒙、树莓派、NPU 板卡等多平台;预算敏感、不想按量付费 API;要 VAD、说话人分离、语音增强这类"周边能力"时,一个项目全包含。

不适合:要顶级情感表达和超高自然度的高端有声书场景;或毫秒级超低延迟的实时对话,那还是云方案成熟。

另外,仓库示例里多数是"离线模型 + 模拟流式"的玩法,纯流式体验以 streaming-decode-files.py 这类脚本为准,预期要摆正。

📚 延伸资源(均为仓库内路径)

  • 离线识别:offline-decode-files.py
  • 语音合成:offline-tts.py,文件头 8 组模型示例可直接抄
  • Web 与 WebSocket 部署:http_server.py、non_streaming_server.py
  • VAD 组合:vad-with-non-streaming-asr.py
  • Android 端工程:android/SherpaOnnxTts/、android/SherpaOnnx/
  • Flutter 跨平台示例:flutter-examples/
  • 12 种语言的 API 绑定:c-api-examples/、java-api-examples/、go-api-examples/、python-api-examples/

项目目录很直白:python-api-examples/下 80 多个脚本按功能命名,每个脚本头部 Usage 注释都是现成命令,照着改路径就能跑。

下一步

挑 tts-models 列表里体积最小的那个模型,把 offline-tts.py 完整跑一遍,记下打印的 RTF;然后加--num-threads=2再跑一次,对比两个数字。基线有了,后面换中文模型、换 kokoro 多语言模型,心里就有底了。

【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询