RK3576 Debian+ YOLOv5端侧部署实战:从SDK到实时检测 电子说
本文完整记录在 Purple Pi OH2 / IDO EVB7609(RK3576)开发板部署 YOLOv5 目标检测全流程,覆盖 SDK 环境解析、交叉编译 Demo、MIPI 摄像头实时推理、HDMI 画面输出、踩坑排错全环节,适合 RK3576 端侧 AI 落地开发者参考。

一、硬件与软件准备
1.1 硬件清单
|
组件 |
说明 |
|
开发板 |
Purple Pi OH2 / IDO EVB7609 (RK3576) |
|
摄像头 |
MIPI CSI 接口 IMX415 |
|
显示器 |
HDMI 接口 |
|
调试线 |
USB-A to USB-C (ADB 调试) |
|
电源 |
12V/2A DC |
1.2 SDK 环境目录结构

1.3 代码修改

二、YOLOv5 Demo 交叉编译全流程
2.1 工具链路径说明
SDK 内部已预装对应交叉编译工具,无需额外下载:
1.AArch64 交叉编译器路径
prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu//bin/aarch64-none-linux-gnu-gcc
2.CMake 工具(buildroot 内置)
buildroot/output/rockchip_rk3576_recovery/host/bin/cmake
2.2 一键编译命令
cd external/rknpu2/examples/rknn_yolov5_demoexport GCC_COMPILER=/path/to/aarch64-none-linux-gnuexport PATH=/path/to/cmake:$PATH./build-linux.sh -t rk3576 -a aarch64 -b Release
编译流程逻辑:

2.3 编译产物目录说明
编译完成后所有文件输出至install/rknn_yolov5_demo_Linux/,目录结构如下:
rknn_yolov5_demo_Linux/├── rknn_yolov5_demo # 图片推理 (6.8MB)├── rknn_yolov5_camera_demo # 摄像头实时检测 (7MB)├── rknn_yolov5_video_demo # 视频文件推理├── lib/│ ├── librknnrt.so # RKNN 运行时│ ├── librga.so # RGA 图像加速│ └── librockchip_mpp.so # MPP 视频编解码└── model/├── RK3576/yolov5s-640-640.rknn # 预转换模型├── bus.jpg # 测试图片└── coco_80_labels_list.txt # COCO 标签
三、板端部署与功能运行测试
3.1 ADB 推送全部文件至开发板
adb push install/rknn_yolov5_demo_Linux /userdata/
3.2 图片推理功能验证
效果展示:cd /userdata/rknn_yolov5_demo_Linuxexport LD_LIBRARY_PATH=./lib# 运行图片检测./rknn_yolov5_demo model/RK3576/yolov5s-640-640.rknn model/bus.jpg

执行时序流程:

程序预期输出日志:
sdk version: 2.3.0 driver version: 0.9.8model input: 640x640x3Read model/bus.jpg ...once run use 31.95 msperson @ (209 243 286 510) 0.879723bus @ (93 129 553 464) 0.700761loop count = 10, average run 24.93 ms ← 40 FPS!
3.3 MIPI 摄像头实时目标检测
3.3.1 摄像头硬件数据流管线

3.3.2 前置操作:启动 AIQ 3A 服务(必做)
# 启动 AIQ 3A 服务(必需的!否则摄像头画面全黑)/etc/init.d/rkaiq_3A.sh start
|
重点说明:rkaiq_3A_server 进程必须持续后台运行,负责 ISP 自动曝光、白平衡、对焦 3A 调优;进程被杀后摄像头无正常画面。 |
3.3.3 启动实时检测程序
cd /userdata/rknn_yolov5_demo_Linuxexport LD_LIBRARY_PATH=./lib# ISP管线NV12输出(推荐使用)./rknn_yolov5_camera_demo model/RK3576/yolov5s-640-640.rknn /dev/video33# 备选:直接读取raw Bayer原始通道./rknn_yolov5_camera_demo model/RK3576/yolov5s-640-640.rknn /dev/video0
摄像头实时推理完整时序:

3.3.4 HDMI 实时画面显示逻辑
程序内置 DRM 显示模块,自动将摄像头原图 + 检测框叠加输出至 HDMI 显示器,单帧完整处理链路:

