让语音识别和 TTS 彻底离线:新手完整上手指南 sherpa-onnx
【免费下载链接】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 是一个基于 next-gen Kaldi(新一代 Kaldi 语音处理工具链)和 ONNX Runtime(微软开源的深度学习推理引擎)的开源项目,可以把语音转文字(ASR)、文字转语音(TTS)、说话人识别、声音活动检测(VAD,即判断"现在有没有人在说话")等语音任务完全放在本地设备运行——不需要联网,也不需要调用任何云端 API。它支持 Android、iOS、HarmonyOS、树莓派、RISC-V、RK/Ascend 等 NPU 以及 x86_64 服务器,并提供 C++、C、Python、Java、Kotlin、Swift、Go、Rust 等 12 种语言的 API。
先说一个典型场景
你正在做一个会议纪要工具、字幕生成器,或者一台放在工厂车间里的语音质检设备。云识别 API 在这里有三个绕不开的麻烦:
- 流量和费用:长期录音上传,按量计费会是一笔持续开销
- 隐私:音频数据过服务器,敏感内容出不了内网
- 延迟:网络抖动直接影响实时字幕的流畅度
sherpa-onnx 的思路是把整个推理过程搬到设备本地:模型以 ONNX 格式(一种跨平台的模型文件标准)打包,下载一次后永久离线使用。项目自带的 Android 预构建 APK 覆盖了流式识别、VAD、TTS、唤醒词等几乎所有功能,可以直接装在手机上体验,不用先写一行代码。
它能做哪些事
核心能力围绕一条完整的语音处理链路,仓库根目录 README.md 中有完整清单:
| 任务 | 说明 | 典型用途 |
|---|---|---|
| 语音转文字(流式 + 非流式) | 支持 Whisper、Paraformer、SenseVoice 等模型 | 实时字幕、会议转写 |
| 文字转语音 | Piper、Matcha、Kokoro 等 TTS 模型 | 语音播报、有声书 |
| 声音活动检测(VAD) | 自动切出"有人说话"的片段 | 降低空音频的识别开销 |
| 说话人识别 / 分离 | 区分"谁在说" | 多方言会议记录 |
| 语音增强、声源分离 | 降噪、人声与背景分离 | 嘈杂环境识别 |
| 关键词唤醒、标点恢复 | 自定义唤醒词、给文本加标点 | 智能音箱、字幕排版 |
下面这张图是它基于 WebAssembly 编译后在浏览器里运行的离线语音识别演示界面(源码在 python-api-examples/web/),左侧是上传文件识别,右侧是实时录音识别——连服务器端都不需要,纯前端完成:
🎙 场景一:实时转写与字幕
实时场景用"流式"模型(streaming,也叫 online):麦克风音频按小块持续送入,边说边出结果。仓库提供了可直接运行的完整示例:
- flutter-examples/streaming_asr/:跨 Windows、macOS、Linux、Android、iOS 的实时识别 App
- python-api-examples/streaming_server.py:WebSocket 服务端,浏览器端实时转写
- flutter-examples/vad-non-streaming-asr-from-microphone/:VAD + 非流式模型组合,适合长录音
非实时场景(比如处理已有的录音文件)则用"非流式"模型(non-streaming):精度通常更高,但需要整段音频就绪后一次性出结果。两类模型在仓库的预训练模型列表里都有中英双语的现成选项。
🎧 场景二:离线文字转语音
TTS 这条线同样完整。下面三张截图来自同一个 Flutter 示例项目 flutter-examples/tts/,分别在 Ubuntu、Windows 上离线合成中文语音,界面上直接显示 RTF(Real-Time Factor,生成耗时与音频时长的比值,越接近 0 越快):
除了常规 TTS,它还包含 ZipVoice、Pocket TTS 这类零样本语音克隆模型,用几秒参考音频就能生成近似音色,相关示例见 python-api-examples/zipvoice-tts.py。
最短路径跑起离线语音识别
如果你是新手,推荐 Python 作为入门语言,三步走:
- 装库:
pip install sherpa-onnx - 下模型:从项目 Releases 页面的 asr-models 标签下载一个流式或非流式模型包(.tar.bz2,解压即用,不需要训练)
- 跑示例:仓库的 python-api-examples/ 下有几十个按任务划分的脚本,
python3 脚本名.py --help即可看到参数说明,比如 offline-decode-files.py 可以批量转写 wav 文件并打印 RTF
最小可用的转写逻辑只有这么几行(完整示例可对照上述脚本):
import sherpa_onnx recognizer = sherpa_onnx.OfflineRecognizer.from_paraformer( paraformer="model.onnx", tokens="tokens.txt", num_threads=4, ) s = recognizer.create_stream() s.accept_waveform(16000, samples) # 送入 16kHz 音频采样 recognizer.decode_streams([s]) print(s.result.text) # 输出识别文本其他语言的入口也都有现成目录可以照着改:C/C++ 看 c-api-examples/ 和 cxx-api-examples/,移动端看 android/、ios-swiftui/、harmony-os/,还有 go-api-examples/、rust-api-examples/、nodejs-examples/、dotnet-examples/ 等,API 设计和 Python 版基本一一对应。
和同类方案比,差在哪
简单对比一下三类常见路线:
| 方案 | 部署成本 | 隐私 | 弱网/离线可用性 | 备注 |
|---|---|---|---|---|
| 云端 ASR/TTS API | 低(按量付费) | 音频上云 | 不可用 | 精度上限高,但受网络和费用约束 |
| 自训模型 + 自建推理服务 | 高(需训练和运维) | 可控 | 可用 | 工程量大,适合有算法团队的团队 |
| sherpa-onnx | 中(下载现成 ONNX 模型) | 完全本地 | 可用 | 免训练,模型跨平台同一份 |
它的关键差异点有三个:
- 模型标准化:同一个 ONNX 模型文件,从 x86 服务器到手机、树莓派、NPU 设备都能跑,不用为每个平台重新导出
- 流式与非流式双形态:实时和离线是两种不同的工程问题,这里用统一 API 覆盖,还内置 VAD 帮你组合出"静音检测 + 识别"的完整链路
- 语言覆盖广:12 种语言绑定 + Flutter/Tauri 框架集成,同一套功能在移动端 App、桌面应用和 Web 里的写法差异不大
需要说明的短板:它的精度上限取决于所选模型本身,超大规模、多语种通用的场景(比如 Whisper large 级别的效果)仍需挑选合适模型并在设备上验证耗时;另外它不提供端到端的"语音助手",意图理解、对话逻辑要自己接 LLM 或其他组件。
适合谁用
- 适合:做移动端 App、智能硬件、会议/字幕工具、边缘设备语音功能的开发者;对数据不出内网有硬性要求的场景(工厂、医疗、教育设备);想在没有 GPU 的设备上做低成本推理的团队
- 不适合:只想调 API、不想碰模型文件的纯业务方;追求极致精度且算力充足、可以直接上云端大模型的团队
开始动手
把仓库克隆到本地,挑一个语言目录对照 python-api-examples/ 的脚本结构跑通第一个示例即可:
git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx仓库内各语言的示例目录本身就是最直接的文档,配合根目录 README.md 中的预训练模型清单,从下模型到出结果的完整路径都很短。
【免费下载链接】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),仅供参考