实时监控RTSP视频流并通过YOLOv5-seg进行智能分析处理

在完成RTSP推流之后,尝试通过开发板接收的视频流数据进行目标检测,编写了一个shell脚本实现该功能,关于视频推流和rknn模型的部署请看之前的内容或者参考官方的文档。

#!/bin/bash
# 设置脚本使用的shell解释器为bashSEGMENT_DIR="./segmented_videos"
# 定义一个变量SEGMENT_DIR,用于存储分割后的视频文件的目录路径mkdir -p "$SEGMENT_DIR"
# 使用mkdir命令创建SEGMENT_DIR指定的目录,如果目录已存在则不会报错capture_and_segment() {ffmpeg -i rtsp://10.19.15.28:8554/camera_test -c copy -map 0 -f segment -segment_time 5 -reset_timestamps 1 -strftime 1 "${SEGMENT_DIR}/output_%Y-%m-%d_%H-%M-%S.mp4" &echo $! > "ffmpeg_pid.txt"
}
# 定义一个名为capture_and_segment的函数,该函数使用ffmpeg命令从RTSP流中捕获视频,并将其分割为5秒的片段。每个片段的文件名包含当前的时间戳。同时将ffmpeg进程的PID写入到ffmpeg_pid.txt文件中。run_yolov5_demo() {local video_file="$1"echo "Processing $video_file"./yolov5seg_videocapture_demo ./model/yolov5s_seg.rknn "$video_file"rm "$video_file"echo "Finished processing $video_file"
}
# 定义一个名为run_yolov5_demo的函数,该函数接受一个视频文件作为参数,并使用yolov5seg_videocapture_demo程序和预训练的YOLOv5分割模型对视频进行分割。处理完成后删除原始视频文件。cleanup() {echo "Cleaning up..."kill $(cat ffmpeg_pid.txt)rm ffmpeg_pid.txtrm -f ${SEGMENT_DIR}/*.mp4exit
}
# 定义一个名为cleanup的函数,该函数用于在脚本被中断时执行清理操作。它会杀死ffmpeg进程,删除ffmpeg_pid.txt文件,以及删除SEGMENT_DIR目录下的所有mp4文件。trap cleanup SIGINT
# 使用trap命令注册cleanup函数,以便在脚本接收到SIGINT信号(通常是由于用户按下Ctrl+C)时执行清理操作。capture_and_segment
# 调用capture_and_segment函数开始捕获和分割视频流。while inotifywait -q -e close_write --format '%w%f' "${SEGMENT_DIR}"; dolatest_file=$(ls -t ${SEGMENT_DIR}/*.mp4 | head -n 1)if [[ -f "$latest_file" ]]; thenfind ${SEGMENT_DIR} -type f -name '*.mp4' ! -name "$(basename "$latest_file")" -exec rm {} +run_yolov5_demo "$latest_file"fi
done
# 使用while循环和inotifywait命令监控SEGMENT_DIR目录,当有新的视频文件被关闭写入时,找到最新的视频文件,删除其他文件,然后调用run_yolov5_demo函数处理最新的视频文件。

该脚本实现了一个自动化的视频监控流程,通过ffmpeg实时捕获RTSP视频流并分割成5秒一段的视频文件,然后利用YOLOv5模型对这些视频片段进行图像分割处理。脚本还包括后台处理、进程PID管理、文件系统事件监控以及资源清理功能,确保在接收到中断信号时能够妥善终止进程并清理文件,有效管理存储空间。测试结果如下所示
在这里插入图片描述
由于实例分割模型的FPS较低,所以有较高的延迟,后续可以使用目标检测模型进行测试,效果应该会更好。


http://www.ppmy.cn/server/36711.html

相关文章

呆滞物料规范管理了,问题就好办了

对于制造企业来说,库存是生存和发展的重要保障,过高的库存会占用企业大量的资金和管理成本,影响企业的正常生产,然而多数中小制造企业还在用人工干预管理,如何控制呆滞物料成为仓储管理的一大难题。 什么是呆滞料 呆滞…

常见概念之事件驱动