四、整机性能实测数据
|
运行模式 |
稳定 FPS |
补充说明 |
|
单张图片推理 |
40 FPS (25ms / 帧) |
连续 10 次推理平均耗时 |
|
摄像头采集 + 控制台输出(无显示) |
30 FPS |
ISP 标准 NV12 管线 |
|
摄像头采集 + HDMI 画面输出 |
28-30 FPS |
包含图像转换、检测框渲染开销 |
|
Raw Bayer 直读模式 |
27-28 FPS |
软件解码 Bayer,无 HDMI 显示 |
五、核心底层组件原理详解
5.1 RKNN Runtime 推理核心 API
RKNN 推理标准执行流程代码片段:
// 推理核心流程rknn_init(&ctx, model_data, model_size, 0, NULL); // 加载模型rknn_inputs_set(ctx, n_input, inputs); // 设置模型输入数据rknn_run(ctx, NULL); // NPU执行推理rknn_outputs_get(ctx, n_output, outputs, NULL); // 获取推理输出post_process(outputs, ...); // NMS后处理解析目标框
5.2 RGA 硬件图像加速
RGA(光栅加速单元)硬件完成图像缩放、格式转换,大幅降低 CPU 占用:
|
图像转换操作 |
单次耗时 |
|
NV12 640x480 → RGB 640x640 |
~1ms |
|
NV12 640x480 → RGB 640x480 |
~0.5ms |
5.3 DRM/KMS HDMI 直显原理
直接操作内核显示驱动/dev/dri/card0,无需中间桌面系统:
drmModeSetCrtc() → 设置显示分辨率、刷新率drmModeAddFB() → 创建帧缓冲对象mmap() → 显存映射至用户空间memcpy() → 写入带检测框的像素数据
六、SDK 源码新增 & 修改清单
6.1 新增源码文件
|
文件路径 |
功能说明 |
代码行数 |
|
src/main_camera.cc |
MIPI 摄像头实时 YOLOv5 检测主逻辑 |
~750 行 |
|
src/drm_display.cpp |
DRM/KMS HDMI 显示驱动模块 |
~260 行 |
|
include/drm_display.h |
显示模块对外头文件接口 |
~30 行 |
6.2 修改文件
|
文件 |
改动内容 |
|
CMakeLists.txt |
新增 rknn_yolov5_camera_demo 编译目标;链接 libdrm 库;添加 DRM 头文件搜索路径 |
6.3 实时检测程序功能模块架构

6.4 新增完整功能列表
1.V4L2 MPLANE 多平面摄像头捕获:同时兼容 ISP 输出 NV12、rkcif raw BG10 两种图像格式,自动协商像素格式
2.IMX415 传感器时序优化:动态调整 vblank 参数,减少 MIPI CSI 传输报错
3.RGA 硬件图像流水线:零拷贝完成 NV12 转 RGB + 尺寸缩放,纯硬件加速
4.OpenCV 检测结果渲染:红色目标框 + 绿色类别置信度文字叠加
5.DRM KMS 直出 HDMI:不依赖桌面,直接输出带检测框实时画面
6.软件 Bayer 解码:内置 BG10 原始图像转 RGB888 逻辑,支持直读 RAW 数据流
7.摄像头断流自动重连:画面中断后自动释放设备、重新打开采集
8.检测帧本地存储:每 30 帧自动保存一张带标注图片至/tmp/detect_*.jpg
6.5 底层开发关键注意事项
1.V4L2:ISP 视频设备必须使用V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE多平面接口
2.RGA v1.10.1 版本:IM_STATUS_NOERROR = 2,IM_STATUS_SUCCESS = 1;判断错误统一使用ret < 0,不能用ret != IM_STATUS_NOERROR
3.DRM:drmModeSetCrtc仅初始化调用一次,频繁调用会触发 HDMI 重协商、中断 MIPI 摄像头数据流
4.OpenCV:使用 cv::Mat 直接封装原始显示缓存,不额外分配内存,降低内存拷贝开销
七、一键启动运行脚本
新建 shell 脚本,保存后可一键启动完整检测业务:
# RK3576 YOLOv5 实时检测一键启动echo "=== 1. 配置 ISP 管线 ==="/etc/init.d/rkaiq_3A.sh start 2>/dev/null# rkaiq_3A_server 必须保持运行,否则画面全黑echo "=== 2. 启动 YOLOv5 检测 ==="cd /userdata/rknn_yolov5_demo_Linuxexport LD_LIBRARY_PATH=./lib./rknn_yolov5_camera_demomodel/RK3576/yolov5s-640-640.rknn/dev/video33
效果展示:
八、开发高频问题排错对照表
|
报错现象 |
根因 |
解决方案 |
|
VIDIOC_REQBUFS failed |
ISP 设备仅支持 MPLANE 多平面 API |
使用本文编译出的新版二进制程序 |
|
VIDIOC_STREAMON failed |
ISP 图像管线未初始化 |
提前启动 rkaiq_3A 3A 服务 |
|
RGA 接口返回异常但画面正常 |
RGA 状态码定义特殊 |
统一用 ret < 0 判断异常 |
|
HDMI 显示几秒后黑屏消失 |
DRM CRTC 显示资源被其他进程抢占 |
确认无其他程序占用显示设备 |
|
检测框文字显示乱码 |
简易像素文字渲染存在缺陷 |
切换 OpenCV cv::putText 绘制文字 |
九、方案整体技术总结

本文完整覆盖 RK3576 平台 YOLOv5 端侧 AI 落地全链路,从 SDK 环境解析、交叉编译、板端部署、摄像头实时推理到 HDMI 画面输出完整打通。整套方案深度复用瑞芯微 NPU、RGA 图像加速、DRM 直显硬件单元,最终稳定实现 30FPS 实时目标检测,可直接用于工业视觉、智能识别类端侧产品开发。
全部0条评论
快来发表一下你的评论吧 !