完成多路视频并行接入、解码、多级推理、结构化数据分析、上报、编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gstreamer框架(少部分地方需要),框架主干部分主要使用原生C++ STL实现,目标是平台高可移植性。框架可用于:视频结构化、以图搜图、目标行为分析等应用领域。

源码地址:GitHub - sherlockchou86/video_pipe_c: a plugin-oriented framework for video structured.a plugin-oriented framework for video structured. Contribute to sherlockchou86/video_pipe_c development by creating an account on GitHub.https://github.com/sherlockchou86/video_pipe_c

主要功能

  • 视频接入,支持file/rtsp/udp/rtmp等主流视频流协议;
  • 多级推理,自带检测/分类/特征提取等推理插件。默认使用opencv.dnn实现,可基于其他类似tensorrt、甚至原生的pytorch/tensorflow扩展新的推理插件;
  • 目标跟踪,自带基于iou的跟踪插件,可基于其他算法扩展新的跟踪插件;
  • 行为分析,自带若干行为分析插件,比如目标跨线、拥堵/目标聚集判断;
  • 图像叠加,结构化数据和视频融合显示;
  • 消息推送,自带基于kafka的消息推送插件,可基于其他消息中间件扩展新的插件;
  • 录像/截图,自带截图/录像插件;
  • 编码输出,支持file/screen/rtmp/rtsp等主流方式输出编码结果;

主要特点

  • 可视化调试,自带pipe可视化功能,可在界面实时显示pipe的运行状态,如pipe中各个环节的fps/缓存队列大小,以及计算pipe起/止插件之间的时间延时,帮助程序员快速定位性能瓶颈位置;
  • 插件与插件之间默认采用“smart pointer”传递数据,数据从头到尾,只需创建一次,不存在拷贝操作。当然,可根据需要设置“深拷贝”方式在插件之间传递数据;
  • pipe中各通道视频的fps、分辨率、编码方式、来源均可不同,并且可单独暂停某一通道;
  • pipe中可传递的数据只有两种,一种frame_meta数据、一种control_meta数据,结构清晰明了;
  • 插件组合方式自由,在满足客观逻辑的前提下,可合并、可拆分,根据需要设计不同的pipe结构。同时自带pipe结构检查功能,识别出不合规的pipe结构;
  • pipe支持各种hook,外部通过hook可以实时获取pipe的运行情况(第1点就是基于该特性实现);
  • 支持一个Pipe处理多路视频(多路共用一个推理模型,Pipe分支涉及到merge和split操作),批处理提速;也支持一个Pipe只处理一路视频(各路使用自己的推理模型,Pipe呈直线状、多个Pipe并存),基于不同视频做不同的推理任务;
  • 基于指定基类,所有自带插件全部可自定义重新实现;
  • 框架主干代码完全基于原生C++ STL实现,跨平台编译部署简单。

目前进度

开发环境:vs code/ubuntu 18.04/C++17/opencv 4.6/ffmpeg 3.4.8/gstreamer 1.20。之前使用wsl1/2+ubuntu22.04,但是wsl坑太多,后放弃。

  • 2022/9/30:完成基于tensorrt的检测插件(一级推理和二级推理),非默认的opencv::dnn。源码上线
  • 2022/9/15:完成基于paddle的ocr文字识别相关插件,基于paddle推理库(非默认的opencv::dnn)
  • 2022/9/1:完成基于yunet/sface的人脸检测、识别以及显示相关插件开发,实现多pipe并行运行的机制,多个pipe可加载不同模型、基于不同视频完成不同的推理任务。(单个pipe接入多路视频、共用相同的模型之前已实现)
  • 2022/8/15:完成openpose肢体检测器相关插件开发,完成图像二级分类插件开发。
  • 2022/8/5:完成infer相关基类、yolo检测器派生类的实现,走通整个一级推理流程,rtmp/screen 2种输出。
  • 2022/7/22:已完成主干框架开发,预估占总体进度的1/3。等基本完成后开源,有兴趣的朋友可以关注。

如何使用

#include "VP.h"#include "../nodes/vp_file_src_node.h"
#include "../nodes/infers/vp_trt_vehicle_detector.h"
#include "../nodes/infers/vp_trt_vehicle_plate_detector.h"
#include "../nodes/osd/vp_osd_node_v2.h"
#include "../nodes/vp_screen_des_node.h"
#include "../nodes/vp_rtmp_des_node.h"
#include "../utils/analysis_board/vp_analysis_board.h"#if MAIN
int main() {// create nodesauto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>("file_src_0", 0, "./test_video/13.mp4");auto trt_vehicle_detector = std::make_shared<vp_nodes::vp_trt_vehicle_detector>("vehicle_detector", "./vehicle.trt");auto trt_vehicle_plate_detector = std::make_shared<vp_nodes::vp_trt_vehicle_plate_detector>("vehicle_plate_detector", "./det.trt", "./rec.trt");auto osd_0 = std::make_shared<vp_nodes::vp_osd_node_v2>("osd_0", "./font/NotoSansCJKsc-Medium.otf");auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>("screen_des_0", 0, true, vp_objects::vp_size{640, 360});auto rtmp_des_0 = std::make_shared<vp_nodes::vp_rtmp_des_node>("rtmp_des_0", 0, "rtmp://192.168.77.105/live/10000", vp_objects::vp_size{1280, 720});// construct pipelinetrt_vehicle_detector->attach_to({file_src_0});trt_vehicle_plate_detector->attach_to({trt_vehicle_detector});osd_0->attach_to({trt_vehicle_plate_detector});// split into 2 sub branches automaticallyscreen_des_0->attach_to({osd_0});rtmp_des_0->attach_to({osd_0});// start pipelinefile_src_0->start();// visualize pipeline for debugvp_utils::vp_analysis_board board({file_src_0});board.display();
}
#endif

