sherpa-onnx RK3566 流式语音识别实战:3 大 RKNN 版本兼容性坑与完整部署指南
【免费下载链接】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 是一个基于 ONNX Runtime 的本地语音识别框架。本文记录 zipformer 流式模型在 RK3566 开发板上经 RKNN 提供方跑通的部署路径,并整理 RKNN 运行时 2.1.0 / 2.2.0 / 2.3.2 三个版本的兼容性坑位。
📌 结论先行:可直接跑通的最小配置
我们实测三个 RKNN 版本后,RK3566 流式语音识别能稳定运行的条件只有四条:
- 运行时版本:RKNN 2.2.0。2.1.0 与 2.3.2 均存在兼容问题,具体现象见后文对照表。
- 模型形态:RKNN 目前仅支持流式识别模型;离线模型(offline ASR)无法走 RKNN 加载,离线二进制会直接加载失败。
- 识别模型:sherpa-onnx 官方预训练的 zipformer 双语(中英)流式模型,转成 rknn 格式后为
encoder.rknn/decoder.rknn/joiner.rknn三件套,外加tokens.txt词表。 - 运行命令:以
--provider=rknn显式指定提供方,并用三个参数分别指向 encoder / decoder / joiner,完整命令见下文。
部署全流程:环境搭建、板端编译与一键运行
1. RKNN 2.2.0 环境搭建
先在开发板安装 RKNN 运行时,只装 2.2.0,跳过 2.1.0 和 2.3.2。这一步是整个 RKNN 部署中最容易翻车的环节,版本选错后文所有报错都会复现。
2. 板端编译 sherpa-onnx
sherpa-onnx 需要在板子上直接编译以适配 RK3566 的目标架构,交叉编译的通用产物并不保证可用。拉取源码后按常规 CMake 流程构建:
git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx cd sherpa-onnx mkdir build && cd build cmake .. make -j编译相关的基础设施可参考仓库内的 cmake/onnxruntime.cmake 与根目录 CMakeLists.txt,框架更新日志见 CHANGELOG.md。
3. 准备模型与词表
将 zipformer 双语流式模型的 encoder、decoder、joiner 分别转换为.rknn文件,并准备配套的tokens.txt。三者与词表放在同一目录,后续按文件名引用。
4. 流式 ASR 一键运行命令
把模型换成 RKNN 格式、提供方换成rknn,其余与桌面端用法一致:
sherpa-onnx \ --provider=rknn \ --encoder=encoder.rknn \ --decoder=decoder.rknn \ --joiner=joiner.rknn \ --tokens=tokens.txt \ test.wav如果需要在代码层集成而非命令行,可对照 c-api-examples/streaming-zipformer-c-api.c 与 cxx-api-examples/streaming-zipformer-cxx-api.cc 两个流式参考示例,核心解码逻辑位于 sherpa-onnx/csrc/。
⚠️ 报错速查:RK3566 上的三类典型故障
原文分散在多轮测试里的故障信息,合并成一张 ASR 段错误排查用的对照表:
| 现象 | 触发版本 / 场景 | 原因 | 规避方式 |
|---|---|---|---|
| 段错误(Segfault),GDB 定位在 RKNN 运行时内部函数 | RKNN 2.3.2 | 运行时库与模型之间的兼容性问题 | 降级到 RKNN 2.2.0 |
控制台报Meet unsupported input dtype for gather | RKNN 2.1.0 | 该版本对 Gather 操作的数据类型支持不完善 | 升级到 RKNN 2.2.0 |
| 模型加载失败 | 离线模型 + 任意 RKNN 版本 | RKNN 仅支持流式模型;离线模型要求加载完整 ONNX 文件,而sherpa-onnx-vad-alsa-offline-asr等离线二进制拿不到对应文件 | 改用流式识别模型与对应的流式二进制 |
排查顺序建议:先确认版本是 2.2.0,再确认模型是流式,最后才怀疑参数拼写。
调优与延伸
- 核心绑定:RK3566 不支持 NPU 核心绑定,此项优化在 RK3588 等平台才需要考虑,在本板上可以跳过。
- 线程数:
num_threads参数按板子实际 CPU 核心数调整,流式模型三件套会分别占用推理线程。 - chunk 大小:调整流式识别的 chunk 大小可在延迟与准确率之间取舍,端侧交互场景优先压低延迟。
- 流式参考实现也可对照 Python 侧的 python-api-examples/online-decode-files.py 理解数据流。
写在最后
sherpa-onnx 在 RK3566 上的 RKNN 部署路径已验证可行,瓶颈基本集中在运行时版本与模型形态的匹配上,而非代码层面。随着 RKNN 后续版本的更新,离线模型支持与算子覆盖预计会继续补齐,建议关注 CHANGELOG.md 与 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),仅供参考