RK3588 + RKNN + YOLO 可拓展多路视频算法开发引擎,支持目标识别,姿态识别,分割模型,并配备Web管理页面

📅 2026/8/18 10:15:20
RK3588 + RKNN + YOLO 可拓展多路视频算法开发引擎,支持目标识别,姿态识别,分割模型,并配备Web管理页面
前言最近在 RK3588 上做了不少视觉分析的相关开发工作发现不同项目之间存在大量开发繁琐流程重复的工作RTSP 拉流、RKNN 推理、ROI区域配置、目标跟踪、录像、告警上报、线程管理等。同时还存在以下问题。多路视频流在性能受限的边缘端难以同时进行高性能的采集和分析。算法复用性和可拓展性差过去的算法中视频流和逻辑是绑定的若要改变某个视频通道的逻辑需要将前一个逻辑删除若算法耦合性高则改动较大。但利用本项目的低耦合设计可将任意算法逻辑绑定至任意视频源类型RTSPUSB视频文件的任意视频通道。视觉算法逻辑的编写没有一个统一的规则来约束开发者进而导致代码可读性差维护难度高。本项目将编写视觉算法常用的变量如模型推理结果视频帧时间戳等变量都封装至一个上下文结构体ChannelContext中供开发者调用。视觉算法逻辑编写的时候常与底层逻辑如视频解码线程调度等进行交互导致开发难度高。开发者利用本项目中引擎的低耦合设计来实现视频流分析的时候则只需关注算法逻辑的实现无需关注底层的设计。项目维护难以前修改某个算法参数需要改配置文件的内容然后重新编译程序。流程繁琐本项目配有web管理界面程序的参数可在界面上直接修改。算法启动流程复杂本项目配备的可视化界面便于开发者或运维人员将算法应用至选定的视频流并且能够设定服务器上报之类的与后端通信的相关配置。调试困难以前调试视觉算法的时候只能板端接显示屏远程调试的时候则无法看见画面。本项目配备的web管理界面可观看程序的实时画面输出并在界面侧边栏显示程序的终端输出。因此我开发了一套可以在不同项目中复用的视觉分析引擎将这些通用能力统一封装到引擎底层。面对新的业务场景时二次开发者不再需要重复处理多路视频采集、模型推理、线程调度等底层问题而是可以把更多精力放在具体业务逻辑的实现上。同时本项目还使用React Vite开发了一套 Web 配置与管理界面用于视觉分析程序的配置、调试、部署以及后期的运维工作。项目已开源https://github.com/LaoWei2001/rk3588_visual_analysis_framework欢迎朋友们进入 项目的github仓库 点个⭐支持作者1. 项目效果与主要功能1.1 实际运行效果以6路视频为例如下图所示RK3588同时对6路不同视频源类型的视频应用了不同的模型进行推理并将推理结果可视化呈现。右侧有板端的命令行输出供输出调试信息便于开发者查看程序运行状态。这6路视频的视频源类型和使用模型分别为1. RTSP网络摄像头第46路视频。使用yolov8-det模型。2. USB摄像头: 第1路视频。使用yolov8-det模型。3.板端存储的mp4视频文件: 第235路视频。使用yolov8-pose和yolov5-seg模型。1.2 程序配置界面对于1.1中的程序的配置如下所示本项目中采用可视化的画布编排的方式来对多路视频的程序的相关参数如视频源模型类型置信度阈值以及某程序自身的可配置参数等来进行配置。但要注意的是本画布并不是类似于Dify等低代码平台采用的有向无环图来直接进行算法编排该界面的本质是以可视化的形式生成程序启动所必须的配置文件免去了人工书写json配置文件的繁琐过程也便于使用者在调试的时候快速修改参数。下图是使用到了画布所有配置能力的一个程序的画布配置在下图中开发者配置了每个视频流的检测区域橙色视频源蓝色该路视频使用到的两个模型绿色对应的算法编排逻辑紫色以及上报服务器的配置红色。如果要人工写能够让主程序成功识别的配置文件的话过程极为繁琐采用画布的形式则大大提升了使用者的体验。1.3 目前实现的主要能力视频推理能力RTSP、视频文件和 USB 摄像头输入最多 15 路视频流推理均使用yolov8-detYOLOv5 检测、YOLOv8 检测、YOLOv8-Pose、YOLOv5-Seg单通道多模型组合推理结果按同一帧合并RKNN NPU 多核心分配、RGA 图像转换和 DMA-BUF 零拷贝优先路径充分压榨npu算力可以实现多路推理时npu的3个核心占用率均在95%以上每通道独立 FPS、队列深度、阈值、类别过滤和跟踪参数SORT目标跟踪及稳定track_id推理通道和无模型传统 CV 算法通道可同时运行。业务逻辑灵活拓展能力每种业务逻辑位于独立的src/logic/modules/logic_xxx/目录通过REGISTER_LOGIC(logic_xxx)自动注册无需修改中央分发表ChannelContext提供帧、推理结果、ROI、时间、状态、参数、绘制和跨通道快照logic.json统一声明模块参数、Web 动作、上报字段及热重载策略每通道拥有独立的ctx-state同一逻辑可安全复用于多个通道支持业务按钮动作、系统级动作和跨通道全局逻辑。任意逻辑与任意视频通道可自由组合。新增逻辑时无需变动旧的逻辑的相关代码且上层通道逻辑与底层线程调度视频解码等模块解耦。显示、录像与事件投递HDMI/GTK 窗格显示需板端连接显示器内置 RTSP 服务可流式输出与本地显示一致的拼接画面ROI、检测框、姿态、分割和自定义绘制统一渲染带标注图片、原始图片与原始分辨率事件视频事件前后视频环形缓冲和异步 MP4 编码本地持久化事件发件箱断网时保留并自动重试http_json与dify_workflowadapter支持可复用接口契约、图片、视频和纯数据事件Web 请求预览、本地事件测试发送与可扩展 adapter catalog每个 delivery 独立维护上传状态全部成功后自动删除本地事件。Web 管理平台可视化编排视频源、模型、ROI、业务逻辑、参数和上报策略应用包上传、安装、启动、停止和状态查看支持选择不同配置文件启动实时画面、运行日志和待上报记录查看Web 按钮向指定通道业务逻辑发送动作需自行编写按钮的功能浏览器终端、后台服务管理、上传连接和 OTA 配置配置保存后由 C 运行时自动检测并热更新。2. Demo使用步骤作者在项目文件夹中的 vision_analysis/src/logic/modules 中内置了若干实例代码供开发者快速学习基于本项目开发视觉算法的方法。为保证成功运行需要按照以下步骤配置好板端的运行环境。2.1 环境要求开发者主要在载板为 RK3588 的 EAI-BOX-3000 边缘计算盒子上进行项目的开发与验证此外本项目还在正点原子的 ATK-DLRK3588B 开发板以及英飞凌 ELF 2 开发板上成功运行。RK3588 / AArch64 LinuxDebian或Ubuntu未在其他系统验证可用的 Rockchip RKNN Runtime 和 RGAGStreamer 1.x带freetype模块中文显示的 OpenCV构建 Web 前端时需要 Node.js 18。2.2 安装依赖项目目录已内置一键安装依赖的脚本install_deps.shbash install_deps.sh需要注意的是: 对于不同厂商提供的开发板来说可能在运行上述脚本的情况下仍需要额外安装其他的组件比如Rockchip RKNN/RGA 的头文件和运行库通常已由厂家的系统环境提供但若没有预先安装相关的组件需要参考瑞芯微官方的相关文档进行安装。具体的安装方式这里不再说明。环境是否完整以是否能成功编译程序为准在3.2说明。2.3 安装 Web 管理平台进入web_console文件夹 运行下方命令以构建前端和部署后台服务./install.sh如出现类似下图的信息则说明安装成功。若安装失败需要根据错误信息安装相关的依赖。3. 如何开发自定义的视频流处理逻辑具体利用引擎底层能力进行算法编排的方法请参考内置的示例代码。这里只说明程序的基本组成和编译方法。3.1 程序基本组成部分每个通道逻辑由一个 C 入口和一个json格式的模块清单组成vision_analysis/src/logic/modules/logic_xxx/ ├── logic.cpp └── logic.json最小 logic.cpp:#include logic/core/logic_common.h static void logic_default(ChannelContext *ctx) { /* 什么也不做实际运行效果是画面上只有模型推理之后的可视化结果 没有对检测结果做后续的算法编排 */ } REGISTER_LOGIC(logic_default);最小 logic.json:{ label: default, parameters: { type: object, additionalProperties: false, properties: {} }, report_fields: [] }3.2 编译程序运行 vision_analysis 中的 build.sh以生成程序包可能需要赋予脚本读写权限下面命令中的xxx是自行命名的程序包名字。./build.sh xxx构建过程会1. 递归收集 src/logic/modules/ 中的 C 源文件2. 从 REGISTER_LOGIC() 获取唯一 logic ID3. 校验 logic.json、参数访问器和热重载策略4. 在发布包中生成供 Web 使用的 logics.json。若出现类似下图的信息且build.sh的同级目录出现了xxx文件夹则表明编译成功。若编译不成功则需要根据错误信息排查。4. 通过web界面启动程序4.1 上传程序包完成3.2的编译,生成了xxx文件夹程序包后在与build.sh的同级目录运行命令:./install_app.sh xxx该命令会将程序包复制到系统目录 /opt/ai_apps中。web平台的后端服务会实时识别这个文件夹中的程序包以显示在界面上。4.2 登录web平台在2.3中安装脚本会默认将平台安装在设备ip的8080端口上打开局域网中任意设备的浏览器在地址栏输入RK3588的ip:8080登录web界面, 登录界面所用的用户名和密码跟RK3588的用户名和密码一致。登录成功后如下图所示界面上会列出读取的所有程序包选择刚刚的xxx程序包点击“配置”按钮进入画布界面配置视频流模型路径等基本信息配置完之后在底部开启RTSP推流点击页面右上角的保存按钮随后回到主界面点击启动若成功启动则会在左侧边栏的“实时画面”界面中显示画面。若启动无效可点击“日志”按钮查看报错。5. 总结本文介绍了一套基于 RK3588 开发的可复用视觉分析引擎 / 框架并从实际运行效果、程序配置、Demo 使用流程以及自定义视频流业务逻辑开发几个方面进行了简要说明。这个项目的主要目标并不是单纯实现某一种目标检测算法而是将视频拉流、RKNN 模型推理、ROI、目标跟踪、录像、事件投递、线程管理以及 Web 配置管理等通用能力统一封装起来使开发者在面对新的视觉分析场景时可以把主要精力放在业务逻辑本身而不是重复搭建底层的视频推理程序。目前框架已经能够完成从视频输入、模型推理、业务逻辑处理到结果展示、录像和事件投递的一整套流程同时支持通过 Web 管理平台进行程序配置、启动和运行管理。对于新的业务需求也可以通过增加独立的视频流处理逻辑进行扩展。由于项目中内容较杂我的水平和表达能力也有限我这里只简要说明了一下基本功能并没有说明其他的部分比如具体的引擎底层实现过程多路算法如何实现隔离如何同后端通信等方面。有兴趣的朋友可以下载源码实机运行自行进一步探索其他的功能开发自己的视觉算法。如果遇到任何困难有任何的意见或者建议欢迎随时联系作者。Email:1927096839qq.com。这个项目凝聚了我对边缘侧多路视觉算法解决方案的全部理解我见证了这个项目从开发之初的蹒跚学步连推理单路视频都困难的阶段走到现在能够在web界面看见多路算法实时运行的过程。这一路上克服了很多困难。我真心希望大家给我一些建议让这个项目走的更远。