上面代码可以生成3个画面:

  • pipeline运行图(window显示)
  • 屏幕显示结果(window显示)
  • rtmp显示结果(video player播放)

项目还在持续完善中,感兴趣的朋友可以关注!

VideoPipe可视化视频结构化框架开源了!相关推荐

  1. vp视频结构化框架(2022/9/15更新)

    完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...

  2. 基于DeepStream的视频结构化解决方案

    视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...

  3. RK3588+AI视频结构化算法设计方案

    本文详细介绍了基于Rockchip RK3588芯片的AI边缘计算主板外形.尺寸.技术规格,以及详细的硬件接口设计参考说明,使客户可以快速将RK3588边缘计算主板应用于工业互联网.智慧城市.智慧安防 ...

  4. 拓扑排序排课系统_视频结构化人脸布控系统

    一.平台背景 在国家智慧城市的建设中的公共安全,对维稳防控.全城布控.预测预警.综合管理等提出了更高需求,针对这些需求我们作为识别领域的领先者,结合我们的识别技术,更全面.更智能提出了我们视频结构化黑 ...

  5. HTML网页结构化框架、meta标签和语义化标签

    1.HTML网页结构化框架代码示例 myhtml.html <!--文档声明,声明当前网页的版本--> <!DOCTYPE html> <!--html的根标签(元素), ...

  6. 如何用 AI 实现视频结构化管理?

    继图片之后,视频结构化成为了深度学习领域又一个热点.相比图片,视频内容无疑具有更大的复杂性.面对不同场景的视频结构化需求,需要采用什么策略才能取得最大化的效果? AI 视频结构化对于互联网.广电等行业 ...

  7. 【解决方案】AI视频结构化智能分析平台EasyCVR搭建市教育考试院综合视频安防监控系统

    一.背景概述 市区教育考试院承担合肥地区高考.研究生考试.非学历考试等考试任务,因此保障教育考试院的安全以及业务的顺利进行是极其重要的,这正是市区教育考试院综合安防视频监控系统设计的核心意义所在.教育 ...

  8. 【解决方案】汽车修理厂如何实现远程监控?EasyCVR视频结构化平台助力智能维修安防

    一.背景分析 随着我们汽车保有量越来越多,汽车保养维修问题越来越多.随着社会经济水平提高,消费者对服务质量要求进一步提高,汽车维修店的安全防范与人员管理就成了一大难题.这样的汽车维修店大多店铺分散,且 ...

  9. 海康摄像头通过Ehome协议接入EasyCVR视频结构化可视平台无法播放如何排查?

    EasyCVR视频结构化安防视频智能分析平台支持多种协议设备的接入,其中包括Ehome.海康SDK.大华SDK协议等私有协议,现有的平台都已通过测试,并且我们仍在积极扩充其协议的兼容性,未来也将支持更 ...

最新文章

  1. 社交网络图挖掘3--重叠社区的发现及Simrank
  2. python【蓝桥杯vip练习题库】BASIC-17矩阵乘法(枚举)
  3. spring cloud架构 - HongHu common-service 项目构建过程
  4. C++ 学习之旅(3)——头文件Header
  5. 数据光端机设备性能指标介绍
  6. 如何在linux下yum安装mysql_linux下使用yum安装mysql详解
  7. linux 改目录前缀,Linux修改终端显示前缀及环境变量
  8. 部署Screego浏览器实现多人共享屏幕
  9. 简约、高质量简历模板
  10. web前端入坑第二篇:web前端到底怎么学?干货资料!
  11. PS教程:利用灰度蒙版实现无级调节
  12. css交集选择器的使用
  13. siesta在Linux运行,并行版的SIESTA不能运行
  14. cadence 通孔焊盘_过孔上焊盘,电源笑开颜
  15. 我的2007-高开低走,无甚成就
  16. WinForm中使用Win10 蓝牙Ble Sdk
  17. android中级开发师必备_【招聘】Android开发工程师 – 中级 – 陌陌
  18. 切分数组--荷兰国旗问题
  19. 【C语言编程1】删除数组中重复元素,并排序
  20. FIDO身份认证更加契合个人信息保护法

热门文章

  1. 玩机搞机----安卓全机型修改 开机动画 步骤教程
  2. 小白用户也能看懂的卷积神经网络5
  3. 深度学习是怎么回事?有什么用?
  4. BUPT数电爱课堂概念题_易错点_错题 汇总
  5. 【MLDN_李兴华】JAVA学习攻略+新书导读
  6. 华为认证实验篇-ENSP的安装(附下载地址)
  7. 【系统故障】解决动态库路径错误导致ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found 的问题
  8. CentOS VirtualBox虚拟机 系统时间不对
  9. 程序员如何解决中年危机?web前端开发工程师简历模板
  10. 面试题-Java基础(四)-反射