YOLOv5 目标检测
本例程基于 GStreamer + RKNN 插件链,在板端跑通 YOLOv5s 完整链路:图片解码 → 预处理 → NPU 推理 → 后处理(NMS)→ OSD 画框 → MPP 硬编 → mp4 输出。
整体框图
test.jpg (multifilesrc 循环)
│
▼
jpegdec → videoconvert → videoscale → BGR 640×640
│
▼
rknninfer (YOLOv5s RKNN,RK1828 NPU 推理)
│
▼
rknnpostprocess (libyolov5spostprocess.so,NMS + 解码)
│
▼
rknnosd (BGR 上画框 + 类别标签)
│
▼
videoconvert → NV12 640×640 → mpph264enc → h264parse → mp4mux → /tmp/yolov5_50frames.mp4两条处理域:
- RK3588:jpegdec / videoconvert / videoscale / mpph264enc / mp4mux(全部硬编硬解,VPU/RGA/MPP)
- RK1828(PCIe 协处理器):
rknninfer走/dev/dri/renderD128(PCIe 地址0004:41:00.0)做推理
1. 装好依赖
sudo apt-get install -y \
gstreamer1.0-rockchip1 \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
ffmpeg2. 确认插件可用
gst-inspect-1.0 rknninfer | head -3
gst-inspect-1.0 rknnpostprocess | head -3
gst-inspect-1.0 rknnosd | head -3
gst-inspect-1.0 mpph264enc | head -3
ls /usr/lib/libyolov5spostprocess.so实测输出:
Factory Details:
Long-name RKNN infer
Version 1.0.0
Factory Details:
Long-name RKNN postprocess
Version 1.0.0
Factory Details:
Long-name RKNN osd
Version 1.0.0
Factory Details:
Long-name Rockchip Mpp H264 Encoder
Version 1.14.4
/usr/lib/libyolov5spostprocess.so4 个 GStreamer 插件 + 后处理库均可用。
2.1 插件输入输出格式
rknninfer 输入:
gst-inspect-1.0 rknninfer 2>&1 | grep -A 5 "SINK template"输出:
SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw
format: { (string)GRAY8, (string)RGB, (string)RGBA, (string)BGR, (string)BGRA }
rknninfer输入支持 GRAY8 / RGB / RGBA / BGR / BGRA(不支持 NV12,需要先videoconvert)。
rknnpostprocess 属性:
gst-inspect-1.0 rknnpostprocess 2>&1 | grep -E "config-path|library-path"输出:
config-path : Location of the config file
library-path : Location of the library of customer post-proccessor
rknnpostprocess同时支持config-path和library-path两个属性。
3. 模型文件(SDK 自带)
/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/
yolov5s.rknn 230K YOLOv5s RKNN 结构
yolov5s.weight 8.6M YOLOv5s 权重
detect_classes.txt 80 类 COCO 标签
config.json SDK 默认配置(路径要修)4. config.json 路径修复
SDK 自带 config.json 路径指向 /userdata/models/yolov5s/(该目录在板端不存在),install.sh 会自动 cp + sed 修复:
# install.sh 自动做的事
cp /userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/config.json \
/home/linaro/yolov5/yolov5s_config.json
sed -i 's|/userdata/models/yolov5s|/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s|' \
/home/linaro/yolov5/yolov5s_config.json修复后内容:
{
"model_path": "/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/yolov5s.rknn",
"weight_path": "/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/yolov5s.weight",
"label_path": "/userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/detect_classes.txt",
"conf_threshold": 0.45,
"nms_threshold": 0.25
}5. 一键部署
cd /home/linaro/yolov5
bash install.sh # 交互式(预检查 → y/n → 装包/路径修复/验证)
bash install.sh --yes # 跳过确认install.sh 4 步:
- 扫描 4 个系统包(缺哪个
sudo apt-get install -y装哪个) - 检查 rknn 插件 + 后处理库
- 检查 SDK 模型文件
- cp + sed 修复
config.json,重跑插件检查确认
6. 日常使用
6.1 make info — 看环境
make info6.2 make pipeline — 跑 50 帧 pipeline
make pipeline # NUM_BUFFERS=50,即 5 秒 10fps测试图片:

