GStreamer RKNN 插件自制

项目地址: https://github.com/PT233/gst-rknn-filter

在 Rockchip NPU(RK3588、RK3576、RK3568 等)上运行视觉模型(YOLO、RetinaFace、PPOCR 等)的 GStreamer 插件。支持实时视频推理,可与 videotestsrc、v4l2src、uridecodebin 等源组合使用。

只支持model文件夹下罗列出来的模型,模型全部出自于https://github.com/airockchip/rknn_model_zoo 下转出的rknn模型。

免责申明该插件属于自己自娱自乐,大部分内容参考于https://github.com/haydenee/gstreamer-rknn


快速安装

1. 环境要求

项目 说明
平台 RK3588 / RK3576 / RK3568 等(arm64)
系统 板端 Linux(非交叉编译时)
工具 meson、ninja、pkg-config
runtime GStreamer 1.18+、librga、librknnrt

2. 安装依赖

bash 复制代码
# Debian/Ubuntu 系
sudo apt update
sudo apt install -y meson ninja-build pkg-config \
  gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

RKNN / RGA 库:优先使用系统安装版本;若无,则使用项目自带预编译库。

bash 复制代码
# 若系统有 librknnrt、librga(如官方镜像已集成),无需额外操作
# 否则,按 thirdparty/README.md 放入预编译库:
#   - librga: thirdparty/librga/libs/
#   - librknnrt: thirdparty/librknn_api/libs/

3. 编译与测试

bash 复制代码
cd rknnfilter
./build.sh

编译成功后,插件在 build/src/libgstrknn.so。运行测试前设置插件路径:

bash 复制代码
export GST_PLUGIN_PATH="$(pwd)/build/src:$GST_PLUGIN_PATH"

详细安装步骤

一、系统依赖

依赖 用途
meson 构建系统
ninja 编译器
gstreamer-1.0 GStreamer 核心
librga Rockchip RGA 加速
librknnrt RKNN runtime

若板端为 Rockchip 官方系统,librgalibrknnrt 通常已预装;否则需从以下地址获取预编译库:

将对应架构的 librga.solibrknnrt.so 放入 thirdparty/librga/libs/thirdparty/librknn_api/libs/

二、编译

bash 复制代码
./build.sh
# 或手动:meson setup build && ninja -C build

构建产物:build/src/libgstrknn.so

三、配置插件路径

GStreamer 需能找到插件,任选其一:

方式 A:每次运行前设置环境变量(推荐)

bash 复制代码
export GST_PLUGIN_PATH="$(pwd)/build/src:$GST_PLUGIN_PATH"

方式 B:安装到系统

bash 复制代码
sudo ninja -C build install
# 若安装到 /usr/local,需将 /usr/local/lib/gstreamer-1.0 加入 GST_PLUGIN_PATH

四、模型准备

  1. 将 RKNN 模型放入 model/ 目录,例如 yolov5.rknn
  2. 检测类模型需提供 model-type 和标签文件(如 coco_80_labels_list.txt)。

可从 RKNN Model Zoo 或官方网盘下载并转换模型;本仓库 model/ 目录已包含 coco_80_labels_list.txt

五、运行测试

bash 复制代码
# 批量测试 model/ 下所有模型(快速模式:每模型 30 帧)
./run_batch_test.sh

# 深度测试(每模型 300 帧 × 2 轮)
./run_batch_test.sh deep

手动运行示例(绝对路径)

bash 复制代码
gst-launch-1.0 videotestsrc num-buffers=300 ! \
  video/x-raw,format=NV12,width=640,height=480 ! \
  rknnfilter model-path=/path/to/model/yolov5.rknn model-type=yolov5 \
    label-path=/path/to/model/coco_80_labels_list.txt show-fps=true ! \
  videoconvert ! autovideosink

支持的模型类型(model-type)

拉到最后查看属性

bash 复制代码
gst-inspect-1.0 rknnfilter
model-type 说明
yolov5, yolov6, yolov7, yolov8 目标检测
yolov8_obb 旋转框检测
yolov10, yolo11, ppyoloe 目标检测
yolov8_pose 人体关键点
yolov5_seg, yolov8_seg, ppseg 图像分割
deeplabv3 语义分割
retinaface 人脸检测
lprnet 车牌识别
ppocr_det, ppocr_rec 文字检测/识别

常见问题

1. 找不到插件 rknnfilter

bash 复制代码
export GST_PLUGIN_PATH="$(pwd)/gstreamer-rknn/build/src:$GST_PLUGIN_PATH"
# 或在 gstreamer-rknn 目录下执行

2. 提示找不到 librknnrt 或 librga

  • 确认系统或 thirdparty/*/libs/ 中有对应架构的 .so 文件。
  • 运行时将包含这些库的目录加入 LD_LIBRARY_PATH

3. meson 报错找不到 gstreamer

bash 复制代码
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

4. run_test.sh 报错找不到模型

yolov5.rknnyolov5s-640-640.rknn 放到 gstreamer-rknn/model/ 目录。

5. OpenCV 可选

meson 会检测 opencv4;未安装时仍可编译,部分后处理功能可能受限。


相关链接


相关推荐
tntxia6 小时前
linux curl命令详解_curl详解
linux
扛枪的书生9 小时前
Linux 网络管理器用法速查
linux
顺风尿一寸11 小时前
Java Socket 内核之旅:从 SocketChannel.read() 到 tcp_recvmsg 与 epoll 的完整调用链路
linux
RTC实战笔记16 小时前
实时互动数字人怎么做,才不是一个只会说话的视频?
音视频·数字人·rtc·数字人接入
XIAOHEZIcode18 小时前
Ubuntu 终端美化全栈指南:Bash 到 Kitty 踩坑实录
linux·ubuntu·命令行
唐青枫20 小时前
别再只会用 cron:Linux systemd Timer 定时任务实战详解
linux
AlfredZhao3 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐4 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux
用户805533698035 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式