使用YOLOv5实现实时目标检测结果保存

news2024/12/26 0:43:59

       本文将分享保存实时目标检测结果的方法,包括将目标信息逐帧保存到.txt文件中、逐帧输出检测结果图片、以及如何保存所有检测图片(包括视野中无目标的帧)。

目录

0.准备

1.目标信息保存

2.检测图片保存

3.保存所有帧


0.准备

       本文以单摄像头实时目标检测进行演示,但是对多摄像头实时检测同样适用。如何进行实时检测这里就不再重复,详细的实现步骤可以看我之前写的博客:

使用YOLOv5实现单摄像头实时目标检测_Albert_yeager的博客-CSDN博客

使用YOLOv5实现多摄像头实时目标检测_Albert_yeager的博客-CSDN博客

1.目标信息保存

       这个实际上是YOLOv5工程自带的功能,但是需要通过命令行的方式运行才能使用。在终端中运行下方指令,即可运行检测代码,并完成目标信息保存

python detect.py --weights yolov5s.pt --source 0 --save-txt

       图中 1 是调用本地摄像头进行实时目标检测(可以改成USB摄像头或IP摄像头,具体看我之前的博客);2 是在pycharm中打开终端;3 是之前提到需要运行的指令。

       有几个细节需要强调:终端运行后要点击一下实时检测窗口,按键盘上的 ‘q’ 结束检测,注意是在英文小写状态下按q,我在运行程序时输入法会自动切换到中文,这个时候按q是无效的,同时英文大写状态的Q也是无效的(因为q和Q的ASCII码值不同),当然这是代码设定的,可以改成别的字母结束。重要的是,只有通过这种方式,才能正常保存检测视频,如果直接关掉软件结束会使保存的视频文件无法打开。

       运行完成后,会在.../runs/detect 文件目录下生成结果:

        0.mp4 是实时检测的结果视频,labels中就是每帧的目标信息,以.txt格式保存(如果以60帧的速度运行,每秒就会生成60个.txt文件)。

        随便打开一个文件,可以看到是个2行5列的矩阵,这表明检测到了2个目标,每一行表示对应目标的属性,第一列是标签名(就是训练的时候的类别标签序号,这里采用官方的yolov5s.pt进行检测,0对应‘person’),后面四列依次为xcenter ycenter w h(框中心的x、y坐标,以及框的宽、高),均为归一化数值。

2.检测图片保存

       工程本身并不具有保存实时检测逐帧图片的功能,因此需要自行添加一些代码。

       首先定义图片保存路径:

####################################保存实时检测图片################################
pic_dir = str(save_dir) + '/pic'
if not os.path.exists(pic_dir):
    os.makedirs(pic_dir)
pic_path = pic_dir + '\\' + str(p.stem) + ('' if dataset.mode == 'image' else f'_{frame}')
##################################################################################

        注意添加位置为detect()函数中位置定义部分:

       然后添加帧保存代码

##############################只保存含目标的实时检测图片#################################
pic = (int(xyxy[0].item()) + int(xyxy[2].item())) / 2
if pic != 0:
    cv2.imwrite(pic_path + f'{p.stem}.jpg', im0)
else:
    im1 = cv2.imread('no.jpg', 1)
    cv2.imwrite(pic_path + f'{p.stem}.jpg', im1)
#####################################################################################

       注意添加位置为detect()函数中写结果部分:

       仍然通过命令行运行代码(直接运行也能保存图片)这样既能保存标签又能保存图片,而且两者是相对应的,方便调用。

python detect.py --weights yolov5s.pt --source 0 --save-txt

       运行后可以看到检测结果中有三个文件,标签、帧图片、实时检测视频。

       pic文件夹中是所有包含目标的帧,可以发现,pic中图片数量和labels中标签数量相同,而且是一一对应的关系。

3.保存所有帧

       上述方法只能保存包含目标的帧,这是因为保存相关的代码添加在for循环下,这就导致只有检测到目标,才会执行标签和帧图片的保存。因此如果要保存所有帧(不只是检测到目标的帧),必须将保存图片帧的代码提到for之外。

        注释掉只保存含目标图片的代码(其实留着也行,如果需要目标出现时输出图片中带检测框的话建议留着)

        添加代码:

