☰
sherpa-onnx 离线语音识别实战指南:从设备端到树莓派与 NPU 的完整部署拆解
2026/10/13 6:04:50 网站建设 项目流程

sherpa-onnx 离线语音识别实战指南:从设备端到树莓派与 NPU 的完整部署拆解

【免费下载链接】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

会议室断网,语音助手瞬间"失聪";出差到无信号的车间,转写 App 一片空白。这些场景的共同点是没有云。sherpa-onnx 是把离线语音识别、文字转语音、说话人识别等一整套能力搬到设备本地的推理框架,基于 ONNX Runtime 运行,无需联网。

项目定位:一句话讲清它是什么

sherpa-onnx 是一个跨平台语音推理框架,解决的核心问题是:在断网、弱网或隐私敏感的设备上,本地完成语音相关任务。它用 C++ 写核心,通过 ONNX Runtime 做推理,因此同一个模型文件可以在手机、开发板、服务器之间迁移。你不需要为每种设备单独训练模型,只需要下载一份模型,再选对应的运行后端即可。当前主版本为 1.13.8,功能覆盖识别、合成、增强、声源分离与检测五大类。

能力清单:按你要做的事来分

与其按技术栈罗列,不如按"你拿它干什么"来分。四类典型任务,每类都能独立启用。

语音转文字(识别)

分两种形态:流式(边说边出结果,适合实时字幕)和非流式(整段音频一次转写,精度更高,适合文件处理)。支持的模型家族包括 Zipformer、Paraformer、Whisper、SenseVoice、Moonshine、NeMo 等,覆盖中英日韩及多种中文方言。

文字转语音(合成)

支持 Piper、VITS、Matcha、Kokoro、Kitten 等 TTS 引擎,可从文本生成 wav 音频,也支持指定说话人 ID 与语速。

同一套 Flutter 代码在 Ubuntu 桌面完成中文文本转语音,全程本地推理。

音频理解与检测

  • VAD(语音活动检测):用 silero-vad 切出"有人说话"的片段,是识别链路的前置。
  • 说话人识别 / 分离 / 验证:判断"是谁在说",或把多人对话拆开。
  • 语种识别:判断输入是哪种语言。
  • 关键词 spotting:本地唤醒词检测,不依赖云。

音频处理

  • 语音增强:GTcrn、DPDFNet 模型降噪。
  • 声源分离:spleeter、UVR 把人声与背景分离。
  • 标点恢复:给转写结果补标点。

上手路径:先跑起来,再谈原理

最快的验证路径是 Python 包。不需要编译,装包后直接调 API。

pip install sherpa-onnx python3 python-api-examples/offline-decode-files.py \ --tokens ./tokens.txt --paraformer ./paraformer.onnx test.wav

这段命令说明一件事:识别的最小闭环只有三步——装包、指定模型文件、丢一个音频。仓库自带的python-api-examples/里每类任务都有一个可运行脚本,照着对应脚本填模型路径即可。

用代码直接控制时,非流式识别长这样:

import sherpa_onnx recognizer = sherpa_onnx.OfflineRecognizer.from_sense_voice( model="./model.int8.onnx", tokens="./tokens.txt", num_threads=2, ) stream = recognizer.create_stream() stream.accept_waveform(16000, samples) recognizer.decode_stream(stream) print(stream.result)

这段代码说明 sherpa-onnx 的统一调用范式:建识别器 → 建流 → 喂音频 → 解码 → 读结果。无论换 Whisper 还是 Paraformer,都是改"建识别器"那一步的工厂方法,后面的流式流程不变。

macOS 上的 TTS 示例,界面直接给出 RTF(实时率)指标,便于评估性能。

关键机制:它是怎么做到的

三个设计点决定了它的跨平台与易用性。

