文章插图
完成多路视频并行接入、解码、多级推理、结构化数据分析、上报、编码推流等过程 , 插件式/pipe式编程风格 , 功能上类似英伟达的deepstream和华为的mxvision , 但底层核心不依赖复杂难懂的gstreamer框架(少部分地方需要) , 框架主干部分主要使用原生C++ STL实现 , 目标是平台高可移植性 。框架可用于:视频结构化、以图搜图、目标行为分析等应用领域 。
源码地址: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实现 , 跨平台编译部署简单 。
- 2022/9/30:完成基于tensorrt的检测插件(一级推理和二级推理) , 非默认的opencv::dnn 。源码上线
- 2022/9/15:完成基于paddle的ocr文字识别相关插件 , 基于paddle推理库(非默认的opencv::dnn)
- 2022/9/1:完成基于yunet/sface的人脸检测、识别以及显示相关插件开发 , 实现多pipe并行运行的机制 , 多个pipe可加载不同模型、基于不同视频完成不同的推理任务 。(单个pipe接入多路视频、共用相同的模型之前已实现)
经验总结扩展阅读
- 优酷视频怎么分享到微信
- 【.NET 6+Loki+Grafana】实现轻量级日志可视化服务功能
- 电脑怎么做表格步骤视频教程
- 火山小视频是如何盈利的(火山视频怎么上传才有收益)
- 火山小视频赚钱秘籍(火山领钱方法)
- 火山小视频怎么样才能一天挣一百多(火山视频怎么上传才有收益)
- 火山小视频是如何赚钱的(火山小视频怎么样才能挣钱)
- 腾讯视频用微信开的怎么给别人用
- 火山视频怎么挣钱的(火山挣钱还是抖音挣钱)
- 高清视频通话怎么关闭(红米怎么关闭高清通话)