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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • QT Layout布局,隐藏其中的某些部件后,不影响原来的布局
  • ffmpeg实现视频的合成与分割
  • 深度学习自编码器 - 随机编码器和解码器篇
  • 深度学习之线性代数预备知识点
  • 幼儿园自动分班工具:使用Python进行实现
  • 如何在kotlin中给空字符串(””)和null值设置默认值问题?
  • Docker数据挂载本地目录
  • STM32单片机 内存 字 字节 位关系详细讲解
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件
  • 关于安卓App自动化的一些想法
  • HTML5中下拉框标签`<select>`深入全面解析
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.16)
  • C语言 | Leetcode C语言题解之第405题数字转换为十六进制数
  • Flutter Error: Type ‘UnmodifiableUint8ListView‘ not found
  • sqli-labs靶场自动化利用工具——第10关
  • @angular/forms 源码解析之双向绑定
  • 【React系列】如何构建React应用程序
  • 【知识碎片】第三方登录弹窗效果
  • 2019年如何成为全栈工程师?
  • angular2开源库收集
  • ES6核心特性
  • golang中接口赋值与方法集
  • hadoop集群管理系统搭建规划说明
  • JAVA之继承和多态
  • leetcode46 Permutation 排列组合
  • rc-form之最单纯情况
  • v-if和v-for连用出现的问题
  • windows下使用nginx调试简介
  • Yeoman_Bower_Grunt
  • 搞机器学习要哪些技能
  • 给初学者:JavaScript 中数组操作注意点
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 简析gRPC client 连接管理
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 如何用vue打造一个移动端音乐播放器
  • 学习笔记TF060:图像语音结合,看图说话
  • ​如何在iOS手机上查看应用日志
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #每天一道面试题# 什么是MySQL的回表查询
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Python) SOAP Web Service (HTTP POST)
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)重识new
  • .describe() python_Python-Win32com-Excel
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 获取某一天 在当月是 第几周 函数
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net 应用中使用dot trace进行性能诊断
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET4.0并行计算技术基础(1)