
清空记录
历史记录
取消
清空记录
历史记录

本篇将基于触觉智能RK3576开发板+Linux6.1内核+Debian系统为基础,从交叉编译环境搭建、MIPI摄像头实时推理管线、HDMI画面直出、RGA硬件加速以及高频踩坑排错等维度,全方位拆解YOLOv5目标检测在端侧从模型部署到产品落地的全流程。如果你正在从事具身智能、清洁机器人、交通安防设备、无人机感知或工业机器视觉检测等领域的嵌入式开发,这篇文章将是你的值得收藏的实战指南。实测效果如下:
关注「触觉智能」公众号,回复关键词“客服”,联系客服即可获取瑞芯微RK开发板/核心板相关资料,可对接技术支持团队,咨询项目选型与项目需求。
关注触觉智能,可获赠RK3576开发板折扣。机会有限,先到先得!
一、硬件与软件准备
组件 | 说明 |
开发板 | 触觉智能RK3576开发板 Purple Pi OH2 |
摄像头 | MIPI CSI 接口 IMX415 |
显示器 | HDMI 接口 |
调试线 | USB-A to USB-C (ADB调试) |
电源 | 12V/2A DC |
二、YOLOv5 Demo 交叉编译全流程
SDK内部已预装对应交叉编译工具,无需额外下载:
AArch64交叉编译器路径
prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu//bin/aarch64-none-linux-gnu-gcc
CMake工具(buildroot内置)
buildroot/output/rockchip_rk3576_recovery/host/bin/cmake
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
编译流程逻辑:
编译完成后所有文件输出至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 标签
三、板端部署与功能运行测试
adb push install/rknn_yolov5_demo_Linux /userdata/
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!
摄像头硬件数据流管线:
必做的前置操作:启动AIQ3A服务
# 启动 AIQ 3A 服务(必需的!否则摄像头画面全黑)/etc/init.d/rkaiq_3A.sh start
重点说明:rkaiq_3A_server进程必须持续后台运行,负责ISP自动曝光、 白平衡、对焦3A调优;进程被杀后摄像头无正常画面。 |
启动实时检测程序:
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
摄像头实时推理完整时序:
HDMI实时画面显示逻辑:程序内置DRM显示模块,自动将摄像头原图+检测框叠加输出至HDMI显示器,单帧完整处理链路:
四、整机性能实测数据
运行模式 | 稳定FPS | 补充说明 |
单张图片推理 | 40FPS(25ms/帧) | 连续10次推理平均耗时 |
摄像头采集+控制台输出 (无显示) | 30FPS | ISP标准NV12管线 |
摄像头采集+HDMI画面输出 | 28-30FPS | 包含图像转换、检测框渲染开销 |
Raw Bayer直读模式 | 27-28FPS | 软件解码Bayer 无HDMI显示 |
五、核心底层组件原理详解
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后处理解析目标框
RGA(光栅加速单元)硬件完成图像缩放、格式转换,大幅降低CPU占用:
图像转换操作 | 单次耗时 |
NV12 640x480 → RGB 640x640 | ~1ms |
NV12 640x480 → RGB 640x480 | ~0.5ms |
直接操作内核显示驱动/dev/dri/card0,无需中间桌面系统:
drmModeSetCrtc() → 设置显示分辨率、刷新率drmModeAddFB() → 创建帧缓冲对象mmap() → 显存映射至用户空间memcpy() → 写入带检测框的像素数据
六、SDK源码新增&修改清单
文件路径 | 功能说明 | 代码行数 |
src/main_camera.cc | MIPI摄像头实时YOLOv5检测主逻辑 | ~750行 |
src/drm_display.cpp | DRM/KMSHDMI显示驱动模块 | ~260行 |
include/drm_display.h | 显示模块对外头文件接口 | ~30行 |
文件 | 改动内容 |
CMakeLists.txt | 新增rknn_yolov5_camera_demo编译目标;链接libdrm库;添加DRM头文件搜索路径 |
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
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脚本,保存后可一键启动完整检测业务:
#!/bin/bash# 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_demo \ model/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绘制文字 |
九、方案整体技术总结
YOLO端侧AI部署方案是目前主流的目标检测解决方案,从SDK环境解析、交叉编译、板端部署、摄像头实时推理到HDMI画面输出实现了全链路打通,搭配RK3576的NPU、RGA图像加速、DRM直显硬件单元,构成一套完整稳定、低功耗的端侧AI推理系统,满足工业视觉、智能识别等端侧产品的实际部署需求。
产品简介
