当前位置: 首页 > article >正文

yolov5明厨亮灶检测系统,厨师帽-口罩检测,带pyqt界面-可检测图片和视频,支持中文标签,检测接口已封装好并优化,代码可读性强!

明厨亮灶检测系统是一个专门用于餐饮业厨房安全监管的智能系统。该系统结合了先进的计算机视觉技术,尤其是使用YOLOv5模型进行厨师帽和口罩的实时检测,并通过PyQt5构建了一个用户友好的图形界面。该系统不仅能够检测图片和视频中的目标,而且支持中文标签,方便国内用户的使用。以下是对此项目的详细介绍。

项目背景

随着食品安全和卫生标准的不断提高,餐饮业对厨房工作人员的着装要求也越来越严格。佩戴厨师帽和口罩不仅是基本的职业规范,更是防止食品污染的重要措施。因此,开发一套能够自动检测厨房工作人员是否佩戴厨师帽和口罩的系统,对于提高食品安全标准具有重要意义。

项目目标

  • 实时检测:通过YOLOv5模型实时检测视频流或图片中的厨师帽和口罩。
  • 中文标签支持:系统支持中文标签,便于国内用户理解和使用。
  • 用户界面:使用PyQt5构建图形用户界面,提供友好的操作体验。
  • 多功能:支持图片和视频检测,满足不同场景下的需求。

关键功能

  1. 厨师帽和口罩检测:利用YOLOv5模型实时检测图像中的厨师帽和口罩。
  2. 中文标签显示:检测结果以中文标签形式显示,便于用户理解。
  3. 图片检测:支持从本地上传图片进行检测。
  4. 视频检测:支持实时视频流或本地视频文件的检测。
  5. 结果可视化:在检测结果上绘制边界框和标签,直观展示检测对象的位置和类别。
  6. 用户界面:通过PyQt5构建的图形界面,用户可以方便地操作和查看检测结果。

技术栈

  • 目标检测模型:YOLOv5
  • 图形用户界面:PyQt5
  • 图像处理:OpenCV
  • 编程语言:Python

关键代码示例

1. 安装依赖

确保安装了所有必要的库:

1pip install opencv-python torch torchvision pyqt5 numpy
2pip install ultralytics  # 用于YOLOv5的最新版本
2. 导入库
1import sys
2import cv2
3import numpy as np
4import torch
5from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QFileDialog
6from PyQt5.QtCore import QTimer
7from PyQt5.QtGui import QImage, QPixmap
8from ultralytics import YOLO  # 使用YOLOv5的最新版本
3. 初始化YOLOv5模型

假设YOLOv5模型的权重文件位于weights/yolov5.pt

1device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
2yolo_model = YOLO('weights/yolov5.pt').to(device)
4. 创建GUI

创建一个简单的GUI来显示视频流和检测结果。

