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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

仪表盘检测系统源码分享

仪表盘检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

C++初阶大全

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…

Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知

Rust练手项目,写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示,如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…

vscode中如何配置c/c++环境

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩!一、准备工作二、安装 VSCode 插件三、配置 VSCode1. 配置编译任务(tasks.json)2. 配置调试器(launch.json) 四、运行和调…

数据结构(Day14)

一、学习内容 结构体 概念 引入:定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题:没有学生、雪糕 数据类型 解决&…

【C/C++】程序的构建(编译)过程概述

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:C_小米里的大麦的博客-CSDN博客 🎁代码托管:C: 探索C编程精髓,打造高效代码仓库 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、预处理(Preprocessi…

C# USB通信技术(通过LibUsbDotNet库)

文章目录 1.下载LibusbDotNet库2.引入命名空间3. 实例化USB设备4.发送数据5.关闭连接 1.下载LibusbDotNet库 右击项目选择管理NuGet程序包在弹出的界面中搜索LibusbDotNet,然后下载安装。 2.引入命名空间 using LibUsbDotNet; using LibUsbDotNet.Main;3. 实例化…

MoneyPrinterTurbo 安装使用流程

项目地址: https://github.com/harry0703/MoneyPrinterTurbo 开发环境:mac 1 git 下载 # 下载代码到本地 git clone https://github.com/harry0703/MoneyPrinterTurbo.git cd MoneyPrinterTurbo2 docker 配源 在 docker 安装目录执行以下命令显示隐藏…

《Nginx核心技术》第17章:使用自签CA配置HTTPS加密反向代理访问

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

3.Java高级编程实用类介绍(一)

三、Java高级编程实用类介绍(一) 文章目录 三、Java高级编程实用类介绍(一)一、枚举类型二、包装类三、Math 一、枚举类型 使用enum进行定义 public enum 枚举名字{值1,值2.... }二、包装类 每个基本类型在java.lang包中都有一个相应的包装类 /** new包装类(字符…

华硕产品资料的查询方法

华硕网站有些奇怪,比如我要查询x99-pro这款已经停售的主板的资料,在它的首页搜索,搜索结果为空: 然后在服务支持和下载中心,同样搜不到。 经高人指点,用下面的方法,可以搜到: https…

C++ char*和char[] 可能指向的内存区域详解(附实验)

C char* 指向的内存区域详解 写在前面c内存结构简介指针常量和常量指针简介情况一:char* 指向栈区内容情况二:char* 指向堆区内容情况三:char* 指向常量区内容情况四:char* 指向静态区内容情况五:char* 指向全局区内容…

mysql 8.0 时间维度表生成(可运行)

文章目录 mysql 8.0 时间维度表生成实例时间维度表的作用时间维度表生成技术细节使用时间维度表的好处 mysql 8.0 时间维度表生成实例 时间维度表的作用 dim_times(时间维度表)在数据仓库(Data Warehouse)中的作用至关重要。作为…

Vite + Electron 时,Electron 渲染空白,静态资源加载错误等问题解决

问题 如果在 electron 里直接引入 vite 打包后的东西,那么有些资源是请求不到的 这是我的引入方式 根据报错,我们来到 vite 打包后的路径看一看 ,修改一下 dist 里的文件路径试了一试 修改后的样子,发现是可以的了 原因分析 …

Java-idea小锤子图标

这一版的idea小锤子图标其实就在这里 点进去就找到了~

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制,尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如,Reese84 可以通过分析访问者的浏览器指纹、…

java技术栈介绍

Java技术栈是一个庞大而丰富的生态系统,它包含了从基础语言特性到高级框架、库和工具的整个集合。这个技术栈为开发者提供了构建各种类型应用(包括企业级应用、Web应用、移动应用、大数据应用等)所需的全部组件。以下是对Java技术栈的一个更详…

Java 技巧 如何在IDEA2024 中快速打出System.out.println();

1.基本用法 键入sout回车 回车后变成: 2.打印变量 快速打印变量,以打印变量名为set为例,set.sout回车, 回车后变成

YOLOv8 人体姿态估计动作识别关键点检测(代码+教程)

YOLOv8 人体姿态判断 项目介绍 YOLOv8 人体姿态判断 是一个基于最新YOLOv8模型的深度学习项目,旨在识别和分析人体姿态。该项目利用先进的计算机视觉技术和深度学习框架,通过摄像头捕捉实时图像或处理存储图像,识别人体的关键点&#xff0c…

ubuntu服务器版NVIDIA驱动失效解决方案

ubuntu服务器版NVIDIA驱动失效解决方案 1. 问题描述2. 解决方法--卸载并重新安装最新版显卡驱动cudacudnn2.1 卸载显卡驱动2.2 重新安装最新版显卡驱动cudacudnn2.2.1 显卡驱动2.2.2 cuda2.2.3 cuda安装cudnn 1. 问题描述 在终端输入nvidia-smi,输出如下&#xff1…