YOLOV8/V7/V5的PCB缺陷检测:可视化界面+GUI+目标计数+视频目标检测与跟踪

在本文中,我将介绍如何使用PyQt5创建一个YOLOv8V7/V5目标检测的可视化界面,可以根据需求选择YOLOv8V7/V5的权重。

该可视化界面的功能丰富,包含内容:

1.GUI+目标计数+视频目标检测与跟踪

2.完整的OLO数据格式制作流程以及代码

3.PCB缺陷数据集和训练好的权重

4.包含完整的GUI界面代码和使用说明,适合做毕业设计。

代码地址:下载地址

本文将涵盖界面的设计、功能实现以及一些核心代码的解释。以下是代码和详细介绍。

环境准备

首先,需要确保你的YOLOv8环境中已经安装了PyQt5和其他依赖库。你可以使用以下命令来安装:

pip install pyqt5 pyqt5-tools
pip install opencv-python-headless
pip install pyyaml

代码实现

界面设计

界面的设计通过Qt Designer完成,并生成gui.py文件。你可以使用以下命令将.ui文件转换为Python代码:

核心代码

以下是实现YOLOv8目标检测的核心代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        # 设置对话框的对象名和大小
        Dialog.setObjectName("Dialog")
        Dialog.resize(1584, 864)
        Dialog.setStyleSheet("QDialog { background-color: #ccffcc; }")# 背景颜色设置

        # 设置原始图像显示标签对象
        self.label_ori = QtWidgets.QLabel(Dialog)
        # 20: 控件左上角的 x 坐标,即距离左边界的像素数。140: 控件左上角的 y 坐标,即距离上边界的像素数。500: 控件的宽度。500: 控件的高度。
        self.label_ori.setGeometry(QtCore.QRect(20, 120, 500, 500))
        self.label_ori.setText("")
        self.label_ori.setObjectName("label_ori")
        self.label_ori.setStyleSheet("background-color: #ffffff;border: 1px solid black;")
        # 设置文本说明标签对象
        self.ori_label_instruction = QtWidgets.QLabel(Dialog)
        self.ori_label_instruction.setGeometry(QtCore.QRect(20, 80, 100, 40))  # 调整位置和大小
        font = QtGui.QFont()
        font.setPointSize(15)
        self.ori_label_instruction.setFont(font)
        self.ori_label_instruction.setObjectName("text_label_instruction")
        self.ori_label_instruction.setText("原始图像")


        # 设置检测结果标签对象
        self.label_det = QtWidgets.QLabel(Dialog)
        self.label_det.setGeometry(QtCore.QRect(650, 120, 500, 500))
        self.label_det.setText("")
        self.label_det.setObjectName("label_det")
        self.label_det.setStyleSheet("background-color: #ffffff;border: 1px solid black;")
        # 设置文本说明标签对象
        self.det_label_instruction = QtWidgets.QLabel(Dialog)
        self.det_label_instruction.setGeometry(QtCore.QRect(650, 80, 100, 40))  # 调整位置和大小
        font = QtGui.QFont()
        font.setPointSize(15)
        self.det_label_instruction.setFont(font)
        self.det_label_instruction.setObjectName("text_label_instruction")
        self.det_label_instruction.setText("检测图像")


        # 设置模型按钮对象
        self.pushButton_Model = QtWidgets.QPushButton(Dialog)
        self.pushButton_Model.setGeometry(QtCore.QRect(1200, 150, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_Model.setFont(font)
        self.pushButton_Model.setObjectName("pushButton_Model")
        self.pushButton_Model.setStyleSheet("background-color: #00FFFF;")
        # 设置退出按钮对象
        self.pushButton_Exit = QtWidgets.QPushButton(Dialog)
        self.pushButton_Exit.setGeometry(QtCore.QRect(1400, 430, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_Exit.setFont(font)
        self.pushButton_Exit.setObjectName("pushButton_Exit")
        self.pushButton_Exit.setStyleSheet("background-color: #00FFFF;")
        # 设置打开图片按钮对象
        self.pushButton_Img = QtWidgets.QPushButton(Dialog)
        self.pushButton_Img.setGeometry(QtCore.QRect(1200, 220, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_Img.setFont(font)
        self.pushButton_Img.setObjectName("pushButton_Img")
        self.pushButton_Img.setStyleSheet("background-color: #00FFFF;")
        # 设置打开文件夹按钮对象
        self.pushButton_ImgFolder = QtWidgets.QPushButton(Dialog)
        self.pushButton_ImgFolder.setGeometry(QtCore.QRect(1200, 290,  130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_ImgFolder.setFont(font)
        self.pushButton_ImgFolder.setObjectName("pushButton_ImgFolder")
        self.pushButton_ImgFolder.setStyleSheet("background-color: #00FFFF;")
        # 设置打开视频按钮对象
        self.pushButton_Video = QtWidgets.QPushButton(Dialog)
        self.pushButton_Video.setGeometry(QtCore.QRect(1200, 360,  130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_Video.setFont(font)
        self.pushButton_Video.setObjectName("pushButton_Video")
        self.pushButton_Video.setStyleSheet("background-color: #00FFFF;")
        # 设置打开摄像头按钮对象
        self.pushButton_Camera = QtWidgets.QPushButton(Dialog)
        self.pushButton_Camera.setGeometry(QtCore.QRect(1200, 430,  130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_Camera.setFont(font)
        self.pushButton_Camera.setObjectName("pushButton_Camera")
        self.pushButton_Camera.setStyleSheet("background-color: #00FFFF;")
        # 设置标题标签对象
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(100, 5, 1341, 70))
        font = QtGui.QFont()
        font.setPointSize(25)  # 增加字体大小以突出标题
        font.setBold(True)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")

        # 设置文本浏览器对象
        self.textBrowser = QtWidgets.QTextBrowser(Dialog)
        self.textBrowser.setGeometry(QtCore.QRect(20, 670, 1400, 180))
        self.textBrowser.setObjectName("textBrowser")
        self.textBrowser.setStyleSheet("QTextBrowser { border: 1px solid black; }")
        # 设置文本说明标签对象
        self.text_label_instruction = QtWidgets.QLabel(Dialog)
        self.text_label_instruction.setGeometry(QtCore.QRect(20, 630, 100, 40))  # 调整位置和大小
        font = QtGui.QFont()
        font.setPointSize(15)
        self.text_label_instruction.setFont(font)
        self.text_label_instruction.setObjectName("text_label_instruction")
        self.text_label_instruction.setText("结果显示:")

        # 设置开始检测按钮对象
        self.pushButton_BegDet = QtWidgets.QPushButton(Dialog)
        self.pushButton_BegDet.setGeometry(QtCore.QRect(1400, 150, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_BegDet.setFont(font)
        self.pushButton_BegDet.setObjectName("pushButton_BegDet")
        self.pushButton_BegDet.setStyleSheet("background-color: #00FFFF;")
        # 设置停止检测按钮对象
        self.pushButton_StopDet = QtWidgets.QPushButton(Dialog)
        self.pushButton_StopDet.setGeometry(QtCore.QRect(1400, 220, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_StopDet.setFont(font)
        self.pushButton_StopDet.setObjectName("pushButton_StopDet")
        self.pushButton_StopDet.setStyleSheet("background-color: #00FFFF;")
        # 设置设置保存路径按钮对象
        self.pushButton_SavePath = QtWidgets.QPushButton(Dialog)
        self.pushButton_SavePath.setGeometry(QtCore.QRect(1400, 290, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.pushButton_SavePath.setFont(font)
        self.pushButton_SavePath.setObjectName("pushButton_SavePath")
        self.pushButton_SavePath.setStyleSheet("background-color: #00FFFF;")
        # 设置下拉框对象
        self.comboBox = QtWidgets.QComboBox(Dialog)
        self.comboBox.setGeometry(QtCore.QRect(1400, 360, 130, 50))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.comboBox.setFont(font)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.setStyleSheet("background-color: #00FFFF;")
        # 调用翻译函数
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

        # # 创建操作区框架
        # self.operation_frame = QtWidgets.QFrame(Dialog)
        # self.operation_frame.setGeometry(QtCore.QRect(1180, 110, 380, 450))
        # self.operation_frame.setObjectName("operation_frame")
        # self.operation_frame.setStyleSheet("background-color: transparent; border: 1px solid black;")
        # # 在操作区框架中放置“操作”标签
        self.operation_label = QtWidgets.QLabel(Dialog)
        self.operation_label.setGeometry(QtCore.QRect(1185, 100, 60, 30))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.operation_label.setFont(font)
        self.operation_label.setObjectName("operation_label")
        self.operation_label.setText("操作")
        self.operation_label.setStyleSheet("background-color:#ccffcc;")


    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "YOLOV8/7/5-PYQT"))
        self.pushButton_Model.setText(_translate("Dialog", "选择配置文件"))
        self.pushButton_Exit.setText(_translate("Dialog", "退出"))
        self.pushButton_Img.setText(_translate("Dialog", "打开图片"))
        self.pushButton_ImgFolder.setText(_translate("Dialog", "打开文件夹"))
        self.pushButton_Video.setText(_translate("Dialog", "打开视频"))
        self.pushButton_Camera.setText(_translate("Dialog", "打开摄像头"))
        self.label.setText(_translate("Dialog", "深度学习目标检测"))  # 修改标题文字,在run_gui.py中修改
        self.pushButton_BegDet.setText(_translate("Dialog", "开始检测"))
        self.pushButton_StopDet.setText(_translate("Dialog", "停止检测"))
        self.pushButton_SavePath.setText(_translate("Dialog", "设置保存路径"))
        self.comboBox.setItemText(0, _translate("Dialog", "无追踪"))  # 修改下拉框选项
        self.comboBox.setItemText(1, _translate("Dialog", "ByteTrack"))
        self.text_label_instruction.setText(_translate("Dialog", "结果显示:"))
        self.ori_label_instruction.setText(_translate("Dialog", "原始图像"))
        self.det_label_instruction.setText(_translate("Dialog", "检测图像"))

功能展示:

首先要点击选择配置文件,然后有三种模式可以使用,分别是打开图片,打开文件夹和打开视频,然后点击开始检测按钮就可以检测,结果会显示在文本框中,对每个目标进行计数

检测视频可以使用目标跟踪模式。

视频目标追踪检测效果:

基于YOLOv8+pyqt5实现的过马路玩手机打电话检测告警系统源码(GUI界面+数据集+模型+评估曲线+部署说明) 检测斑马线、玩手机、打电话、行人、车辆、其他。简易的GUI界面,含有训练好的模型、评估指标曲线、数据集、详细部署操作文档,有问题可以私信留言。 以下内容为项目部署详细过程和说明 1、项目代码分为两部分 main_gui_code和ultralytics,其中main_gui_code代码包含GUI界面代码+训练好的模型+YOLOv8推理逻辑融合GUI的代码,也就是说这部分可以打开GUI界面,加载模型和图片、视频视频流 进行测试。ultralytics则为YOLOv8源代码,可用来训练各种模型,当然也可以用来测试,输出结果,只不过不带GUI界面。故我们使用ultralytics来训练模型,然后拷贝模型到main_gui_code中, 进行GUI界面测试。 2、搭建环境 安装anaconda 和 pycharm windows系统、mac系统、Linux系统都适配 在anaconda中新建一个新的envs虚拟空间(可以参考博客来),命令窗口执行:conda create -n YOLOv8-GUI python==3.8 创建完YOLOv8-GUI虚拟空间后,命令窗口执行:source activate YOLOv8-GUI 激活虚拟空间 然后就在YOLOv8-GUI虚拟空间内安装requirements.txt中的所有安装包,命令窗口执行:pip install -r requirements.txt 使用清华源安装更快 3、打开GUI推理测试 当以上步骤顺利完成后,环境已经搭建完毕,下面我们尝试打开GUI界面进行测试 pycharm中打开整个项目,导入配置anaconda安装的YOLOv8-GUI虚拟环境(参考博客) 运行main_jiemian.py即可成功打开界面,模型文件放在main_gui_code/models/文件夹,后缀为.pt。可以存放多个模型,可通过界面来选择要使用的模型 点击选择模型按钮选择pt模型,然后点击选择路径按钮,选择待测图片或者视频,最后点击开始检测按钮,开始推理测试并显示画框及得分值 4、训练模型过程 进入到\ultralytics\ultralytics\yolo\v8\detect\文件夹下,datasets即为我们准备好的数据集,训练其他模型同理。 data文件夹下的cross_line.yaml文件为数据集配置文件,博文有介绍https://blog.csdn.net/DeepLearning_?spm=1011.2415.3001.5343 train.py中208行,修改为的data = cfg.data or './cross_line.yaml' # or yolo.ClassificationDataset("mnist") 207行修改自己使用的预训练模型 若自己有显卡,修改211行,如我有四张显卡,即改成args = dict(model=model, data=data, device=”0,1,2,3“) 以上配置完成后运行train.py开始训练模型,训练完毕后会在runs/detect/文件夹下生成train*文件夹,里面包含模型和评估指标等 5、无GUI推理测试 训练好模型,打开predict.py,修改87行,model = cfg.model or 'yolov8n.pt',把yolov8n.pt换成我们刚才训练完生成的模型路径,待测试的图片或者视频存放于ultralytics\ultralytics\assets文件夹, 运行predict.py即可,检测结果会在runs/detect/train文件夹下生成。 【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AICurator

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值