1class KitchenSafetyWindow(QMainWindow):
2    def __init__(self):
3        super().__init__()
4        self.initUI()
5
6    def initUI(self):
7        self.setWindowTitle('明厨亮灶检测系统')
8        self.setGeometry(100, 100, 800, 600)
9        
10        layout = QVBoxLayout()
11        self.label = QLabel(self)
12        layout.addWidget(self.label)
13        
14        button = QPushButton('打开图片', self)
15        button.clicked.connect(self.open_image)
16        layout.addWidget(button)
17        
18        button = QPushButton('打开视频', self)
19        button.clicked.connect(self.open_video)
20        layout.addWidget(button)
21        
22        container = QWidget()
23        container.setLayout(layout)
24        self.setCentralWidget(container)
25    
26    def open_image(self):
27        options = QFileDialog.Options()
28        file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Images (*.png *.jpg *.jpeg);;All Files (*)", options=options)
29        if file_name:
30            self.detect_image(file_name)
31    
32    def detect_image(self, image_path):
33        img = cv2.imread(image_path)
34        results = yolo_model(img)
35        self.draw_boxes(img, results)
36        self.display_results(img)
37    
38    def open_video(self):
39        options = QFileDialog.Options()
40        file_name, _ = QFileDialog.getOpenFileName(self, "选择视频", "", "Videos (*.mp4 *.avi);;All Files (*)", options=options)
41        if file_name:
42            self.detect_video(file_name)
43    
44    def detect_video(self, video_path):
45        self.capture = cv2.VideoCapture(video_path)
46        self.timer = QTimer()
47        self.timer.timeout.connect(self.update_frame)
48        self.timer.start(20)  # 每50毫秒更新一次画面
49    
50    def update_frame(self):
51        ret, frame = self.capture.read()
52        if ret:
53            results = yolo_model(frame)
54            self.draw_boxes(frame, results)
55            self.display_results(frame)
56    
57    def draw_boxes(self, frame, results):
58        for result in results:
59            boxes = result.boxes.cpu().numpy()
60            for box in boxes:
61                x1, y1, x2, y2 = [int(i) for i in box[:4]]
62                label = box[5]
63                cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
64                cv2.putText(frame, f"{label}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36, 255, 12), 2)
65    
66    def display_results(self, frame):
67        height, width, channel = frame.shape
68        bytesPerLine = 3 * width
69        qImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_BGR888)
70        pixmap = QPixmap.fromImage(qImg)
71        self.label.setPixmap(pixmap)
72
73if __name__ == '__main__':
74    app = QApplication(sys.argv)
75    window = KitchenSafetyWindow()
76    window.show()
77    sys.exit(app.exec_())

应用场景

  • 餐饮业厨房:实时监控厨房工作人员是否正确佩戴厨师帽和口罩,保障食品安全。
  • 食品安全检查:帮助监管部门进行食品安全检查,提高检查效率。
  • 培训教育:用于培训厨房工作人员正确的着装规范,提高职业素养。

结论

明厨亮灶检测系统通过结合YOLOv5模型和PyQt5界面,提供了一个功能齐全且易于使用的工具,能够实时检测厨师帽和口罩,支持中文标签,并且适用于图片和视频检测。该系统不仅能够帮助餐饮业提高食品安全标准,还能提升厨房工作人员的职业形象。随着技术的不断发展和完善,这样的系统将在食品安全和卫生管理中发挥更加重要的作用。


http://www.kler.cn/a/305104.html

相关文章:

  • Rust 整数
  • 单例模式详解:如何优雅地实现线程安全的单例
  • Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
  • 第二天python笔记
  • vue elementui el-dropdown-item设置@click无效的解决方案
  • Python教程笔记(1)
  • ​招​银​网​络​​大​疆​​元​象​一​面​
  • 河海大学《2020年+2021年827自动控制原理真题》 (完整版)
  • Netty权威指南:Netty总结-Netty线程模型与架构剖析
  • 如何正确使用MMPI量表进行测试?
  • 关于 -fsanitize=address 的使用注意事项
  • 链路聚合(Link Aggregation)
  • 分享一个爬虫数据挖掘 农村产权交易数据可视化平台 数据分析大数据 Java、python双版(源码、调试、LW、开题、PPT)
  • Linux内核编译并移植至ARM平台
  • 【数据结构和算法实践-树-LeetCode113-路径总和Ⅱ】
  • 【数据结构】6——图1,概念
  • 【nginx】ngx_http_proxy_connect_module 正向代理
  • 『功能项目』C#拓展 - 优化冗余脚本【36】
  • unity3d入门教程五
  • 【FastAPI】实现服务器向客户端发送SSE(Server-Sent Events)广播
  • [C#][IIS]framework4.0注册到IIS
  • 密码学---常见的其他密码
  • 第十一周:机器学习笔记
  • python 实现euclidean distance欧式距离算法
  • 分享JavaScript中直接调用CSS中的类名
  • 56 - I. 数组中数字出现的次数