ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

sherpa-onnx 跨平台部署实操:在自有设备上跑通语音识别的完整路径

sherpa-onnx 跨平台部署实操:在自有设备上跑通语音识别的完整路径 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-onnxsherpa-onnx 是一个基于 ONNX Runtime 的离线语音推理引擎能在设备端直接运行语音识别ASR、文本转语音TTS、说话人识别、语音活动检测VAD等能力全程不依赖网络连接支持 Linux、macOS、Windows、Android、iOS、HarmonyOS 六大平台并覆盖 12 种编程语言。本文按确定平台 → 准备环境 → 跑通第一次识别 → 处理翻车点的路线组织读完你可以独立完成一次源码编译、跑通离线识别与流式识别演示并把 Android、iOS 示例接入自己的模型是一套完整的 sherpa-onnx 跨平台部署上手手册。先想清楚你的目标平台决定走哪条路不同平台的集成形态差异很大选错入口会浪费半天时间。仓库把示例按语言分成十几个目录下表是平台 → 推荐入口的对照所有路径都相对仓库根目录目标平台推荐集成形态可直接参考的示例目录Linux x86_64 / arm64 / riscv64源码编译C/C/Python APIcxx-api-examples/、python-api-examples/Androidarm64-v8a、armeabi-v7a、x86 系Gradle 工程 预编译 APKandroid/iOSarm64Swift Package SwiftUI 工程ios-swiftui/HarmonyOSHAR 包 示例应用harmony-os/macOS / Windows 桌面源码编译或 Flutter 桌面应用flutter-examples/两点补充如果你要部署到 RK3588、旭日 X3 派、RK NPU、高通 QNN、昇腾 Ascend、爱芯等国产硬件仓库提供了对应的编译开关SHERPA_ONNX_ENABLE_RKNN、SHERPA_ONNX_ENABLE_QNN、SHERPA_ONNX_ENABLE_ASCEND_NPU、SHERPA_ONNX_ENABLE_AXERA见根目录 CMakeLists.txtWeb 端则走 wasm/ 目录的 WebAssembly 构建可以直接在浏览器里做流式识别。环境准备与 sherpa-onnx Linux 编译步骤以 Ubuntu 为例先装好基础依赖portaudio只在需要麦克风示例时才必要sudo apt install -y build-essential cmake git libportaudio2 git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx cd sherpa-onnx mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make -j$(nproc)CMake 阶段会自动拉取 ONNX Runtime 等依赖所以编译机必须能访问外网。编译完成后build/bin/下会生成与示例同名的可执行文件如sherpa-onnx-offline-decode-filesbuild/lib/下是链接库。两个最常见的翻车点⚠️ 没装 PortAudio 时CMake 会跳过音频采集相关示例不会报错但麦克风可执行文件缺失——跑之前先确认build/bin里有没有你要的二进制。⚠️ 只想用 Python API 的话不必完整编译仓库带 setup.py 和 scripts/wheel/ 打包脚本直接pip install sherpa-onnx拿到官方打包即可适合快速验证模型。第一次识别流式与文件识别怎么选sherpa-onnx 的 ASR 模型分两类流式模型边录边出字适合实时字幕和非流式模型整段录完再解码精度更高。选流式就选 Zipformer 系列选离线高精度就选 Paraformer、SenseVoice、Whisper 系列模型文件在仓库 release 页的 asr-models 里下载解压即可无需训练。文件识别最快的一条命令以非流式模型为例./build/bin/sherpa-onnx-offline-decode-files \ --tokens./tokens.txt \ --model./model.int8.onnx \ --num-threads2 ./test_wavs/0.wav如果想体验边说边出字Python 的麦克风示例 speech-recognition-from-microphone.py 配一个流式模型即可运行。要搭多人可用的实时识别服务可以启动流式 WebSocket 服务器客户端再连上它python3 python-api-examples/streaming_server.py \ --encoder./encoder.onnx --decoder./decoder.onnx --joiner./joiner.onnx \ --tokens./tokens.txt --port 6006⚠️ 6006 端口被占用是高频问题用ss -ltnp | grep 6006找出占用进程后换端口即可配套的 Android 示例 android/SherpaOnnxWebSocket/ 就是这个服务器的客户端。如果想把识别结果送进浏览器仓库还带一个最小 Web 演示python-api-examples/web/起服务后在localhost:6009就能上传文件识别。sherpa-onnx Android 示例工程怎么跑android/ 下共有 17 个可独立编译的示例工程覆盖流式识别SherpaOnnx、两遍识别SherpaOnnx2Pass流式出草稿 非流式出终稿、VAD 切分后接非流式识别SherpaOnnxVadAsr、关键词唤醒SherpaOnnxKws、TTS 及系统 TTS 引擎、说话人分离等场景每个工程都可直接./gradlew assembleRelease出 APKcd android/SherpaOnnx ./gradlew assembleRelease集成到自己的 App 里推荐看 android/SherpaOnnxAar/——它把 sherpa-onnx 封装成 AAR 依赖你的工程只需引库 放模型文件。模型放在app/src/main/assets/原生库按 ABI 放在jniLibs/对应目录arm64-v8a、armeabi-v7a、x86、x86_64。⚠️ 两个坑一是 ABI 不匹配——你的ndk只编了 arm64APK 在 32 位机型上会直接闪退二是权限RECORD_AUDIO必须运行时动态申请漏掉这一步 App 不会崩但音频流是空的现象很迷惑。sherpa-onnx iOS 集成方式iOS 侧仓库根目录的 Package.swift 提供 Swift Package Manager 集成ios-swiftui/ 下有 5 个 SwiftUI 示例SherpaOnnxAsr基础识别、SherpaOnnx2Pass两遍识别、SherpaOnnxLangID语种识别、SherpaOnnxSubtitle字幕、SherpaOnnxTts合成。在 Xcode 里用Add Local Package指向仓库路径即可添加依赖。⚠️ 最典型的错误是架构选错真机调试用 arm64模拟器调试需要 x86_64/arm64 模拟器切片跑模拟器时如果只带了真机库链接阶段会报找不到sherpa_onnx符号。模型文件记得加进 Target 的 Bundle Resources运行时用Bundle.main.path(forResource:ofType:)取路径。HarmonyOS 与嵌入式板卡HarmonyOS 的入口是 harmony-os/SherpaOnnxHar是可复用的 HAR 库另配了流式 ASR、TTS、VADASR、说话人识别等独立示例用 DevEco Studio 打开即可构建。面向嵌入式 Linux 板卡树莓派、RV1126、RK3588、SpacemiT K1 等交叉编译依赖 toolchains/ 下的工具链文件一条命令切换目标cmake -DCMAKE_BUILD_TYPERelease \ -DCMAKE_TOOLCHAIN_FILE../toolchains/aarch64-linux-gnu.toolchain.cmake ..目录里还有 arm32arm-linux-gnueabihf、riscv64 以及 SpacemiT 专用工具链。RISC-V 板卡VisionFive 2注意选对工具链选错会生成无法执行的二进制。高频翻车点与调优清单⚠️采样率绝大多数 ASR 模型要求 16kHz 采样率44.1kHz 的录音必须先重采样再送入否则识别结果完全乱码。线程数--num-threads调到接近物理核心数后收益递减移动端建议保守取核心数的一半避免抢占 UI 线程。量化模型模型名带int8的是量化版本内存和速度都更友好弱设备优先选它同一模型 fp32/int8 精度差距通常很小。音频依赖涉及 PortAudio 的能力麦克风采集、本地播放需要系统装有 PortAudio 开发包嵌入式板上要用交叉工具链一起编译。模型与库版本模型和 sherpa-onnx 版本过老时新特性如热词、ITN 逆文本归一化不可用升级前先核对 CHANGELOG.md。收尾sherpa-onnx 的跨平台部署思路可以概括为一套 ONNX 模型、一个 C API、按平台选绑定桌面和服务器端从源码编译起步移动端直接用官方示例工程改板卡端加一个工具链文件。建议先用本文的 Linux 路径把模型跑通再按目标平台复制模型与参数能避开大多数环境问题。仓库内 c-api-examples/ 与 kotlin-api-examples/ 的几十个短示例是遇到具体 API 问题最快能查到的材料。【免费下载链接】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),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进