目录
前言
随着计算机视觉技术的发展,目标检测技术在各个领域得到了广泛应用。安全帽检测作为工业安全领域的重要应用之一,可以有效减少工地人员因未佩戴安全帽而发生的事故。在本文中,我将带领大家基于YOLOv8与PyQt5开发一个智能化的安全帽检测系统。本项目适合毕业设计或有兴趣学习目标检测与界面开发的小伙伴,系统功能包括图像检测、视频检测、文件夹批量检测、摄像头实时检测等。
本系列其他文章:
【YOLOv8系列】(一)YOLOv8介绍:实时目标检测的最新突破-CSDN博客
【YOLOv8系列】(二)YOLOv8环境配置,手把手嘴对嘴保姆教学-CSDN博客
【YOLOv8系列】(三)YOLOv8应用实践:从识别到分类再到分割的全方位视觉解决方案_yolov8 分类-CSDN博客
【YOLOv8系列】(四)YOLOv8使用自己的数据集进行模型训练,成就感满满-CSDN博客
【YOLOv8系列】(五)毕设实战:YOLOv8+Pyqt5实现智能车牌检测与识别系统_python怎么使用yolov8识别图片-CSDN博客
一、数据集获取与介绍
在工业领域,安全帽佩戴的检测需要一个包含大量真实场景的数据集,以确保模型在实际应用中的泛化能力。常见的安全帽检测数据集一般包含工地或施工现场的图片,这些图片包含各种角度、不同光照、复杂背景下的人物和安全帽。我们需要确保数据集具备多样性,以提升模型的鲁棒性。本系统使用的数据集包含5000张图片进行标注、并划分成训练集以及验证集。
数据集目录如下所示:
HelmetDetection
├── annotations
│ ├── hard_hat_workers0.xml
│ ├── ............................................
├──images
│ ├──hard_hat_workers0.jpg
│ ├── .....................................
├── label_list.txt
├── vaild.txt
└── train.txt
有需要的小伙伴可以点击我上传的资源进行数据集下载,自行进行训练。
二、模型训练
1.数据集划分
按照数据集里面的train.txt以及valid.txt内容所示进行训练集以及验证集划分
2. 新建data.yaml文件
新建一个data.yaml
文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。data.yaml
的具体内容如下:
train: .\dataset\helmet\train # train images
val: .\dataset\helmet\val # val images
test: # val images (optional)
# number of classes
nc: 2
# Classes
names: ['Helmet', 'head']
3.模型训练
使用以下代码进行YOLOv8模型训练,具体内容可以看这篇
【YOLOv8系列】(四)YOLOv8使用自己的数据集进行模型训练,成就感满满_yolov8训练自己的数据集-CSDN博客
#coding:utf-8
from ultralytics import YOLO
# 加载预训练模型
model = YOLO("yolov8n.pt")
# Use the model
if __name__ == '__main__':
# Use the model
results = model.train(data='/helmet/data.yaml', epochs=300, batch=4) # 训练模型
4.模型效果预测
使用以下代码进行predict
from ultralytics import YOLO
model = YOLO('best.pt')
if __name__ == '__main__':
results = model.predict(source='test.jpg')
results[0].show()
执行上述代码后,会将执行的结果直接标注在图片上,结果如下:
可以看到,模型的预测效果还是不错的。置信度都在90%左右,满足我们使用。
三、pyqt实现
1.ui界面设计
使用Qt designer进行ui界面设计,具体pycharm配置过程可以参考我这篇文章
PyCharm专业版配置PyQt5/QtDesigner/PyUic完整教程_pyuic5支持什么版本python-CSDN博客
大致界面如下所示:
包含 :
QLabel,显示图像、序号、类别、置信度等
QTableWidget,显示序号、类别、置信度等识别信息
QPushButton,选择图片、文件夹、视频或者摄像头检测,保存识别csv
2.功能实现
①图片检测
def detectImage(self, imagePath):
frame = cv2.imread(imagePath)
results = self.model(frame)
self.displayResults(frame, results)
效果如下所示:
安全帽图片检测
②文件夹检测
def detect_folder(self):
image_extensions = ('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff')
image_paths = [os.path.join(self.source, f) for f in os.listdir(self.source) if
f.lower().endswith(image_extensions)]
for image_path in image_paths:
image = cv2.imread(image_path)
results = self.model(frame)
self.displayResults(frame, results)
效果如下所示:
安全帽文件夹检测
③视频检测
def detectVideo(self):
ret, frame = self.cap.read()
if ret:
results = self.model(frame)
self.displayResults(frame, results)
else:
self.timer.stop()
self.cap.release()
效果如下所示:
安全帽视频检测
四.总结
在本博客中,我们详细介绍了一个基于YOLOv8模型的安全帽检测系统。系统以模块化的方式设计,充分采用了合理的架构设计,带来良好的可维护性和可扩展性。其用户界面友好,能够提供实时的安全帽检测和识别结果展示,便于保存和管理检测结果和设置。
该系统支持摄像头、视频、图像和批量文件等多种输入源,能够满足用户在不同场景下的需求。在后面可以添加更多预训练模型,增加检测和识别的种类;优化用户界面,增强个性化设置;并积极聆听用户反馈,以期不断改进系统,以更好地满足用户的需求。
由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。
如果以上内容对您有帮助,可以三连打赏订阅本专栏哦, 谢谢~