实时吸烟检测系统:基于深度学习与YOLO模型的完整实现

引言

在公共场所吸烟不仅有害吸烟者的健康,也会影响到周围的人。为了更好地管理和监控公共场所的吸烟行为,本文介绍了一种基于深度学习的吸烟检测系统。该系统包含一个用户界面,利用YOLO(You Only Look Once)v8/v7/v6/v5模型进行吸烟检测,并提供了完整的实现步骤和代码。

系统架构
  1. 数据收集和预处理
  2. 模型训练
  3. 系统实现
  4. 用户界面设计
数据收集和预处理
数据集

为了训练一个高精度的吸烟检测模型,我们需要一个包含大量吸烟和非吸烟图片的数据集。可以使用以下途径收集数据:

  • 公开数据集:如Kaggle上的相关数据集。
  • 自定义数据集:通过互联网、监控摄像头等途径收集图片。
数据标注

使用工具如LabelImg对数据进行标注。标注内容包括吸烟者的位置(bounding box)和标签(吸烟/非吸烟)。

 
# 训练数据集文件结构示例
dataset/├── images/│   ├── train/│   └── val/└── labels/├── train/└── val/

模型训练

YOLO模型有多个版本,本文选取YOLOv8作为示范,其他版本可以通过相似方法实现。

环境配置

安装YOLOv8所需的依赖库:

pip install ultralytics

模型训练代码

使用YOLOv8进行模型训练,假设数据已经按照YOLO的格式进行预处理和标注。

from ultralytics import YOLO# 加载预训练的YOLOv8模型
model = YOLO('yolov8.yaml')# 配置训练参数
model.train(data='path/to/dataset.yaml', epochs=50, imgsz=640, batch=16)# 保存训练后的模型
model.save('best.pt')

系统实现
吸烟检测

