RK3566 上跑通 sherpa-onnx 流式语音识别: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
先给结论:RK3566 板子上,sherpa-onnx(一个构建在 ONNX Runtime 之上的开源语音工具集,支持识别、合成、说话人分离等)搭配 RKNN 2.2.0 运行时(瑞芯微 NPU 的推理后端,模型需先转成 .rknn 格式)+ 中英双语流式 zipformer 预训练模型,用下面这条命令可以稳定出结果:
sherpa-onnx \ --provider=rknn \ --encoder=encoder.rknn \ --decoder=decoder.rknn \ --joiner=joiner.rknn \ --tokens=tokens.txt \ test.wav我们实测中踩了三个坑,换对版本和模型类型后全部消失。下面是完整复盘。
📋 RKNN 版本怎么选:一张表说清
三个候选版本的兼容性我们逐一验证过,结果如下:
| 项目 | 配置 | 结论 |
|---|---|---|
| 硬件 | RK3566 开发板 | NPU 可用,但不支持核心绑定 |
| 框架 | sherpa-onnx(基于 ONNX Runtime) | 需在板端现场编译 |
| 模型 | sherpa-onnx 官方中英双语流式 zipformer 预训练模型 | 转成 encoder/decoder/joiner 三个 .rknn + tokens.txt |
| RKNN 2.1.0 | 报 "Meet unsupported input dtype for gather" | 弃用 |
| RKNN 2.2.0 | 全程稳定 | ✅ 当前唯一推荐 |
| RKNN 2.3.2 | 段错误(程序意外访问非法内存导致崩溃) | 弃用 |
🔧 板端部署三步走
- 取模型:下载 sherpa-onnx 提供的流式 zipformer 中英双语预训练模型,转成 RKNN 格式,得到
encoder.rknn、decoder.rknn、joiner.rknn三个文件和tokens.txt词表。仓库的转换脚本可参考 scripts/paraformer/rknn/ 下的流程。 - 板端编译:不要直接用 PC 交叉产物,建议在板子上按目标架构直接编译 sherpa-onnx,避免动态库与板子环境不匹配——这一步常被忽略,却是最容易出诡异错误的环节。
- 运行验证:把一段测试音频拷进板子,执行开头那条命令。能持续打印识别文本即部署成功。
⚠️ 故障排查对照表
| 现象 | 原因 | 处置 |
|---|---|---|
| 段错误,GDB 断点在 RKNN 运行时内部函数 | 2.3.2 运行时与模型不兼容 | 降级到 2.2.0 |
| "Meet unsupported input dtype for gather" | 2.1.0 对 Gather 算子(按索引取值的基础操作)的输入类型支持不全 | 升级到 2.2.0 |
| 换用离线模型二进制(如 sherpa-onnx-vad-alsa-offline-asr)后加载失败 | RKNN 目前只吃流式模型;离线模型依赖完整 ONNX 文件,.rknn 格式覆盖不了 | 只选流式识别入口跑 RKNN |
第三行单独提醒一句:选模型前先确认它是流式还是离线,这两者的工具链不能混用,否则会白白浪费排查时间。
🚀 调优与外推
- 线程数:
num_threads按板子实际 CPU 核数设置,多给不会更快,反而加重调度开销。 - chunk 大小:流式识别按块送音频,调大 chunk 准确率略升但延迟变高,反之亦然,按业务场景取平衡点。
- 核心绑定:RK3566 不支持 NPU 核心绑定,先别折腾;如果之后迁移到 RK3588 这类高阶平台,这项优化值得做。
最后说两句
sherpa-onnx 在 RK3566 上用 RKNN 跑流式语音识别这条路是通的,前提就两条:版本锁 2.2.0、模型只用流式。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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考