VideoPipe从国庆节上线源代码到现在经历过了一个月时间,期间吸引了若干小伙伴的参与,现将本阶段新增内容总结如下,有兴趣的朋友可以加微信拉群交流。

项目地址:https://github.com/sherlockchou86/video_pipe_c

以往文章:https://www.cnblogs.com/xiaozhi_5638/p/16767917.html

跟踪插件

新增了跟踪插件,同时实现了默认的SORT目标跟踪算法,后期扩展Deep SORT算法非常方便。下面是车辆跟踪的效果(底部是pipe运行状态图):

下面是人脸跟踪的效果:

录像和截图插件

新增了录像截图插件,同时提供了一个人工模拟录像或截图的接口供测试。当用户向管道中发送录像、截图控制指令时,录像截图插件就开始异步工作。下面是异步录像原理:

日志库

新增了一个轻量级的日志库,支持多线程异步日志写入、支持日志文件自动拆分。日志没使用第三方库,下面是日志使用方法和效果:

 1 // log level
2 VP_SET_LOG_LEVEL(_log_level);
3 // log file dir
4 VP_SET_LOG_DIR(_log_dir);
5
6 // log to console or not
7 VP_SET_LOG_TO_CONSOLE(_log_to_console);
8 // log to file or not
9 VP_SET_LOG_TO_FILE(_log_to_file);
10 // TO-DO
11 VP_SET_LOG_TO_KAFKA(_log_to_kafka);
12
13 // include log level or not
14 VP_SET_LOG_INCLUDE_LEVEL(_include_level);
15 // include code location or not (where the log occurs)
16 VP_SET_LOG_INCLUDE_CODE_LOCATION(_include_code_location);
17 // include thread id or not (std::this_thread::get_id())
18 VP_SET_LOG_INCLUDE_THREAD_ID(_include_thread_id);
19
20 // warn if log cache in memory exceed this value
21 VP_SET_LOG_CACHE_WARN_THRES(_log_cache_warn_threshold);
 1 [2022-11-04 14:12:47.218][Info ] [file_src_0] reading frame complete, total frame==>354
2 [2022-11-04 14:12:47.219][Info ] [file_src_0] cycle flag is true, continue!
3 [2022-11-04 14:15:23.416][Warn ][7ffff7f81000][../nodes/vp_infer_node.cpp:39] [vehicle_detector] cv::dnn::readNet load network failed!
4 [2022-11-04 14:15:24.227][Info ][7ffff7f81000][../nodes/vp_screen_des_node.cpp:14] [screen_des_0] [appsrc ! videoconvert ! textoverlay text=screen_des_0 halignment=left valignment=top font-desc='Sans,16' shaded-background=true ! timeoverlay halignment=right valignment=top font-desc='Sans,16' shaded-background=true ! queue ! fpsdisplaysink video-sink=ximagesink sync=false]
5 [2022-11-04 14:15:24.227][Info ][7ffff7f81000][../utils/analysis_board/../vp_pipe_checker.h:167]
6 ############# pipe check summary ##############
7 total layers: 5
8 layer index, node names
9 1 file_src_0,
10 2 vehicle_detector,
11 3 track_0,
12 4 osd_0,
13 5 screen_des_0,
14 ############# pipe check summary ##############
15
16 [2022-11-04 14:16:04.638][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:66] [file_src_0] reading frame complete, total frame==>999
17 [2022-11-04 14:16:04.639][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:68] [file_src_0] cycle flag is true, continue!
18 [2022-11-04 14:16:45.258][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:66] [file_src_0] reading frame complete, total frame==>1999
19 [2022-11-04 14:16:45.259][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:68] [file_src_0] cycle flag is true, continue!
20 [2022-11-04 14:17:25.838][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:66] [file_src_0] reading frame complete, total frame==>2999
21 [2022-11-04 14:17:25.839][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:68] [file_src_0] cycle flag is true, continue!
22 [2022-11-04 14:18:06.498][Info ][7fff47318700][../nodes/vp_file_src_node.cpp:66] [file_src_0] reading frame complete, total frame==>3999

sample代码

新增加13个sample文件,可以独立运行,涵盖pipe结构、各种插件使用举例。下面是1-1-1 sample代码和效果:

 1 #include "VP.h"
