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

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

#!/bin/bash
# 设置脚本使用的shell解释器为bash

SEGMENT_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.txt
    rm -f ${SEGMENT_DIR}/*.mp4
    exit
}
# 定义一个名为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}"; do
    latest_file=$(ls -t ${SEGMENT_DIR}/*.mp4 | head -n 1)
    if [[ -f "$latest_file" ]]; then
        find ${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较低,所以有较高的延迟,后续可以使用目标检测模型进行测试,效果应该会更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/588721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase开发者大会实录-陈文光:AI时代需要怎样的数据处理技术?

本文来自2024 OceanBase开发者大会,清华大学教授、蚂蚁技术研究院院长陈文光的演讲实录—《AI 时代的数据处理技术》。完整视频回看,请点击这里>> 大家好,我是清华大学、蚂蚁技术研究院陈文光,今天为大家带来《AI 时…

JUC线程

进程和线程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。 线程(英语:thread)是操作系统能够进行运算调度…

python基础语法--函数

一、函数概述 函数就是执行特定任务完成特定功能的一段代码。可以在程序中将某一段代码定义成函数,并指定一个函数名和接收的输入(参数),这样就可以在程序的其他地方通过函数名多次调用并执行该段代码了。 每次调用执行后&#…

Ubuntu如何安装Calicoctl

在 Ubuntu 上安装 Calico 通常涉及几个步骤。以下是一般的安装过程: 安装 etcd 或使用 Kubernetes 集群的现有 etcd: 如果你使用的是独立的 etcd,请确保 etcd 在可访问的地方运行。如果你使用的是 Kubernetes 集群,通常会有一个 e…

用户中心(终)

文章目录 Ant Design Pro(Umi 框架)ProComponents 高级表单待优化点 todo注册逻辑增加注册页面页面重定向问题注册页面 **获取用户的登录态****前端用户管理功能** Ant Design Pro(Umi 框架) app.tsx 项目全局入口文件&#xff0c…

【车载开发系列】MCAL基本概念

【车载开发系列】MCAL基本概念 【车载开发系列】MCAL基本概念 【车载开发系列】MCAL基本概念一. BSW与MCAL1)BSW-服务层2)BSW-ECU抽象层3)MCAL驱动层 二. MCAL基本概念三. MCAL组成1)PORT2)DIO3)ADC4&#…

排序算法——直接插入排序

直接插入排序与希尔排序是插入排序的两个分支,直接插入排序是较为简单的一种排序算法,同时也是众多算法实现或优化的基石。 前提: 插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数&…

BigKey的危害

1.2.1、BigKey的危害 网络阻塞 对BigKey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例,乃至所在物理机变慢 数据倾斜 BigKey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡 Redis阻…

nginx--自定义日志跳转长连接文件缓存状态页

自定义日志服务 [rootlocalhost ~]# cat /apps/nginx/conf/conf.d/pc.conf server {listen 80;server_name www.fxq.com;error_log /data/nginx/logs/fxq-error.log info;access_log /data/nginx/logs/fxq-access.log main;location / {root /data/nginx/html/pc;index index…

C/C++ BM33 二叉树的镜像

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 总结 前言 镜像说的好听,无非就是换下节点。 题目 操作给定的二叉树,将其变换为源二叉树的镜像。 数据范围:二叉树的节点数 0 ≤ n ≤ 1000 0≤n≤1000 0≤n≤1000, 二叉树每…

ThreeJS:本地部署官网文档与案例

部署方式 部署之前请确保已经配置好node.js环境。 1. 下载ThreeJS源码 ThreeJS的GitHub地址:GitHub - mrdoob/three.js: JavaScript 3D Library.,可以简单查看ThreeJS当前版本:r164, 我们可以选择对应的版本(此处为r1…

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求,梳理需要用到的功能, 电量检测:ADC 按键:IO input外部中断 LED:IO output 温度检测:ADC 电机控制:IO output 打印通讯:SPI …

淘宝/天猫商品评论API接口:用户反馈实时追踪与商家决策优化

一、引言 在电子商务迅猛发展的今天,淘宝/天猫作为中国最大的电子商务平台之一,为众多商家提供了广阔的舞台。然而,面对日益激烈的市场竞争,如何精准把握用户需求、优化产品策略、提升服务质量,成为摆在众多商家面前的…

Linux环境与历史和Xshell安装与使用

各位大佬好 ,这里是阿川的博客 , 祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Linux是一个操作系统.全称叫Linux is not UNIX。由…

【C++】哈希的应用---位图

目录 1、引入 2、位图的概念 3、位图的实现 ①框架的搭建 ②设置存在 ③设置不存在 ④检查存在 ​4、位图计算出现的次数 5、完整代码 1、引入 我们可以看一道面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数…

通过iMock学习Jvmsandbox

Jvm-sandbox Jvm-sandbox基于Jvm-sandbox的Mock平台iMockiMock的工程学习iMock怎么写的(sandbox的module应该怎么写) Jvm-sandbox Jvm-sandbox是阿里开源的一款java的沙箱,看网上的介绍在沙箱里你可以做你能想到的奇妙的事情。 基于Jvm-san…

智慧旅游开启智慧生活,科技让旅行更轻松:通过智慧旅游,旅行者可以享受到更加便捷、高效的旅行服务,让旅行成为生活的一部分

一、引言 随着科技的飞速发展,我们生活的方方面面都在经历着前所未有的变革。旅游业作为服务业的重要组成部分,也在这场变革中迎来了前所未有的发展机遇。智慧旅游,作为科技与旅游深度融合的产物,正以其独特的魅力,引…

瑞_23种设计模式_解释器模式

文章目录 1 解释器模式(Interpreter Pattern)1.1 介绍1.2 概述1.2.1 文法(语法)规则1.2.2 抽象语法树 1.3 解释器模式的结构1.4 解释器模式的优缺点1.5 解释器模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代…

信息时代的智慧导航:高效搜索、信息筛选与信任构建的全面指南!

文章目录 一、高效搜索:快速定位目标信息的秘诀二、信息筛选:去伪存真,找到有价值的信息三、信任构建:深入了解与直接沟通《搜索之道:信息素养与终身学习的新引擎》亮点内容简介目录获取方式 随着科技的飞速发展&#…

小白总结uniapp微信小程序跨域问题的解决(前端)

前言:本人前端小白一枚,在B站听了一个很不错的视频,关于uniapp Vue3超详细教程,有需要的小伙伴可以去听,受益匪浅,下面是该博主的链接: gitee源码地址:https://gitee.com/qingnian8/…