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. Dart 异步编程(三):详细认识

    基本概念 普通任务按照顺序执行:异步任务将在未来的某个时间执行. 实际演示 void main() { // waitFuture 函数是一个异步函数,阻塞会发生在函数内部 waitFuture(); ...

  2. 使用MindSpore计算旋转矩阵

    技术背景 坐标变换.旋转矩阵,是在线性空间常用的操作,在分子动力学模拟领域有非常广泛的应用.比如在一个体系中切换坐标,或者对整体分子进行旋转平移等.如果直接使用Numpy,是很容易可以实现的,只要把相 ...

  3. 在cmd中使用doskey来实现alias别名功能

            作为一枚网络工程师,经常就是面对一堆黑框框,也是就是终端.不同操作系统.不同厂家的目录,功能相同但是键入的命令又大不相同,这些差异化容易让脑子混乱.比如华为.思科.H3C.锐捷的设备, ...

  4. 【突然想多了解一点】可以用 Task.Run() 将同步方法包装为异步方法吗?

    [突然想多了解一点]可以用 Task.Run() 将同步方法包装为异步方法吗? 本文翻译自<Should I expose asynchronous wrappers for synchrono ...

  5. Session认证机制与JWT认证机制

    一.什么是身份认证? 身份认证(Authentication)又称"身份验证"."鉴权",是指通过一定的手段,完成对用户身份的确认.日常生活中的身份认证随处可见 ...

  6. mysql_varchar与中英文关系总结

    mysql 4.0版本以下,varchar(50), 指的是50字节,如果存放utf8汉字时,只能存放16个(每个汉字3字节) mysql 5.0版本以上,varchar(50), 指的是50字符,无 ...

  7. git hooks在业务中的使用

    起因 最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题.项目里application.yml文件内会用@build.time@记录打包时的时间,但是这个写法是build-helper-ma ...

  8. 微信小程序-坑,wxml里wx:if 判断 数字 是否在一个数组中。

    <view wx:if="{{item.index}} in {{vote_list}}"> 已赞 <image src="/static/zan_y. ...

  9. 组合总和 II

    组合总和 II 题目介绍 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates ...

  10. 两道超有意思的 CSS 面试题,试试你的基础

    今天在论坛,有看到这样一道非常有意思的题目,简单的代码如下: <div> <p id="a">First Paragraph</p> </ ...