输出结果:


50 帧 / 640×640 / h264 / 3.5 秒完成,输出 325K mp4。
6.3 make probe — ffprobe 看输出
make probe6.4 make clean — 清 mp4
make clean # rm -f /tmp/yolov5_*.mp47. 完整管道命令
gst-launch-1.0 -v \
multifilesrc location=/userdata/RK1820_RK1828_AI_SDK/package/rknn3-test/sh/test.jpg \
loop=true caps="image/jpeg,framerate=10/1" num-buffers=50 ! \
jpegdec ! videoconvert ! videoscale ! \
video/x-raw,format=BGR,width=640,height=640 ! \
rknninfer config-path=/home/linaro/yolov5/yolov5s_config.json ! \
rknnpostprocess config-path=/home/linaro/yolov5/yolov5s_config.json \
library-path=/usr/lib/libyolov5spostprocess.so ! \
rknnosd ! videoconvert ! video/x-raw,format=NV12,width=640,height=640 ! \
mpph264enc ! h264parse ! mp4mux ! filesink location=/tmp/yolov5_50frames.mp48. 性能
| 指标 | 实测 |
|---|---|
| 输入 | 1 张 jpg(test.jpg)循环 50 次 |
| 分辨率 | 640×640 |
| 帧率 | 10 fps |
| 端到端(含 mp4 mux) | 3.5 秒 |
| 输出大小 | 325 KB |
| 编码 | h264 High profile(MPP 硬编) |
| 后处理 | libyolov5spostprocess.so(NMS + 解码) |
9. 关键事实速查
| 项目 | 取值 |
|---|---|
| 模型路径 | /userdata/RK1820_RK1828_AI_SDK/examples/gstreamer/yolov5s/ |
| config.json(修复后) | /home/linaro/yolov5/yolov5s_config.json |
| 后处理库 | /usr/lib/libyolov5spostprocess.so |
| RKNN 插件版本 | 1.0.0(rknninfer / rknnpostprocess / rknnosd) |
| MPP 编码器版本 | 1.14.4(mpph264enc) |
| 输出 | /tmp/yolov5_50frames.mp4 |
| install.sh 自动装包 | 4 个 gstreamer 包(唯一会装包的例程) |
| 输入格式 | BGR(由 videoconvert 从 NV12 转) |
| OSD 输出格式 | BGR / BGRx / BGRA / RGB16(rknnosd 限制) |
| 模型类别 | 80 类 COCO |
| conf / nms 阈值 | 0.45 / 0.25(可改 config.json) |
10. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
rknninfer 报 model file not found | config.json 路径不对 | make pipeline 前跑 bash install.sh 让 install.sh 修复 config.json |
mp4 "moov atom not found" | filesink 没收到 EOS | 加 num-buffers=50(或任意数字)给 multifilesrc |
rknnosd 报 caps not negotiated | 输入格式不是 BGR/BGRx/BGRA/RGB16 | 在 rknnosd 前 videoconvert ! video/x-raw,format=BGR |
rknnpostprocess 找不到库 | library-path 错或库不在 /usr/lib/ | ls /usr/lib/*postprocess*.so,路径写绝对路径 |
mpph264enc 报 baseline profile doesn't support 4:4:4 | testsrc 默认 RGB | 推 RTSP 时加 -pix_fmt yuv420p 或 videoconvert 转 NV12 |
| 想拿 JSON 坐标/类别文本 | rknnpostprocess 默认不打 | 加 appsink,Python 解析 GstBuffer meta;或 rknn3lite 自己写 NMS |
| 想接 RTSP 推流 | 完整管道可用 | 参考 RTSP 推流 + AI 分析,把 mp4 换 h264parse ! rtph264pay ! udpsink |
相关文档
- RTSP 推流 + AI 分析 — 同 rknn 插件的视频流实时检测 + RTSP 推流
- PaddleOCR-VL OCR — 文字识别(完全不同的链路)