利用训练好的模型进行吸烟检测,并实现视频流的实时检测。

 
import cv2
from ultralytics import YOLO# 加载训练好的模型
model = YOLO('best.pt')# 打开视频流
cap = cv2.VideoCapture('path/to/video.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:break# 检测吸烟行为results = model(frame)for result in results:bbox = result['bbox']label = result['label']confidence = result['confidence']# 画框和标签cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# 显示视频cv2.imshow('Smoke Detection', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

用户界面设计

用户界面采用PyQt5实现,提供视频播放和吸烟检测结果显示。

安装PyQt5
pip install PyQt5

界面代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap, QImage
import cv2
from ultralytics import YOLOclass SmokeDetectionUI(QWidget):def __init__(self):super().__init__()self.initUI()self.model = YOLO('best.pt')def initUI(self):self.setWindowTitle('Smoke Detection System')self.layout = QVBoxLayout()self.label = QLabel(self)self.layout.addWidget(self.label)self.button = QPushButton('Open Video', self)self.button.clicked.connect(self.open_video)self.layout.addWidget(self.button)self.setLayout(self.layout)def open_video(self):options = QFileDialog.Options()video_path, _ = QFileDialog.getOpenFileName(self, "Open Video", "", "All Files (*);;MP4 Files (*.mp4)", options=options)if video_path:self.detect_smoke(video_path)def detect_smoke(self, video_path):cap = cv2.VideoCapture(video_path)while cap.isOpened():ret, frame = cap.read()if not ret:breakresults = self.model(frame)for result in results:bbox = result['bbox']label = result['label']confidence = result['confidence']cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# 将frame转换为QImageheight, width, channel = frame.shapebytesPerLine = 3 * widthqImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(qImg))cv2.waitKey(1)cap.release()if __name__ == '__main__':app = QApplication(sys.argv)ex = SmokeDetectionUI()ex.show()sys.exit(app.exec_())
结论与声明

本文介绍了一个基于深度学习的吸烟检测系统,详细描述了从数据收集和标注、模型训练、系统实现到用户界面设计的全过程。通过结合YOLO模型和PyQt5,我们可以实现一个实时、精确的吸烟检测系统,为公共场所的吸烟行为管理提供有力支持。

声明:本文只是诠释一个较为简单的系统项目思路看,如有想获得远程部署+源代码+UI界面的可以联系作者。

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

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

相关文章

微信小程序(百战商城)的实战项目的首页的制作及讲解

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【人工智能】基于香橙派AIpro和昇腾AI计算芯片的面部口罩检测(详细教程)

目录 前言 1.介绍开发板 2.应用场景 3.安装操作系统 3.1 下载工具 3.2 烧录系统 3.3 系统装载 4.配置操作系统 4.1 登录系统账户 4.2 配置网络连接 4.3 查看设备网络 4.4 配置远程连接 5.部署目标检测应用 5.1 准备运行环境 5.2 模型二次训练 ​5.3 热成像温度…

JavaScript 异步编程:提升现代Web应用的性能与体验

异步概念解析 在编程领域,异步(Asynchronous)是一种允许程序继续执行而不等待某个操作完成的机制,与之相反的是同步(Synchronous),其中程序会暂停并等待每个操作完成才继续下一步。异步编程的核…

数据结构 day4

目录 思维导图: 学习内容: 1. 链表的引入 1.1 顺序表的优缺点 1.1.1 优点 1.1.2 不足 1.1.3 缺点 1.2 链表的概念 1.2.1 链式存储的线性表叫做链表 1.2.2 链表的基础概念 1.3 链表的分类 2. 单向链表 2.1 节点结构体类型 2.2 创建链表 2.…

pikachu之暴力破解

1基于表单的暴力破解 随便输入然后抓包 选中添加账号密码 添加分别添加payload1,2,的字典 开始攻击 2验证码绕过on server 和基于表单的暴力破解相比,多了一个验证码功能 这个验证码是前端的验证码(和前面那个一样选中添加账号密码…

Java小技能:多级组织机构排序并返回树结构(包含每个层级的子节点和业务数据集合)

文章目录 引言I 实体定义1.1 部门1.2 用户组织机构中间表1.3 树状DTOII 抽取组织机构排序方法2.1 树状排序方法2.2 案例III 查询条件构建3.1 根据部门进行权限控制3.2 注入风险引言 需求: 根据组织机构进行数据授权控制,例如控制船舶、船舶设备、摄像头、港区查看权限。 一…

3.设计模式--创建者模式--工厂模式

3.设计模式–创建者模式–工厂模式 3.1简单工厂和静态 工厂(不属于23中设计模式) //抽象类:定义了产品的规范,描述了产品的主要特性和功能 public interface Tea {public abstract void setName();public abstract String getNa…

Flask校验

WTForms 是一个 Python 库,用于处理和验证 Web 表单。它提供了很多功能来简化表单处理,包括字段类型、验证器、错误消息等。在 WTForms 中,validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器(Validators&#x…

kettle从入门到精通 第七十六课 ETL之kettle kettle连接hive教程

1、群里有小伙伴询问kettle连接hive的demo,今天抽点时间整理下。其实kettle连接hive和连接mysql数据库也是一样的。 1)kettle中的lib目录下放hive驱动jar,这里我使用的是kyuubi-hive-jdbc-shaded-1.9.0.jar。 2)设置hive连接参数…

pytorch学习(九)激活函数

1.pytorch常用激活函数如下: #ReLU激活函数 #Leaky ReLU激活函数 #Sigmoid激活函数 #Tanh激活函数 #Softmax激活函数 #Softplus2.代码 import torch.nn as nn import torch import numpy from torch.utils.tensorboard import SummaryWriterwriter SummaryWriter…

ModuleNotFoundError: No module named ‘lime‘,lime。 安装 LIME库

LIME LIME 的作用安装 LIME示例代码详细解释 总结 LIME(Local Interpretable Model-agnostic Explanations,局部可解释不可知模型)是一个Python库,用于解释机器学习模型的预测结果。它通过构建一个简单的、本地的可解释模型来近似…

Java 如何提取身份证中的生日

👆🏻👆🏻👆🏻关注博主,让你的代码变得更加优雅。 前言 Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率&#xf…

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决:ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市…

Unity UGUI 之EventSystem

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.EventSystem是什么? 有需要请查看手册:Unity - 手册&#xff1…

2024.7.19最新详细的VMware17.0.0安装

VM官网VMware - Delivering a Digital Foundation For Businesses。现在官网无法下载,点击会跳转到https://access.broadcom.com/default/ui/v1/signin/ 要注册一个账号: 注册登录以后,点击Please select your identity provider. - Support …

昇思25天学习打卡营第2天 | 快速入门

在快速发展的人工智能领域,深度学习已经成为数据分析和模式识别的核心技术。作为一名深度学习初学者,我有幸通过MindSpore平台进行了实战演练,从数据预处理到模型训练与测试,再到模型保存与加载,经历了一次完整的深度学…

编程语言中错误处理机制的思考

当我们编写代码时,在调用其他函数时,函数内部会发生错误: fn f() { // Error can happen when b() // returns an errora b()... }由此产生的问题是: 有时我们不想处理错误,只是从函数返回有时候我们想减轻错误有时候我们希望更…

基于SpringBoot+Vue的校园台球厅设备管理系统(带1w+文档)

基于SpringBootVue的校园台球厅设备管理系统(带1w文档) 基于SpringBootVue的校园台球厅设备管理系统(带1w文档) 本次设计任务是要设计一个校园台球厅人员与设备管理系统,这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主…

彻底卸载360安全卫士的方法

法一: 按下WindowsR键,并输入msconfig, 在“引导”选项卡中选择“安全引导”,并重新启动进入安全模式。此时,重复第一种方法“应用和功能”-“360安全卫士”-“卸载”,在弹出的对话框中残忍的拒绝它的各种令人发指的无…

go-微服务的设计概括

一、微服务到底是什么? 初学者很容易把微服务和分布式混为一谈,但其实二者之间存在非常大的差异,我个人认为主要有以下几点: 分布式主要是一种技术手段,用来保证多个相同的进程能够共同工作而不出错。采用各种复杂的…