# ##################################保存所有检测图片######################################
cv2.imwrite(pic_path + f'{p.stem}.jpg', im0)
# #####################################################################################

        注意添加位置要在for之外(原因之前讲了)

       仍然通过命令行运行代码(直接运行也能保存图片)这样既能保存标签又能保存图片。

python detect.py --weights yolov5s.pt --source 0 --save-txt

       运行后可以看到检测结果中有三个文件,标签、帧图片、实时检测视频。

       此时,pic文件夹中就包含了所有帧的图片(目标出现时不带检测框)。

       再次说明,如果需要目标出现时输出图片中带检测框的话保留2中帧保存的代码即可(因为含目标的帧保存代码在3中保存代码之后执行,但保存图片的名称相同,因此会把不带检测框的图片覆盖掉)。

求学路上,你我共勉(๑•̀ㅂ•́)و✧

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于卷积变分自动编码器的3D数据处理与重建【CVAE】

在这个项目中,我们将学习如何使用卷积变分自动编码器 (CVAE) 来处理和重建 3D 湍流数据。 我们使用计算流体动力学 (CFD) 方法生成 3D 湍流立方体,每个 3D 立方体沿着三个速度分量携带物理信息(与图像数据类似,被视为单独的通道&…

elk中kibana使用

1.前言 kibana是一款作为elasticsearch可视化的一款软件,将elasticsearch中的数据以可视化的状态展现出来,kibana也提供了查询、统计、修改索引等功能 2.kibana使用 索引管理 在索引管理中,可以看到所有索引的状态、运行状况、主分片、副本…

76-基于51单片机家庭红外人体检测震动报警系统(程序+原理图+元件清单全套资料)...

资料编号:076 功能介绍:采用51单片机作为主控CPU,采用红外接触传感器采集当前是否有人,采用震动传感器采集当前是否有震动,起到家庭防盗效果,采用按键设置当前布防/撤防状态,布防状态下&#xf…

Binder系列--获取ServiceManager

获取ServiceManager hongxi.zhu 2023-7-1 以SurfaceFlinger为例&#xff0c;分析客户端进程如何获取ServiceManager代理服务对象 主要流程 SurfaceFlinger中获取SM服务 frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp // publish surface flingersp<…

适合初中生用的台灯有哪些?这样的台灯最适合学生!

对于学生而言台灯主要的点就是能够护眼、缓解眼睛疲劳&#xff0c;因为学生需要长时间的学习和用眼而且可以休息放松的时间比较少&#xff0c;导致眼睛过度疲劳&#xff0c;这也是为什么这么多中小学生近视的原因。那么我们应该怎么样选好一款台灯呢&#xff1f; 要想台灯能护眼…

Linux系统之dnf包管理器的基本使用

Linux系统之dnf包管理器的基本使用 一、dnf工具介绍1. dnf工具简介2. dnf的功能 二、DNF的安装1. 检查本地操作系统版本2. 安装epel3. 检查本地yum仓库状态4. 安装dnf包 三、dnf的使用帮助1. 查看dnf版本2. 查看dnf命令的帮助信息3. dnf命令的选项解释 四、dnf命令的基本使用1.…

浅谈Unicode与UTF-8

我们都知道&#xff0c;在Golang中字符都是以UTF-8编码的形式存储&#xff0c;当我们使用range遍历字符串的时候&#xff0c;go会为我们取出一个字符(rune)而不是一个byte&#xff0c;例如以下例子&#xff0c;我们使用range迭代取出第一个字符“你”&#xff0c;并且打印输出取…

TechSmith Camtasia for Mac 2023.0.3 中文破解版 Win/Mac上强大的屏幕录像工具

Camtasia 是Win/Mac上最强大的屏幕录像工具之一&#xff0c;该软件集成了视频录制、编辑、导出等一系列功能&#xff0c;支持鼠标光标样式、草绘示意插图、冰冻区域等实用的功能&#xff0c;还具有移动客户端让你录制视频&#xff0c;然后通过无线传输到 Camtasia 中进行编辑&a…

判断数组中所有元素是否均为实数对象 numpy.isrealobj()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中所有元素 是否均为实数对象 numpy.isrealobj() [太阳]选择题 请问关于以下代码的说法错误的是&#xff1f; import numpy as np a np.array([1, 2, 3]) b np.array([1, 1 2j, …

剑指 Offer 19: 正则表达式匹配

可能存在一个现象&#xff0c;就是aaab&#xff0c;然后a*ab&#xff0c;那么这样*只能代表一个a。 这道题可以使用动态规划的方式来解决。 这道题就是状态的判断&#xff1a;是否两个都为0&#xff1f;只有两个都为0才为true&#xff0c;并且判断*&#xff0c;有两个情况&…

Docker WebRTC容器部署方案

文章目录 WebRTC简介WebRTC Docker容器部署优势方案&#xff08;mpromonet/webrtc-streamer&#xff09;步骤 WebRTC简介 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种开放的实时通信技术&#xff0c;它允许浏览器之间进行音频、视频和数据的实时传输。W…

从古代八卦探究计算机的八进制

八进制&#xff0c;即八卦&#xff0c;是中国古代哲学体系中非常重要的一个概念&#xff0c;它被广泛应用于易经、道家、儒家等诸多领域。随着计算机科学的快速发展&#xff0c;人们开始思考&#xff1a;八进制是否可以应用到计算机上&#xff1f; 一、什么是八进制&#xff1…

Javaee技术目的总结

一.前节回顾 在前一节中&#xff0c;我们了解了&#xff1a; 1.将中央控制器中的Action容器&#xff0c;变成可控制! 2.针对于反射调用业务代码&#xff0c;最终页面跳转 3.jsp页面参数传递后台的代码优化字段太多有影响&#xff01; 二.项目部署前期准备工作 1.项目运行环境…

c语言 va_start/va_end函数

c语言 va_satrt和va_end函数介绍 头文件&#xff1a;#include <stdarg.h> 函数原型&#xff1a;void va_start(va_list ap, last) 和 void va_end(va_list ap); 可以被参数数量和类型可变的函数调用。 可变参数用…&#xff08;3个省略号表示可变参数列表&#xff09; …

深入理解 http 反向代理

要理解什么是 反向代理(reverse proxy) , 自然你得先知道什么是 正向代理(forward proxy). 另外需要说的是, 一般提到反向代理, 通常是指 http 反向代理, 但反向代理的范围可以更大, 比如 tcp 反向代理, 在这里, 不打算讨论 tcp 之类的反向代理, 当文中说到反向代理时, 指的就是…

C++day5

2、 #include <iostream> using namespace std; static int blood 10000; class hero { protected:string name;int hp;int attack; public:hero(){}//无参构造hero(string name,int hp,int attack):name(name),hp(hp),attack(attack){}//有参构造virtual void Atk(){b…

使用supervisor管理进程

写目录 一、supervisor简介二 、supervisor安装2.1下载supervisor2.2配置文件详解2.3把squid服务加入到supervisor管理当中 一、supervisor简介 supervisor是Python开发的c/s服务&#xff0c;是Linux系统下的进程管理工具。可以监听、启动、停止、重启一个或多个进程用supervi…

卡尔曼滤波原理和使用

随着传感技术&#xff0c;机器人&#xff0c;自动驾驶等不断发展&#xff0c;对控制系统的精度以及稳定性要求越来越高。卡尔曼滤波作为一种状态最优估计方法&#xff0c;应用也越来越普遍、 对于Kalman Filter的理解&#xff0c;用过都知道“黄金五条”公式&#xff0c;且通过…

pytorch实战13:基于pytorch实现YOLOv1(长长文)

基于pytorch实现YOLOv1&#xff08;长长文&#xff09; 前言 ​ 本篇文章的目的是记录自己实现yolo v1的过程&#xff0c;在此过程中&#xff0c;参考了许多开源的代码和博客&#xff0c;赞美大佬们。 参考文献和代码 YOLO v1代码参考&#xff1a;&#xff08;读书人的事情&…

华为OD机试真题 Python 实现【猜字谜】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述补充说明:四、解题思路五、Python算法源码六、效果展示1、输入2、输出3、说明一、题目描述 小王设计了一人简单的清字谈游戏,游戏的迷面是一人错误的单词,比如nesw,玩家需要猜出谈底库中正确的单词。猜中的要求如 对于某个谜面和…