- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
项目地址: https://github.com/sherlockchou86/video_pipe_c 。
往期文章: https://www.cnblogs.com/xiaozhi_5638/p/16969546.html 。
最近有多个更新,有兴趣的扫码加群交流.
新增实例分割相关支持 。
增加了基于mask-rcnn的实例分割插件和相关sample.
1 #include " VP.h " 2 3 #include " ../nodes/vp_file_src_node.h " 4 #include " ../nodes/infers/vp_mask_rcnn_detector_node.h " 5 #include " ../nodes/track/vp_sort_track_node.h " 6 #include " ../nodes/osd/vp_osd_node_v3.h " 7 #include " ../nodes/vp_screen_des_node.h " 8 9 #include " ../utils/analysis_board/vp_analysis_board.h " 10 11 /* 12 * ## mask rcnn sample ## 13 * image segmentation using mask rcnn. 14 */ 15 16 #if mask_rcnn_sample 17 18 int main() { 19 VP_SET_LOG_LEVEL(vp_utils::vp_log_level::INFO); 20 VP_LOGGER_INIT(); 21 22 // create nodes 23 auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>( " file_src_0 " , 0 , " ./test_video/19.mp4 " , 0.6 ); 24 auto mask_rcnn_detector = std::make_shared<vp_nodes::vp_mask_rcnn_detector_node>( " mask_rcnn_detector " , " ./models/mask_rcnn/frozen_inference_graph.pb " , " ./models/mask_rcnn/mask_rcnn_inception_v2_coco_2018_01_28.pbtxt " , " ./models/coco_80classes.txt " ); 25 auto track_0 = std::make_shared<vp_nodes::vp_sort_track_node>( " sort_track_0 " ); 26 auto osd_v3_0 = std::make_shared<vp_nodes::vp_osd_node_v3>( " osd_v3_0 " , " ../third_party/paddle_ocr/font/NotoSansCJKsc-Medium.otf " ); 27 auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_0 " , 0 ); 28 29 // construct pipeline 30 mask_rcnn_detector-> attach_to({file_src_0}); 31 track_0-> attach_to({mask_rcnn_detector}); 32 osd_v3_0-> attach_to({track_0}); 33 screen_des_0-> attach_to({osd_v3_0}); 34 35 file_src_0-> start(); 36 37 // for debug purpose 38 vp_utils::vp_analysis_board board({file_src_0}); 39 board.display(); 40 } 41 42 43 #endif
上面代码效果图如下:
。
。
新增语义分割相关支持 。
新增了基于ENet网络的语义分割插件和sample.
1 #include " VP.h " 2 3 #include " ../nodes/vp_file_src_node.h " 4 #include " ../nodes/infers/vp_enet_seg_node.h " 5 #include " ../nodes/osd/vp_seg_osd_node.h " 6 #include " ../nodes/vp_screen_des_node.h " 7 8 #include " ../utils/analysis_board/vp_analysis_board.h " 9 10 /* 11 * ## enet seg sample ## 12 * semantic segmentation based on ENet. 13 * 1 input, 2 outputs including orignal frame and mask frame. 14 */ 15 16 #if enet_seg_sample 17 18 int main() { 19 VP_SET_LOG_LEVEL(vp_utils::vp_log_level::INFO); 20 VP_LOGGER_INIT(); 21 22 // create nodes 23 auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>( " file_src_0 " , 0 , " ./test_video/21.mp4 " ); 24 auto enet_seg = std::make_shared<vp_nodes::vp_enet_seg_node>( " enet_seg " , " models/enet-cityscapes/enet-model.net " ); 25 auto seg_osd_0 = std::make_shared<vp_nodes::vp_seg_osd_node>( " seg_osd_0 " , " models/enet-cityscapes/enet-classes.txt " , " models/enet-cityscapes/enet-colors.txt " ); 26 auto screen_des_mask = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_mask " , 0 , true , vp_objects::vp_size( 400 , 225 )); 27 auto screen_des_original = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_original " , 0 , false , vp_objects::vp_size( 400 , 225 )); 28 29 // construct pipeline 30 enet_seg-> attach_to({file_src_0}); 31 seg_osd_0-> attach_to({enet_seg}); 32 screen_des_mask-> attach_to({seg_osd_0}); 33 screen_des_original-> attach_to({seg_osd_0}); 34 35 file_src_0-> start(); 36 37 // for debug purpose 38 vp_utils::vp_analysis_board board({file_src_0}); 39 board.display(); 40 } 41 42 #endif
上面代码效果图如下:
。
新增多级推理插件sample 。
多个检测、分类插件串联,不同分类器作用于不同的主目标:
1 #include " VP.h " 2 3 #include " ../nodes/vp_file_src_node.h " 4 #include " ../nodes/infers/vp_yolo_detector_node.h " 5 #include " ../nodes/infers/vp_classifier_node.h " 6 #include " ../nodes/osd/vp_osd_node.h " 7 #include " ../nodes/vp_screen_des_node.h " 8 #include " ../utils/analysis_board/vp_analysis_board.h " 9 10 /* 11 * ## multi detectors and classifiers sample ## 12 * show multi infer nodes work together. 13 * 1 detector and 2 classifiers applied on primary class ids(1/2/3). 14 */ 15 16 #if multi_detectors_and_classifiers_sample 17 18 int main() { 19 VP_SET_LOG_LEVEL(vp_utils::vp_log_level::INFO); 20 VP_LOGGER_INIT(); 21 22 // create nodes 23 auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>( " file_src_0 " , 0 , " test_video/20.mp4 " , 0.6 ); 24 /* primary detector */ 25 // labels for detector model 26 // 0 - person 27 // 1 - car 28 // 2 - bus 29 // 3 - truck 30 // 4 - 2wheel 31 auto primary_detector = std::make_shared<vp_nodes::vp_yolo_detector_node>( " primary_detector " , " models/det_cls/yolov3-tiny-2022-0721_best.weights " , " models/det_cls/yolov3-tiny-2022-0721.cfg " , " models/det_cls/yolov3_tiny_5classes.txt " , 416 , 416 , 1 ); 32 /* secondary classifier 1, applied to car(1)/bus(2)/truck(3) only */ 33 auto _1st_classifier = std::make_shared<vp_nodes::vp_classifier_node>( " 1st_classifier " , " models/det_cls/vehicle/resnet18-batch=N-type_view_0322_nhwc.onnx " , "" , " models/det_cls/vehicle/vehicle_types.txt " , 224 , 224 , 1 , std::vector< int >{ 1 , 2 , 3 }, 10 , false , 1 , cv::Scalar(), cv::Scalar(), true , true ); 34 /* secondary classifier 2, applied to car(1)/bus(2)/truck(3) only */ 35 auto _2nd_classifier = std::make_shared<vp_nodes::vp_classifier_node>( " 2nd_classifier " , " models/det_cls/vehicle/resnet18-batch=N-color_view_0322_nhwc.onnx " , "" , " models/det_cls/vehicle/vehicle_colors.txt " , 224 , 224 , 1 , std::vector< int >{ 1 , 2 , 3 }, 10 , false , 1 , cv::Scalar(), cv::Scalar(), true , true ); 36 auto osd_0 = std::make_shared<vp_nodes::vp_osd_node>( " osd_0 " ); 37 auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_o " , 0 ); 38 39 // construct pipeline 40 primary_detector-> attach_to({file_src_0}); 41 _1st_classifier-> attach_to({primary_detector}); 42 _2nd_classifier-> attach_to({_1st_classifier}); 43 osd_0-> attach_to({_2nd_classifier}); 44 screen_des_0-> attach_to({osd_0}); 45 46 // start 47 file_src_0-> start(); 48 49 // for debug purpose 50 vp_utils::vp_analysis_board board({file_src_0}); 51 board.display(); 52 } 53 54 #endif
上面代码运行效果如下:
。
新增图片源输入插件 。
支持以图片方式输入(文件或UDP),频率可调、各个通道互相独立.
1 #include " VP.h " 2 3 #include " ../nodes/vp_image_src_node.h " 4 #include " ../nodes/infers/vp_yolo_detector_node.h " 5 #include " ../nodes/osd/vp_osd_node.h " 6 #include " ../nodes/vp_split_node.h " 7 #include " ../nodes/vp_screen_des_node.h " 8 9 #include " ../utils/analysis_board/vp_analysis_board.h " 10 11 /* 12 * ## image_src_sample ## 13 * show how vp_image_src_node works, read image from local file or receive image from remote via udp. 14 */ 15 16 #if image_src_sample 17 18 int main() { 19 VP_SET_LOG_LEVEL(vp_utils::vp_log_level::INFO); 20 VP_LOGGER_INIT(); 21 22 // create nodes 23 auto image_src_0 = std::make_shared<vp_nodes::vp_image_src_node>( " image_file_src_0 " , 0 , " ./images/test_%d.jpg " , 1 , 0.4 ); // read 1 image EVERY 1 second from local files, such as test_0.jpg,test_1.jpg 24 /* sending command for test: `gst-launch-1.0 filesrc location=16.mp4 ! qtdemux ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=416,height=416 ! videorate ! video/x-raw,framerate=1/1 ! jpegenc ! rtpjpegpay ! udpsink host=ip port=6000` */ 25 auto image_src_1 = std::make_shared<vp_nodes::vp_image_src_node>( " image_udp_src_1 " , 1 , " 6000 " , 3 ); // receive 1 image EVERY 3 seconds from remote via udp , such as 127.0.0.1:6000 26 auto yolo_detector = std::make_shared<vp_nodes::vp_yolo_detector_node>( " yolo_detector " , " models/det_cls/yolov3-tiny-2022-0721_best.weights " , " models/det_cls/yolov3-tiny-2022-0721.cfg " , " models/det_cls/yolov3_tiny_5classes.txt " ); 27 auto osd = std::make_shared<vp_nodes::vp_osd_node>( " osd " ); 28 auto split = std::make_shared<vp_nodes::vp_split_node>( " split_by_channel " , true ); // split by channel index (important!) 29 auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_0 " , 0 ); 30 auto screen_des_1 = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_1 " , 1 ); 31 32 // construct pipeline 33 yolo_detector-> attach_to({image_src_0, image_src_1}); 34 osd-> attach_to({yolo_detector}); 35 split-> attach_to({osd}); 36 screen_des_0-> attach_to({split}); 37 screen_des_1-> attach_to({split}); 38 39 image_src_0->start(); // start read from local file 40 image_src_1->start(); // start receive from remote via udp 41 42 // for debug purpose 43 vp_utils::vp_analysis_board board({image_src_0, image_src_1}); 44 board.display(); 45 } 46 47 #endif
上面代码运行效果如下:
。
新增图片结果输出插件 。
支持以图片格式输出结果(文件或UDP),频率可调、各通道互相独立.
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_image_des_node.h " 9 10 #include " ../utils/analysis_board/vp_analysis_board.h " 11 12 /* 13 * ## image_des_sample ## 14 * show how vp_image_des_node works, save image to local file or push image to remote via udp. 15 */ 16 17 #if image_des_sample 18 19 int main() { 20 VP_SET_LOG_LEVEL(vp_utils::vp_log_level::INFO); 21 VP_LOGGER_INIT(); 22 23 // create nodes 24 auto file_src_0 = std::make_shared<vp_nodes::vp_file_src_node>( " file_src_0 " , 0 , " ./test_video/10.mp4 " , 0.6 ); 25 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 " ); 26 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 " ); 27 auto osd_0 = std::make_shared<vp_nodes::vp_face_osd_node_v2>( " osd_0 " ); 28 auto screen_des_0 = std::make_shared<vp_nodes::vp_screen_des_node>( " screen_des_0 " , 0 ); 29 30 /* save to file, `%d` is placeholder for filename index */ 31 // auto image_des_0 = std::make_shared<vp_nodes::vp_image_des_node>("image_file_des_0", 0, "./images/%d.jpg", 3); 32 33 /* push via udp, receiving command for test: `gst-launch-1.0 udpsrc port=6000 ! application/x-rtp,encoding-name=jpeg ! rtpjpegdepay ! jpegparse ! jpegdec ! queue ! videoconvert ! autovideosink` */ 34 auto image_des_0 = std::make_shared<vp_nodes::vp_image_des_node>( " image_udp_des_0 " , 0 , " 192.168.77.248:6000 " , 3 , vp_objects::vp_size( 400 , 200 )); 35 36 // construct pipeline 37 yunet_face_detector_0-> attach_to({file_src_0}); 38 sface_face_encoder_0-> attach_to({yunet_face_detector_0}); 39 osd_0-> attach_to({sface_face_encoder_0}); 40 screen_des_0-> attach_to({osd_0}); 41 image_des_0-> attach_to({osd_0}); 42 43 file_src_0-> start(); 44 45 // for debug purpose 46 vp_utils::vp_analysis_board board({file_src_0}); 47 board.display(); 48 } 49 50 #endif
上面代码运行效果如下:
。
更多更新扫码加入微信群,及时获取通知.
最后此篇关于VideoPipe可视化视频结构化框架更新总结(2023-3-30)的文章就讲到这里了,如果你想了解更多关于VideoPipe可视化视频结构化框架更新总结(2023-3-30)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我对此很陌生,我在这里的论坛上检查过答案,但我没有找到任何真正可以帮助我的答案。我正在尝试播放 res/raw 文件夹中的视频。到目前为止我已经设置了这段代码: MediaPlayer mp; @Ov
我可以播放一个视频剪辑,检测视频的结尾,然后创建一个表单,然后播放另一个视频剪辑。我的问题是,表单 react 不正确,我创建了带有提交按钮和两个单选按钮可供选择的表单。我希望让用户进行选择,验证响应
首先,我必须说我在web2py讨论组中看到过类似的内容,但我不太理解。 我使用 web2py 设置了一个数据库驱动的网站,其中的条目只是 HTML 文本。其中大多数将包含 img和/或video指向相
我正在尝试在视频 View 中播放 YouTube 视频。 我将 xml 布局如下: 代码是这样的: setContentView(R.layout.webview); VideoV
我正在开发一个需要嵌入其中的 youtube 视频播放器的 android 应用程序。我成功地从 API 获得了 RTSP 视频 URL,但是当我试图在我的 android 视频 View 中加载这个
我目前正在从事一个使用 YouTube API 的网络项目。 我完全不熟悉 API。所以每一行代码都需要付出很多努力。 使用以下代码,我可以成功检索播放列表中的项目: https://www.goog
是否可以仅使用视频 ID 和 key 使用 API V3 删除 youtube 视频?我不断收到有关“必需参数:部分”丢失的错误消息。我用服务器和浏览器 api 键试了一下这是我的代码: // $yo
所以我一直坚持这个大约一个小时左右,我就是无法让它工作。到目前为止,我一直在尝试从字符串中提取整个链接,但现在我觉得只获取视频 ID 可能更容易。 RegEx 需要从以下链接样式中获取 ID/URL,
var app = angular.module('speakout', []).config( function($sceDelegateProvider) {
我正在努力从 RSS 提要中阅读音频、视频新闻。我如何确定该 rss 是用于新闻阅读器还是用于音频或视频? 这是视频源:http://feeds.cbsnews.com/CBSNewsVideo 这是
利用python反转图片/视频 准备:一张图片/一段视频 python库:pillow,moviepy 安装库 ?
我希望在用户双击视频区域时让我的视频全屏显示,而不仅仅是在他们单击控件中的小图标时。有没有办法添加事件或其他东西来控制用户点击视频时发生的情况? 谢谢! 最佳答案 按照 Musa 的建议,附
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个公司培训视频加载到本地服务器上。我正在使用 HTML5 的视频播放来观看这些视频。该服务器无法访问网络,但我已加载 apache 并且端口 8080 对同一网络上的所有机器开放。 这些文件位于
我想混合来自 video.mp4 的视频(时长 1 分钟)和来自 audio.mp3 的音频(10 分钟持续时间)到一个持续时间为 1 分钟的输出文件中。来自 audio.mp3 的音频应该是从 4
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我正在尝试使用 peer/getUserMedia 创建一个视频 session 网络应用程序。 目前,当我将唯一 ID 发送到视频 session 时,我能够听到/看到任何加入我的 session
考虑到一段时间内的观看次数,我正在评估一种针对半自动脚本的不同方法,该脚本将对视频元数据执行操作。 简而言之,只要视频达到指标中的某个阈值,就说观看次数,它将触发某些操作。 现在要执行此操作,我将不得
我正在通过iBooks创建专门为iPad创建动态ePub电子书的网站。 它需要支持youtube视频播放,所以当我知道视频的直接路径时,我正在使用html5 标记。 有没有一种使用html5 标签嵌入
我对Android不熟悉,我想浏览youtube.com并在Webview内从网站显示视频。当前,当我尝试执行此操作时,将出现设备的浏览器,并让我使用设备浏览器浏览该站点。如果Webview不具备这种
我是一名优秀的程序员,十分优秀!