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. python九周周末总结

    python九周周末总结 UDP协议 udp协议的交互模式服务端不需要考虑客户端是否退出,你发多少那么他就会按照你发的东西直接去传输给客户端不存在黏包现象 服务端: import socket ser ...

  2. Postman中的断言

    Postman设置断言 一.断言的定义 1.什么是断言? 一般一个完整的接口测试,包括:请求->获取响应正文->断言,请求和获取响应正文很常见.断言一般是对请求的响应结果做操作,判断预期结 ...

  3. 不想当Window的Dialog不是一个好Modal,弹窗翻身记

    弹窗是我们熟视无睹的一种交互方式,经常用到,但从没好好想过这种交互行为背后的意义... 弹窗是Windows的灵魂 Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候 ...

  4. RabbitMQ 入门系列:9、扩展内容:死信队列:真不适合当延时队列。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  5. 写给前端的 react-native 入门指南

    前言 本文主要介绍 react-native(下称 RN) 的入门, 和前端的异同点 文章不涉及功能的具体实现 选择优势 我们先说说, 为什么很多人会选择使用 RN .他对应的特性和普通 Web 的区 ...

  6. KingbaseES 中select distinct on 语句

    用法 SELECT DISTINCT ON ( expression [, ...] ) 把记录根据[, -]的值进行分组,分组之后仅返回每一组的第一行. 需要注意的是,如果不指定ORDER BY子句 ...

  7. PostgreSQL 绑定变量窥探

    今天我们要探讨的是 custom执行计划和通用执行计划.这一技术在 Oracle中被称为绑定变量窥视.但 Kingbase中并没有这样的定义,更严格地说,Kingbase叫做custom执行计划和通用 ...

  8. lombok Builder注解

    使用了@Builder 将会失去无参构造函数 可以通过 @Tolerate 来添加构造函数

  9. flutter系列之:flutter中常用的Stack layout详解

    [toc] 简介 对于现代APP的应用来说,为了更加美观,通常会需要用到不同图像的堆叠效果,比如在一个APP用户背景头像上面添加一个按钮,表示可以修改用户信息等. 要实现这样的效果,我们需要在一个Im ...

  10. Twikoo私有化部署教程--迁移腾讯云

    目录 备份数据 私有化部署 创建容器 导入数据 重新配置twikoo面板设置 引入前端CDN Nginx https反代http 作者:小牛呼噜噜 | https://xiaoniuhululu.co ...