基于YOLO的吸烟行为检测系统(深度学习+PySide6界面+训练数据集)

141 阅读7分钟

 

项目编号:

一,环境介绍

语言环境:Python3.8

数据库:Mysql: mysql5.7

开发技术:Yolo

开发工具:PyCharm

二,项目简介

本研究详述了一种采用深度学习技术的吸烟行为检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别吸烟行为检测。文章深入阐述了YOLOv8算法的机理,并附带了Python语言的实现代码、所需训练数据集,以及基于PySide6框架构建的用户界面(UI)。此外,系统还融合了SQLite数据库的用户管理功能,实现了一键切换YOLOv5/v6/v7/v8模型的便捷操作,以及提供了界面的自定义修改选项。本文目的是为吸烟行为检测领域的研究人员以及深度学习初学者提供实用指导和资源。

在当今社会,公共场所的健康和安全管理越来越受到重视,其中,禁止吸烟是提升公共卫生水平的重要措施之一。然而,在众多场合,传统的监管和管理手段难以做到实时、有效的监控和干预。因此,利用先进的计算机视觉技术自动检测公共场所的吸烟行为,不仅可以提高监管效率,还能在一定程度上减少人力成本,具有重要的研究意义和应用价值。近年来,吸烟行为检测领域见证了显著的技术进步,特别是在基于深度学习的目标检测算法上。随着YOLO算法系列的持续更新和优化,研究者们在提高吸烟行为检测的准确性、速度以及适用性方面取得了重要成就。以下是一些最新的研究动态和相关算法的简要介绍,展示了该领域的最新进展。

数据集:

数据集包含8520张图像,分为5950张训练图像、1720张验证图像和850张测试图像。训练图像的大量样本提供了丰富的数据来训练深度学习模型,验证图像允许我们精细调整模型参数,而测试图像用于评估模型对新数据的泛化能力。这种划分策略有助于确保模型训练的可靠性和评估的有效性

编辑

编辑

本博客的主要贡献体现在以下几个方面,旨在为吸烟行为检测技术的发展和应用提供新的视角和工具:

  1. 采用最先进的YOLOv8算法进行吸烟行为检测,并对比YOLOv7、YOLOv6、YOLOv5等算法的结果:本文首次将YOLOv8算法应用于吸烟行为检测领域,展示了其在检测速度和准确率方面相较于早期版本的显著提升。通过详细的性能对比分析,我们揭示了YOLOv8在处理复杂场景和实时检测需求上的优势,为研究社区提供了新的工具和思路。

  2. 利用PySide6实现吸烟行为检测系统:通过运用Python的PySide6库,本文介绍了一个具有友好用户界面的吸烟行为检测系统的开发过程。这一系统不仅提高了用户交互的便捷性,而且通过直观的操作界面,使得吸烟行为的监测和管理变得更加高效和实用。

3.包含登录管理功能:系统设计了登录管理功能,强化了使用过程的安全性,并为将来集成更多个性化服务提供了可能。这一设计思路考虑了系统的长期发展和用户需求的多样性,体现了作者对用户体验的深刻理解。

  1. 对YOLOv8模型的深入研究:本文不仅介绍了YOLOv8算法在吸烟行为检测中的应用,还对模型的内部机制、性能指标进行了深入分析。通过评估模型在不同环境和条件下的表现,我们为进一步的算法优化和应用拓展奠定了坚实的基础。

  2. 提供完整的数据集和代码资源包:为了促进YOLOv8及其前身版本在吸烟行为检测领域的应用和研究,本文分享了详细的数据集和完整的代码实现。这些资源的公开,不仅使得读者能够直接复现研究结果,还为后续的研究和开发工作提供了宝贵的基础材料。

三,系统展示

​编辑

​编辑

四,核心代码展示

,我们从导入必要的库开始。使用Python的os和yaml库来处理文件路径和配置文件,并引入YOLO模型,这是我们训练过程中的核心。

import os
import yaml
from ultralytics import YOLO   # 导入YOLO模型
from QtFusion.path import abs_path

然后,我们设置了数据集的路径,这通过abs_path函数完成,它将相对路径转换为绝对路径,确保无论我们在哪里运行代码,路径都是正确的。这对于跨平台的项目至关重要,因为不同操作系统的文件路径表示方式可能不同。

data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type****=****'current')   # 数据集的yaml的绝对路径
unix_style_path = data_path **. **replace(os **. **sep, '/')

# 获取目录路径
directory_path = os **. **path **. **dirname(unix_style_path)

接下来,我们读取了配置文件中的内容,并根据需要对其进行了修改。这一步是为了确保配置文件中的path键正确地指向了我们的数据集路径。

with open(data_path, 'r') as file:
data = yaml . load(file, Loader=****yaml **. *FullLoader)
# 修改path项
if 'path' in data:
data['path'] = directory_path
* # 将修改后的数据写回YAML文件

with open(data_path, 'w') as file:
yaml . safe_dump(data, file, sort_keys=****False)

然后,我们使用YOLO类来加载预训练的YOLO模型。这里我们加载了YOLOv5nu的权重,这一步骤是为了使用这些预训练的权重作为我们训练的起点,这可以大大加快训练速度并提高最终模型的性能。

workers = 1
batch = 8
data_name = "SmokingBehavior"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type****='current')   # 数据集的yaml的绝对路径
results = model . train(   # 开始训练模型
data
=data_path,   # 指定训练数据的配置文件路径
device
=
'cpu',   # 指定使用CPU进行训练
workers****=workers,   # 指定使用2个工作进程加载数据
imgsz
=640,   # 指定输入图像的大小为640x640
epochs
=100,   # 指定训练100个epoch
batch
=batch,   # 指定每个批次的大小为8
name
=****'train_v5_' ** + ** data_name   # 指定训练任务的名称
)

在准备好数据和模型之后,我们开始了训练过程。train方法被用来指定了许多重要的训练参数,如数据集路径、计算设备、工作进程数、输入图像的尺寸、批次大小以及训练周期数。

model = YOLO(abs_path('./weights/yolov8n.pt'), task****='detect')   # 加载预训练的YOLOv8模型
results2 = model . train(   # 开始训练模型
data
=data_path,   # 指定训练数据的配置文件路径
device
=
'cpu',   # 指定使用CPU进行训练
workers****=workers,   # 指定使用2个工作进程加载数据
imgsz
=640,   # 指定输入图像的大小为640x640
epochs
=100,   # 指定训练100个epoch
batch
=batch,   # 指定每个批次的大小为8
name
=****'train_v8_' ** + ** data_name   # 指定训练任务的名称
)

最后,我们重复了相同的训练步骤,但这次使用YOLOv8的权重。代码展示了如何加载另一个预训练模型YOLOv8并进行训练,这显示了如何灵活地在不同版本的YOLO模型之间进行切换。