简介 事件驱动是一种软件架构模式,其中系统的组件通过触发和响应事件来进行通信和协作。在事件驱动架构中,系统的各个组件之间通过发布和订阅事件的方式进行解耦,从而实现松散耦合和高度可扩展性。 一般工作流程 事件产生(Even…

42.乐理基础-拍号-看懂拍号的意义

到这必然是已经知道 X、Y的意思了: 然后带入数字: 然后念拍号的时候,在国内,百分之九十的地方是从下往上念,念作四二拍,还有百分之十的地方是和国外一样,从上往下念,念作二四拍&…

ComfyUI搭建和注意事项for WIN[笔记]

下载ComfyUI(GitHub - comfyanonymous/ComfyUI: The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface.) 从源码上搭建比较麻烦,一般不推荐,所以跑到release里面找一个下载。我的显卡是GeFore GTX 1050 …

Rust:foo(x)、foo(x),还是foo(x.clone())?

一、一个实际问题 用一个线性代数库的求逆矩阵函数时,让我很不爽,我必须按照下面的形式写调用代码: ...if let Some(inv_mat) try_inverse(mat.clone()) {...}...注意 try_inverse 函数的参数传递形式,函数参数是 mat.clone() 而…

ES集群设置访问密码

1 新增配置 每个集群节点都需要设置,编辑 elasticsearch.yml 文件: cd /home/isearch/es vi es-cluster-01/config/elasticsearch.yml vi es-cluster-02/config/elasticsearch.yml vi es-cluster-03/config/elasticsearch.yml # 设置启用了X-Pack安全…

使用vscode时快速生成console.log()

前言:在使用vscode开发进行调试时,我们经常要用到console.log()来调试代码,有什么好用的办法来快速生成,答案肯定是有的,下面跟随我来看一下是不是真的很好用。 安装插件JavaScript (ES6) code snippets 使用时直接按照…

洛谷P10397题解

题目描述 给定一条 std::freopen 语句&#xff0c;输出其操作的文件名称。 形式化地&#xff0c;std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…

leetCode68. 文本左右对齐

基本思路&#xff1a; leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…

C++:二叉搜索树的底层模拟实现

概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 搜索二叉树的操作&#xff1a; int a[] {8, 3, 1, 10, 6, 4, 7, 14, 13};二叉搜索树需要满足左子树比根小&#xff0c;右子树比根大&#xff0c;…

Python网络爬虫原理及实践

1 网络爬虫 网络爬虫&#xff1a;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。 网络爬虫相关技术和框架繁多&#xff0c;针对场景的不同可以选择不同的网络爬虫技术。 2 Scrapy框架&#xff08;Python&#xff09; 2.1. Scrapy架构 2.1.1. 系统…

顺序表经典算法

顺序表经典算法 1.移除元素 题目&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的…

Vue 组件参数传递:多个参数 vs 单个对象

在Vue开发中&#xff0c;我们经常需要在组件之间传递数据。当涉及到传递多个参数时&#xff0c;我们可以选择将这些参数分开传递&#xff0c;也可以将它们整合到一个对象中传递。那么在这两种方式中&#xff0c;哪种更好呢&#xff1f;让我们来探讨一下。 多个参数传递的优缺点…

淘宝商品搜索API:关键字搜索返回值详解与利用

在当今电子商务蓬勃发展的时代&#xff0c;淘宝作为中国最大的在线购物平台之一&#xff0c;拥有海量的商品信息和用户数据。为了更好地满足商家和开发者的需求&#xff0c;淘宝提供了商品搜索API&#xff0c;允许通过关键字搜索来获取商品信息。本文将详细解析淘宝商品搜索API…

3D渲染是什么?渲染100邀请码1a12

3D渲染是把3D模型转换为2D图像或动画的过程&#xff0c;涉及到多方面知识&#xff0c;这篇文章我们就来了解下。 1、3D渲染的原理 3D渲染的原理是模拟光线在三维空间中的传播和反射&#xff0c;根据物体在空间中的分布&#xff0c;计算出每个像素的颜色和亮度等数值&#xff…

Java中Maven的依赖管理

依赖介绍 是指当前项目运行所需要的jar包&#xff0c;一个项目中可以引入多个依赖 配置 在pom.xml中编写<dependencies>标签 在<dependencies>中使用<dependency>引入标签 定义坐标的groupId、rtifactId、version 点击刷新按钮、引入新坐标 例如引入下…

卷价格不如卷工艺降本增效狠抓模块规范化设计

俗话说&#xff0c;“卷价格不如卷工艺”&#xff0c;这意味着在追求成本控制和效率提升的过程中&#xff0c;蓝鹏的领导认为蓝鹏应该更注重工艺的优化和创新&#xff0c;而不仅仅是价格的竞争。而模块规范化设计正是实现这一目标的有效途径。 模块规范化设计可以提高生产效率…

【Unity】在空物体上实现 IPointerClickHandler 不起作用

感谢Unity接口IPointerClickHandler使用说明_哔哩哔哩_bilibiliUnity接口IPointerClickHandler使用说明, 视频播放量 197、弹幕量 0、点赞数 3、投硬币枚数 2、收藏人数 2、转发人数 0, 视频作者 游戏创作大陆, 作者简介 &#xff0c;相关视频&#xff1a;在Unity多场景同时编辑…

uniapp的app端推送功能,不使用unipush

1&#xff1a;推送功能使用htmlPlus实现&#xff1a;地址HTML5 API Reference (html5plus.org) 效果图&#xff1a; 代码实现&#xff1a; <template><view class"content"><view class"text-area"><button click"createMsg&q…

java设计模式 桥接

桥接模式&#xff08;Bridge Pattern&#xff09;是软件工程中的一种设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦…