【数据集】【YOLO】【目标检测】抽烟识别数据集 6953 张,YOLO/VOC格式标注,吸烟检测!

数据集介绍

【数据集】抽烟识别数据集 6953 张,目标检测,包含YOLO/VOC格式标注。数据集中包含1种分类:“smoking”。数据集来自国内外图片网站和视频截图。检测范围园区吸烟检测、禁烟区吸烟检测、监控吸烟检测、无人机吸烟检测等

主页私聊~主页私聊~

一、数据概述

抽烟识别的重要性

  1. 公共场所管理:在公共场所如商场、车站、机场等,抽烟行为不仅影响空气质量,还可能引发火灾等安全隐患。通过抽烟识别算法,可以实时监控并制止抽烟行为,维护公共秩序和卫生。

  2. 工业生产安全:在工厂车间、矿山等高危环境中,抽烟行为可能引发严重的安全事故。因此,通过抽烟识别算法的应用,可以有效保障生产安全,降低事故风险。

  3. 特殊场所监管:如学校、医院等场所,抽烟行为可能对学生和患者的健康造成不良影响。通过抽烟识别算法,可以及时发现并制止抽烟行为,保护特殊群体的健康

实际应用效果

  1. 高效性:抽烟识别算法能够自动化处理大量数据,提高监测效率。

  2. 准确性:基于深度学习的算法能够从复杂的背景中准确识别出抽烟行为,降低误报率。

  3. 实时性:算法支持实时数据处理和分析,能够快速响应抽烟事件,及时采取措施。

  4. 灵活性:系统可以根据实际需求进行灵活部署,适用于不同规模和类型的监测场景。

该数据集含有6953张图片,包含Pascal VOC XML格式和YOLO TXT格式,用于训练和测试园区吸烟检测、禁烟区吸烟检测、监控视角下吸烟检测、无人机视角下吸烟检测。图片格式为jpg格式,标注格式分别为:

YOLO:txt

VOC:xml

数据集均为手工标注,保证标注精确度。

二、数据集文件结构

person_smoke/

——Annotations/

——images/

——labels/

——data.yaml

Annotations文件夹为Pascal VOC格式的XML文件 ,images文件夹为jpg格式的数据样本,labels文件夹是YOLO格式的TXT文件,data.yaml是数据集配置文件,包含抽烟识别的目标分类和加载路径。

三、数据集适用范围 

  • 目标检测场景
  • yolo训练模型或其他模型
  • 园区吸烟检测、禁烟区吸烟检测、监控视角下吸烟检测、无人机视角下吸烟检测
  • 智慧园区、火情预警、消防安全预警

四、数据集标注结果 

1、数据集内容 

  1. 多角度场景:包含行人视角、俯视视角;
  2. 标注内容:names: ['smoking'],总计1个分类。
  3. 图片总量:6953张图片数据;
  4. 标注类型:含有Pascal VOC XML格式和yolo TXT格式;

五、训练过程

1、导入训练数据

下载YOLOv8项目压缩包,解压在任意本地workspace文件夹中。

下载YOLOv8预训练模型,导入到ultralytics-main项目根目录下。

ultralytics-main项目根目录下,创建data文件夹,并在data文件夹下创建子文件夹:Annotations、images、imageSets、labels,其中,将pascal VOC格式的XML文件手动导入到Annotations文件夹中,将JPG格式的图像数据导入到images文件夹中,imageSets和labels两个文件夹不导入数据。

data目录结构如下:

data/

——Annotations/   //存放xml文件

——images/          //存放jpg图像

——imageSets/

——labels/

2、数据分割

首先在ultralytics-main目录下创建一个split_train_val.py文件,运行文件之后会在imageSets文件夹下将数据集划分为训练集train.txt、验证集val.txt、测试集test.txt,里面存放的就是用于训练、验证、测试的图片名称。

import os
import randomtrainval_percent = 0.9
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w')
ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')for i in list:name = total_xml[i][:-4] + '\n'if i in trainval:ftrainval.write(name)if i in train:ftrain.write(name)else:fval.write(name)else:ftest.write(name)ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

3、数据集格式化处理

这段代码是用于处理图像标注数据,将其从XML格式(通常用于Pascal VOC数据集)转换为YOLO格式。

convert_annotation函数

  • 这个函数读取一个图像的XML标注文件,将其转换为YOLO格式的文本文件。

  • 它打开XML文件,解析树结构,提取图像的宽度和高度。

  • 然后,它遍历每个目标对象(object),检查其类别是否在classes列表中,并忽略标注为困难(difficult)的对象。

  • 对于每个有效的对象,它提取边界框坐标,进行必要的越界修正,然后调用convert函数将坐标转换为YOLO格式。

  • 最后,它将类别ID和归一化后的边界框坐标写入一个新的文本文件。

