ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RK3566 流式语音识别部署:sherpa-onnx 跑通 RKNN NPU 的完整实战指南

RK3566 流式语音识别部署:sherpa-onnx 跑通 RKNN NPU 的完整实战指南 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 版本然后把它的库目录通过环境变量交给 CMakeexport SHERPA_ONNX_RKNN_TOOLKIT2_LIB_DIR/path/to/rknn-toolkit2/lib mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease \ -DBUILD_SHARED_LIBSON -DSHERPA_ONNX_ENABLE_RKNNON 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 --providerrknn \ --encoderencoder.rknn --decoderdecoder.rknn --joinerjoiner.rknn \ --tokenstokens.txt --num-threads4 --chunk-size16程序启动后进入麦克风实时识别说出中文或英文即会打印文字。机制拆解流式识别与 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四核 A554GB 中英双语 zipformer 的参考量级实际随模型大小与量化设置浮动指标数值模型加载时间约 1.2 s首次推理延迟约 0.8 s持续识别延迟约 0.15 s峰值内存约 180 MBCPU 利用率约 75%4 核平均RTF实时因子低于 1 即快于实时约 0.35⚠️ 避坑实录RKNN 部署的三个高频问题问题一换了 RKNN 版本结果全不同现象2.1.0 报 Meet unsupported input dtype for gather2.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或--providerrknn却喂了未转换的 .onnx 文件。解法确认音频为 16000Hz 单声道且三个子模型均已转成 .rknn 再运行。收尾结论与行动清单结论RK3566 sherpa-onnx RKNN 2.2.0 流式 zipformer是一条能落地、能实时的板端语音识别路线。行动清单装好 RKNN 2.2.0 工具链export 工具库目录后用SHERPA_ONNX_ENABLE_RKNNON编译 sherpa-onnx。从项目发布的 asr-models 页下载流式双语 zipformer将 encoder/decoder/joiner 转成 .rknn。先用测试 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),仅供参考
返回列表