当前位置:   article > 正文

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

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

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

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

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

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

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

 
  1. # 训练数据集文件结构示例
  2. dataset/
  3. ├── images/
  4. │ ├── train/
  5. │ └── val/
  6. └── labels/
  7. ├── train/
  8. └── val/

模型训练

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

环境配置

安装YOLOv8所需的依赖库:

pip install ultralytics

模型训练代码

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

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

系统实现
吸烟检测

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

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

用户界面设计

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

安装PyQt5
pip install PyQt5

界面代码
  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
  3. from PyQt5.QtGui import QPixmap, QImage
  4. import cv2
  5. from ultralytics import YOLO
  6. class SmokeDetectionUI(QWidget):
  7. def __init__(self):
  8. super().__init__()
  9. self.initUI()
  10. self.model = YOLO('best.pt')
  11. def initUI(self):
  12. self.setWindowTitle('Smoke Detection System')
  13. self.layout = QVBoxLayout()
  14. self.label = QLabel(self)
  15. self.layout.addWidget(self.label)
  16. self.button = QPushButton('Open Video', self)
  17. self.button.clicked.connect(self.open_video)
  18. self.layout.addWidget(self.button)
  19. self.setLayout(self.layout)
  20. def open_video(self):
  21. options = QFileDialog.Options()
  22. video_path, _ = QFileDialog.getOpenFileName(self, "Open Video", "", "All Files (*);;MP4 Files (*.mp4)", options=options)
  23. if video_path:
  24. self.detect_smoke(video_path)
  25. def detect_smoke(self, video_path):
  26. cap = cv2.VideoCapture(video_path)
  27. while cap.isOpened():
  28. ret, frame = cap.read()
  29. if not ret:
  30. break
  31. results = self.model(frame)
  32. for result in results:
  33. bbox = result['bbox']
  34. label = result['label']
  35. confidence = result['confidence']
  36. cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)
  37. cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
  38. # 将frame转换为QImage
  39. height, width, channel = frame.shape
  40. bytesPerLine = 3 * width
  41. qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
  42. self.label.setPixmap(QPixmap.fromImage(qImg))
  43. cv2.waitKey(1)
  44. cap.release()
  45. if __name__ == '__main__':
  46. app = QApplication(sys.argv)
  47. ex = SmokeDetectionUI()
  48. ex.show()
  49. sys.exit(app.exec_())
结论与声明

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/856183
推荐阅读
相关标签
  

闽ICP备14008679号