import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ['smoking'] # 根据标签名称填写类别
abs_path = os.getcwd()
print(abs_path)def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open('data/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
for image_set in sets:if not os.path.exists('data/labels/'):os.makedirs('data/labels/')image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()list_file = open('data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(abs_path + '/data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

4、修改数据集配置文件

train: ../train/images
val: ../valid/images
test: ../test/imagesnc: 1
names: ['smoking']

5、执行命令

执行train.py

model = YOLO('yolov8s.pt')
results = model.train(data='data.yaml', epochs=200, imgsz=640, batch=16, workers=0)

也可以在终端执行下述命令:

yolo train data=data.yaml model=yolov8s.pt epochs=200 imgsz=640 batch=16 workers=0 device=0

六、获取数据集 

戳我头像获取数据,或者主页私聊博主哈~

基于QT的目标检测可视化界面

一、环境配置

# 安装torch环境
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装PySide6依赖项
pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装opencv-python依赖项
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

二、使用说明

​​

界面功能介绍:

  • 原视频/图片区:上半部分左边区域为原视频/图片展示区;
  • 检测区:上半部分右边区域为检测结果输出展示区;
  • 文本框:打印输出操作日志;
  • 加载模型:下拉框绑定本地文件路径,按钮加载路径下的模型文件;
  • 置信度阈值:自定义检测区的置信度阈值;
  • 文件上传:选择目标文件;
  • 开始检测:执行检测程序;
  • 停止:终止检测程序;

 三、预测效果展示

1、图片检测

​​

切换置信度再次执行:

​​

2、视频检测 

​​

四、前端代码 

class MyWindow(QtWidgets.QMainWindow):def __init__(self):super().__init__()self.init_gui()self.model = Noneself.timer = QtCore.QTimer()self.timer1 = QtCore.QTimer()self.cap = Noneself.video = Noneself.file_path = Noneself.base_name = Noneself.timer1.timeout.connect(self.video_show)def init_gui(self):self.folder_path = "model_file"  # 自定义修改:设置文件夹路径self.setFixedSize(1300, 650)self.setWindowTitle('目标检测')  # 自定义修改:设置窗口名称self.setWindowIcon(QIcon("111.jpg"))  # 自定义修改:设置窗口图标central_widget = QtWidgets.QWidget(self)self.setCentralWidget(central_widget)main_layout = QtWidgets.QVBoxLayout(central_widget)# 界面上半部分: 视频框topLayout = QtWidgets.QHBoxLayout()self.oriVideoLabel = QtWidgets.QLabel(self)self.detectlabel = QtWidgets.QLabel(self)self.oriVideoLabel.setFixedSize(530, 400)self.detectlabel.setFixedSize(530, 400)self.oriVideoLabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top:75px;')self.detectlabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top: 75px;')# 960 540  1920 960topLayout.addWidget(self.oriVideoLabel)topLayout.addWidget(self.detectlabel)main_layout.addLayout(topLayout)

五、代码获取

YOLO可视化界面

戳我头像获取数据,或者主页私聊博主哈~

注:以上均为原创内容,转载请私聊!!!

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

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

相关文章

故事121

22年的十月份,在上海工作了三年多的我回到了老家。 前端,20年二本毕业的,当时在上海看老家的招聘信息,感觉很棒,很心动。又因为公司在大裁员,刚刚好在最后一轮裁员的时候,被裁了,拿了…

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…

WebSocket实现消息实时推送

文章目录 websocket介绍特点工作原理 用websocket实现实时推送引入依赖WebSocket 函数定义变量声明初始化 WebSocket 连接WebSocket 连接的初始化和事件处理连接打开事件接收消息处理连接关闭和重连机制心跳机制使用 WebSocket代码完整显示 websocket介绍 WebSocket 是一种网络…

视频制作与剪辑怎么学,零基础入门视频剪辑和制作

视频制作与剪辑是一门充满创意与挑战的艺术形式,对于零基础的学习者来说,没选对软件不了解剪辑步骤,入门可能会显得有些棘手。接下来,我们将一同探讨如何开启视频剪辑与制作之旅,让新手从零基础入门,逐步迈…

浅谈C++ MFC

一、基本介绍 C MFC(Microsoft Foundation Classes)是微软公司提供的一个C类库,用于在Windows操作系统上快速开发应用程序。MFC库封装了Win32 API的复杂性,提供了一个面向对象的框架,使得开发者可以更容易地创建GUI&am…

数据仓库之 Atlas 血缘分析:揭示数据流奥秘

Atlas血缘分析在数据仓库中的实战案例 在数据仓库领域,数据血缘分析是一个重要的环节。血缘分析通过确定数据源之间的关系,以及数据在处理过程中的变化,帮助我们更好地理解数据生成的过程,提高数据的可靠性和准确性。在这篇文章中…

[Element] el-table修改滚动条上部分的背景色

[Element] el-table修改滚动条上部分的背景色 ::v-deep .el-table__cell .gutter {background: red;}

深入理解Java反射机制

Java反射(Reflection)是Java语言提供的一种强大工具,允许程序在运行时动态地获取和操作类的信息。这一机制为Java程序带来了极大的灵活性和扩展性,使得程序可以在编译时无法确定的情况下,根据需求动态加载类、调用方法…

科技查新在医药健康领域的应用

科技查新,作为一项通过文献检索和对比分析来评判科技项目新颖性的信息咨询活动,在医药健康领域扮演着至关重要的角色。它不仅提高了医学信息资源的利用率,还强化了社会的情报意识和技术创新意识,推动了医药科研工作乃至整个社会经…

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

基于物联网设计的地下煤矿安全监测与预警

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ5传感器【4】DHT11传感器【5】红外热释电人体检…

golang分布式缓存项目 Day 1

注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 LRU缓存淘汰策略 三种缓存淘汰策略 FIFO(First In, First Out)先进先出 原理&…

Pr 视频过渡:沉浸式视频 - VR 默比乌斯缩放

效果面板/视频过渡/沉浸式视频/VR 默比乌斯缩放 Video Transitions/Immersive Video/VR Mobius Zoom VR 默比乌斯缩放 VR Mobius Zoom用于 VR 视频中的缩放式场景切换,通过缩小或放大的渐变效果在两个场景之间平滑过渡。 自动 VR 属性 Auto VR Properties 默认勾选…

【物联网技术】ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——TCP数据透传

前言:完成ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——实现TCP数据透传 AP模式,通俗来说模块可以发出一个WIFI热点提供给电脑/手机连接。 TCP服务端,通俗来说就是模块/单片机作为服务器,可以接收多个客户通道的连接。 本…

C++学习笔记----10、模块、头文件及各种主题(二)---- 预处理指令

使用#include预处理指令来包含头文件的内容。还有一些预处理指令。下面列表展示了一些常用的预处理指令: 预处理指令 功能 通用场景 #include [file] [file]文件名的内容插入到指令位置的代码中 几乎总是用于包含头文件以便代码可以使用定义在其它地方的功能 …

华为实时视频使用FLV播放RTSP流

import flvjs from ‘flv.js’; 安装flv <video style"width:100%;height:100%;" ref"videoHWRef" ></video>// src 华为rtsp流 rtsp://admin:Huaweivideo10.10.8.151:554/xxx/trackID1// url 需要后端提供视频源地址playVideo() {if (fl…

【系统架构设计师】高分论文:论企业应用系统的分层架构风格

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 2021 年 12 月,本人所在的公司承担了 “某国际贸易综合服务及经济案事件预警平台”(下文简称 “预答平台”)的升级改造工作。我担任本项目的系统架构师,负责该预答平台开发的管理、规划、设计工作…

【华为机试题】光伏场地建设规划 [Python]

题目 代码 class Solution:def func(self, input_args, area_list):count 0for i in range(input_args[0] - input_args[2] 1):for j in range(input_args[1] - input_args[2] 1):count 1 if self.area_compute(area_list,i,j,input_args[2],input_args[3]) else 0print(c…

备考25年二建,最好这样选专业!

2025年的二建备考已经开始了&#xff0c;很多考生在纠结报考哪个专业&#xff0c;二级建造师各专业难度如何&#xff1f;哪个专业含金量更高&#xff1f; 今天就带大家了解一下这六大专业&#xff0c;一起来看~ ​建筑专业 考核方向&#xff1a;建筑工程技术要求、建筑工程专…

【前端知识】es6基础语法介绍

ES6基础语法介绍 概述1. 变量声明&#xff1a;let 和 const2. 模板字符串3. 解构赋值4. 箭头函数5. 默认参数值6. 类&#xff08;Classes&#xff09;7. 模块8. 扩展运算符&#xff08;Spread Operator&#xff09;9. 对象字面量增强10. 符号&#xff08;Symbols&#xff09;11…