RK3566 流式语音识别部署:sherpa-onnx 跑通 RKNN NPU 的完整实战指南
2026/9/12 21:05:45 网站建设 项目流程

RK3566 流式语音识别部署:sherpa-onnx 跑通 RKNN 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

本文以 sherpa-onnx 为例,带你走通在 RK3566 开发板上运行流式语音识别模型的完整流程:从源码编译、RKNN 模型转换,到板端实时识别调参。读完即可在开发板上得到一条可用的离线识别链路。

为什么小跑板上做语音识别这么麻烦

在 RK3566 上做免提交互,云端 ASR 延迟高、必须联网,纯 CPU 跑大型识别模型又慢又吃内存,4GB 内存经常捉襟见肘。sherpa-onnx 走的是本地路线:基于 ONNX Runtime(微软开源的模型推理引擎,可把训练好的模型转换后在任意设备上运行)做推理,断网也能完成流式语音识别、语音合成、说话人分离、语音增强,并支持 C/C++/Python/Go/Rust 等 12 种语言,以及 RK NPU 硬件加速。

项目能力清单:本地语音工具集

一句话定位:sherpa-onnx 是一个完全在本地运行的语音工具集,覆盖"识别、合成、分离、增强"全链路,专为嵌入式和多平台设计。

核心能力:

  • 流式与离线语音识别(ASR),可做实时字幕
  • 文本转语音(TTS)
  • 说话人识别与说话人分离
  • 语音增强、音源分离
  • 语音活动检测(VAD,即自动剪掉录音中的人声空白段)

代码组织上,跨语言绑定与示例分布在 sherpa-onnx/csrc/(C++ 核心)及各语言 examples 目录,构建开关集中在 CMakeLists.txt。

最小可行路径:四步拿到第一个识别结果

第一步:获取源码

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

克隆仓库并进入项目根目录。

第二步:先装好 RKNN 工具链,再启用 NPU 编译

按板端厂商说明安装 RKNN 工具链(本方案验证可用 2.2.0 版本),然后把它的库目录通过环境变量交给 CMake:

export SHERPA_ONNX_RKNN_TOOLKIT2_LIB_DIR=/path/to/rknn-toolkit2/lib mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=ON -DSHERPA_ONNX_ENABLE_RKNN=ON make -j$(nproc)

SHERPA_ONNX_ENABLE_RKNN打开 NPU 支持,SHERPA_ONNX_RKNN_TOOLKIT2_LIB_DIR告诉构建系统 rknnrt 运行时库在哪,否则链接阶段会失败。

第三步:把 ONNX 模型转成 RKNN 格式

RKNN NPU 只认自家格式。以流式 zipformer 为例,用 RKNN 工具链把 encoder、decoder、joiner 三个子模型逐个转换(导出脚本可参考 scripts/whisper/rknn/README.md 的写法):

python3 export_rknn.py --target-platform rk3566 \ --in-model encoder.onnx --out-model encoder.rknn

每个子模型各跑一次,得到三个 .rknn 文件和一份 tokens.txt(发音单位与词表的映射表)。

第四步:板端运行

./build/bin/sherpa-onnx --provider=rknn \ --encoder=encoder.rknn --decoder=decoder.rknn --joiner=joiner.rknn \ --tokens=tokens.txt --num-threads=4 --chunk-size=16

程序启动后进入麦克风实时识别,说出中文或英文即会打印文字。

机制拆解:流式识别与 NPU 是怎么配合的

打个比方:流式识别像记者会的现场同传。译员不等整场讲完才翻译,而是每几秒钟听一小段就译一小段,同时"记住"前几句的上下文,保证句子衔接通顺。模型侧对应的是 encoder 按时间分块(chunk)处理音频、并用缓存保存历史状态;这也正是流式模型内存占用低于离线模型的原因。

RKNN NPU 则像工厂里的一条专用流水线:ONNX 模型转换后从通用 CPU 搬上这条流水线执行张量计算,CPU 腾出手来收音频、管线程调度。sherpa-onnx 的 NPU 适配层在 sherpa-onnx/csrc/rknn/,包含流式 transducer 解码器和若干离线模型实现。

关键参数说明

参数示例值作用(白话解释)
--providerrknn指定用 NPU 推理,而不是 CPU
--num-threads4推理线程数,与 RK3566 四核对齐
--chunk-size16每次喂给模型的音频块大小,越小延迟越低、开销略增
采样率16000模型要求的音频刻度,wav 不一致会导致识别异常

流式与离线模型在 RKNN 上的差异

维度流式 zipformer离线模型(paraformer、sense-voice 等)
RKNN 适配完整适配,支持实时有适配实现,但内存占用更高
输入方式音频流分块送入整段 wav 一次送入
典型场景免提交互、实时字幕录音转写、批量处理

示例参考数据

以下为 RK3566(四核 A55,4GB)+ 中英双语 zipformer 的参考量级,实际随模型大小与量化设置浮动:

指标数值
模型加载时间约 1.2 s
首次推理延迟约 0.8 s
持续识别延迟约 0.15 s
峰值内存约 180 MB
CPU 利用率约 75%(4 核平均)
RTF(实时因子,低于 1 即快于实时)约 0.35

⚠️ 避坑实录:RKNN 部署的三个高频问题

问题一:换了 RKNN 版本结果全不同

  • 现象:2.1.0 报 "Meet unsupported input dtype for gather";2.3.2 直接段错误,gdb 显示崩溃点在运行时内部rknn_run
  • 原因:运行时库与已转换模型的算子/数据类型格式不匹配,属于运行时层面的兼容性问题,不是你的代码错。
  • 解法:锁死 2.2.0 版本,转换模型与板端运行时用同一版本。

问题二:编译时找不到 rknn 头文件或链接库

  • 现象:cmake 或 make 阶段报 rknn 头文件缺失、找不到rknnrt
  • 原因:CMake 默认从环境变量SHERPA_ONNX_RKNN_TOOLKIT2_LIB_DIR找运行时库,没设置就找不到。
  • 解法:cmake 前先 export 该变量指向工具链的 lib 目录(见最小可行路径第二步)。

问题三:程序不报错,但识别结果为空

  • 现象:运行正常,屏幕上却迟迟不出文字。
  • 原因:多为两点——wav 采样率不是 16k;或--provider=rknn却喂了未转换的 .onnx 文件。
  • 解法:确认音频为 16000Hz 单声道,且三个子模型均已转成 .rknn 再运行。

收尾:结论与行动清单

结论:RK3566 + sherpa-onnx + RKNN 2.2.0 + 流式 zipformer,是一条能落地、能实时的板端语音识别路线。

行动清单:

  1. 装好 RKNN 2.2.0 工具链,export 工具库目录后,用SHERPA_ONNX_ENABLE_RKNN=ON编译 sherpa-onnx。
  2. 从项目发布的 asr-models 页下载流式双语 zipformer,将 encoder/decoder/joiner 转成 .rknn。
  3. 先用测试 wav 验证离线解码正确,再接入麦克风流,微调--chunk-size与线程数到延迟与功耗的平衡点。

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

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

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

立即咨询