2
3 #include "../nodes/vp_file_src_node.h"
4 #include "../nodes/infers/vp_yunet_face_detector_node.h"
5 #include "../nodes/infers/vp_sface_feature_encoder_node.h"
6 #include "../nodes/osd/vp_face_osd_node_v2.h"
7 #include "../nodes/vp_screen_des_node.h"
8 #include "../nodes/vp_rtmp_des_node.h"
9
10 #include "../utils/analysis_board/vp_analysis_board.h"
11
12 /*
13 * ## 1-1-1 sample ##
14 * 1 video input, 1 infer task, and 1 output.
15 */
16
17 #if _1_1_1_sample
18
19 int main() {
20 VP_SET_LOG_INCLUDE_CODE_LOCATION(false);
21 VP_SET_LOG_INCLUDE_THREAD_ID(false);
22 VP_LOGGER_INIT();
23
24 // create nodes
25 auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>("file_src_0", 0, "./test_video/10.mp4", 0.6);
26 auto yunet_face_detector_0 = std::make_shared<vp_nodes::vp_yunet_face_detector_node>("yunet_face_detector_0", "./models/face/face_detection_yunet_2022mar.onnx");
27 auto sface_face_encoder_0 = std::make_shared<vp_nodes::vp_sface_feature_encoder_node>("sface_face_encoder_0", "./models/face/face_recognition_sface_2021dec.onnx");
28 auto osd_0 = std::make_shared<vp_nodes::vp_face_osd_node_v2>("osd_0");
29 auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>("screen_des_0", 0);
30
31 // construct pipeline
32 yunet_face_detector_0->attach_to({file_src_0});
33 sface_face_encoder_0->attach_to({yunet_face_detector_0});
34 osd_0->attach_to({sface_face_encoder_0});
35 screen_des_0->attach_to({osd_0});
36
37 file_src_0->start();
38
39 // for debug purpose
40 vp_utils::vp_analysis_board board({file_src_0});
41 board.display();
42 }
43
44 #endif

上面代码生成的pipe如下图所示:

感兴趣的朋友加微信交流,框架非常适合新手入门!

VideoPipe可视化视频结构化框架新增功能详解(2022-11-4)的更多相关文章

  1. VideoPipe可视化视频结构化框架开源了!

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

  2. HTM5新增结构化元素&非结构化元素&新增属性详解

    (1)HTML5 新增的主体结构元素 (2)HTML5 新增的的非主体结构元素 (3)HTML5 表单新增元素与属性 (4)HTML5 改良的 input 元素的种类

  3. VP视频结构化框架

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

  4. [Android Pro] 终极组件化框架项目方案详解

    cp from : https://blog.csdn.net/pochenpiji159/article/details/78660844 前言 本文所讲的组件化案例是基于自己开源的组件化框架项目g ...

  5. iOS-----AVFoundation框架的功能详解

    使用AVFoundation拍照和录制视频 需要开发自定义的拍照和录制视频功能,可借助于AVFoundation框架来实现,该框架提供了大量的类来完成拍照和录制视频.主要使用如下类: AVCaptur ...

  6. PHP5.2至5.6的新增功能详解

    截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注]. 因为 PHP ...

  7. Flask框架 之 功能详解

    浏览目录 配置文件 路由系统 视图 请求相关 响应 模板渲染 session 闪现 中间件 蓝图(blueprint) 特殊装饰器 配置文件 知识点 给你一个路径 “settings.Foo”,可以找 ...

  8. Flask框架之功能详解

    1|0浏览目录 配置文件 路由系统 视图 请求相关 响应 模板渲染 session 闪现 中间件 蓝图(blueprint) 特殊装饰器 1|1配置文件 知识点 给你一个路径 "settin ...

  9. 视频结构化 AI 推理流程

    「视频结构化」是一种 AI 落地的工程化实现,目的是把 AI 模型推理流程能够一般化.它输入视频,输出结构化数据,将结果给到业务系统去形成某些行业的解决方案. 换个角度,如果你想用摄像头来实现某些智能 ...

随机推荐

  1. OpenJudge 1.5.15 银行利息

    15:银行利息 总时间限制: 1000ms 内存限制: 65536kB 描述 农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇.已知投资的复合年利率为R(0到20之间 ...

  2. Helm安装ingress-nginx-4.1.4

    Application version 1.2.1 Chart version 4.1.4 获取chart包 helm fetch ingress-nginx/ingress-nginx --vers ...

  3. docker-compose总结

    docker-compose.yml 样例: 各个标签的含义在注释里 version: '3' # 选择的docker-compose 版本 services: # 要编排的一组服务 fim-mysq ...

  4. WinForm完美实现Cefsharp-v49控件C#与JS交互,并且可加载运行flash

    https://blog.csdn.net/zhao331863874/article/details/117328415

  5. 【设计模式】Java设计模式 - 享元模式

    Java设计模式 - 享元模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  6. 【疑难杂症】关于Transformer到底是什么

    在学习transform的时候,很多视频上来就是一张图开始解释图里面残差网络,self-attention等等巴拉巴拉的意思,然后组装,看也看完了,但是还是不明白transformer和selfatt ...

  7. mysql8 安装与配置文件添加时区

    mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...

  8. Kubernetes生态架构图

    图片来源于:https://gitbook.curiouser.top/ 一.kubernetes 集群架构图 二.Openshift or Kubernetes 集群架构图 三.常见的 CI/CD ...

  9. (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通

    一.注意要点 1:输入字符串的的编码双方保持统一,如:UTF8: 2:HASH计算输出结果 byte[] 数组转String 时,编码要统一,如:转16进制小写字符串.当然也可以转Base64. 3: ...

  10. 【原创】推流录屏软件OBS使用教程--录屏

    之前有录屏需要,写了一篇关于ffmpeg录屏的文章,反响还不错,但是直接用ffmpeg门槛有些高,今天写一篇图形界面的录屏推流工具OBS的使用教程.这次先写OBS的录屏教程 下载安装 点击 OBS官网 ...