第一,模型统一为 ONNX 格式。各模型家族被转成.onnx,ONNX Runtime 负责执行。这意味着模型和运行环境解耦——你换平台时不用重新导出模型,只需换对应的 Runtime 后端(CPU、CUDA、CoreML 等)。

第二,识别器用"工厂方法"屏蔽模型差异。从上面的代码能看到from_sense_voice、from_whisper、from_transducer等入口。每个模型家族有自己的参数(Whisper 要 encoder/decoder,Paraformer 只要单文件),但对外暴露的都是create_stream/decode_stream这套接口。你不用关心内部结构,只需选对工厂方法。

第三,VAD + 非流式 ASR 的组合。真实语音是连续且带静音的。项目提供了vad-with-non-streaming-asr.py这类组合脚本:先用 silero-vad 找出有语音的片段,再对每段做高精度非流式识别。这是"麦克风实时转写"最常见的落地形态。

选型对照:不同设备怎么选

平台覆盖很宽,关键在"按硬件挑后端"。下表按设备给出建议起点。

设备类型典型代表建议后端说明
手机 / 平板Android、iOS、HarmonyOSNNAPI / CoreML走移动端 API 或 Flutter/Tauri 包
开发板 / 边缘树莓派、RV1126、RK3588、VisionFive 2CPU轻量模型 + int8 量化
NPU 加速RK、Qualcomm、Ascend、Axera、Intel对应 NPU 后端专用加速,功耗更低
桌面 / 服务器x86_64、Jetson OrinCPU / CUDA / OpenVINO多线程或 GPU 提吞吐
浏览器 / NodeWebAssembly、NodeJSWASM / JS 绑定端侧免安装运行

它支持的语言有 12 种:C++、C、Python、JavaScript、Java、C#、Kotlin、Swift、Go、Dart、Rust、Pascal,另加 WebAssembly。移动端通常走 Java/Kotlin/Swift 或 Flutter 包,桌面服务走 Python/C++,嵌入式走 C/C++。

编译为 WebAssembly 后,识别可跑在浏览器里,支持文件上传与麦克风实时录音。

调优与排坑:常见问题与容易踩的坑

性能与排障是落地时最花时间的部分。项目未公开的指标一律以官方基准为准,这里给的是方向。

问题现象常见原因调整方向
实时率(RTF)偏高、跟不上语速模型偏大或线程不足换 int8 量化模型;num_threads对齐核心数
内存占用高模型多、实例多按需延迟加载;int8 量化
中文识别夹杂英文/口音偏差模型语言不匹配选对应语种模型;SenseVoice 支持多方言
流式结果不稳、跳字解码参数或 LM 未配调decoding-method、hotwords偏置
Flutter 里模型加载失败沙箱读不到文件模型作为 asset,运行时拷到可写目录

几条实操建议:先压模型再谈调参——优先选.int8.onnx版本;num_threads别盲目拉满,线程过多反而增加调度开销;专业术语识别差时,用--hotwords-file加偏置词表比换模型更省事;采样率要对齐,默认 16kHz,前端不一致会导致整条链路偏移。

行动收尾:落地 checklist

按顺序走,能少走弯路。

  • 明确任务类型:流式还是非流式?是否要 VAD、TTS、说话人分离?
  • 选定语言绑定:移动端选 Java/Kotlin/Swift,服务选 Python/C++,端侧选 C/C++
  • 下载对应模型包(.onnx+tokens.txt),优先 int8 版本
  • 用仓库python-api-examples/里的脚本先跑通一个任务
  • 按设备挑后端(CPU / NPU / GPU),跑基准脚本确认实时率达标
  • 流式场景配 VAD,识别差时加热词偏置
  • 移动端把模型放进 asset,运行时拷贝到可写目录

代码获取:

git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx

从仓库根目录读README.md找到对应功能的模型下载说明,配合python-api-examples/和c-api-examples/里的脚本,即可在本地跑通第一条语音链路。

【免费下载链接】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),仅供参考

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

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

立即咨询