RK3576 Debian+ YOLOv5端侧部署实战:从SDK到实时检测

电子说

1.4w人已加入

描述

本文完整记录在 Purple Pi OH2 / IDO EVB7609RK3576)开发板部署 YOLOv5 目标检测全流程,覆盖 SDK 环境解析、交叉编译 DemoMIPI 摄像头实时推理、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 5100.879723bus @ (93 129 553 4640.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, 0NULL);  // 加载模型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 输出 NV12rkcif 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.V4L2ISP 视频设备必须使用V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE多平面接口

2.RGA v1.10.1 版本:IM_STATUS_NOERROR = 2IM_STATUS_SUCCESS = 1;判断错误统一使用ret < 0,不能用ret != IM_STATUS_NOERROR

3.DRMdrmModeSetCrtc仅初始化调用一次,频繁调用会触发 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 绘制文字

九、方案整体技术总结

目标检测

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

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分