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, QtWidgetsclass 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.translateDialog.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", "检测图像"))

功能展示:

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

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

视频目标追踪检测效果:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逆向案例二十三——请求头参数加密,某区块链交易逆向

网址:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析,发现请求头有X-Apikey参数加密,其他表单和返回内容没有加密。 直接搜索关键字,X-Apikey,找到疑似加密位置,注意这里…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…

系统架构设计师教程(清华第二版) 第3章 信息系统基础知识-3.3 管理信息系统(MIS)-解读

系统架构设计师教程 第3章 信息系统基础知识-3.3 管理信息系统(MIS) 3.3.1 管理信息系统的概念3.3.1.1 部件组成3.3.1.2 结构分类3.3.1.2.1 开环结构3.3.1.2.2 闭环结构3.3.1.3 金字塔结构3.3.2 管理信息系统的功能3.3.3 管理信息系统的组成3.3.3.1 销售市场子系统3.3.3.2…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构

文章目录 1. 概述1.1 信息系统架构(ISA)1.2 架构风格 2. 信息系统架构分类2.1 信息系统物理结构2.1.1 集中式结构2.1.2 分布式结构 2.2 信息系统的逻辑结构1)横向综合2)纵向综合3)纵横综合 3. 信息系统架构的一般原理4…

Android14之调试广播实例(二百二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

windows实现自动化按键

1.选择目标窗口 获取窗口句柄 void KeyPresser::selectWindow() {SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);selectedWindowLabel->setText("请点击目标窗口..."); }void CALLBACK …

word的进阶

Word的基本操作 这里主要用到的软件是WPS软件。 一、创建一个文档 第一种:快捷键:ctrln第二种:通过界面鼠标点击 二、设置文档背景 更换过的背景如下: 三、章节、目录导航的设置 四、插入目录页 五、对历史文档进行管理 六、…

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

基于 asp.net家庭财务管理系统设计与实现

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…

XLua原理(一)

项目中活动都是用xlua开发的,项目周更热修也是用xlua的hotfix特性来做的。现研究底层原理,对于项目性能有个更好的把控。 本文认为看到该文章的人已具备使用xlua开发的能力,只研究介绍下xlua的底层实现原理。 一.lua和c#交互原理 概括&…

Github报错:Kex_exchange_identification: Connection closed by remote host

文章目录 1. 背景介绍2. 排查和解决方案 1. 背景介绍 Github提交或者拉取代码时,报错如下: Kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.Please make sure you have the correct ac…

【Qt】常用控件 Q widget的enabled属性,geometry属性

Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一: 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统,可直接接入SCADA、MES、MOM、ERP等IT系统,无缝链接OT与IT层,是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…

硅谷裸机云多IP服务器怎么样?

硅谷裸机云多IP服务器是一种在硅谷地区提供的、具有多个IP地址的裸机云服务器。这种服务器结合了裸机服务器的高性能和云服务器的灵活性,同时提供了多个IP地址,为用户的各种需求提供了支持。以下是关于硅谷裸机云多IP服务器的一些详细信息,ra…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一:基础型团队 (4人)配置二:扩展型团队 (6人)配置三:全面型团队 (7人) 3. 产品需求分析4. ID设计(Industrial Design, 工业设计)5. 结…

智慧监狱整体解决方案

智慧监狱整体解决方案摘要: 对智慧监狱的理解 智慧监狱通过集成监控图像资源、报警信息、安防信息和业务信息,实现资源共享和信息互通。构建三级警戒架构,实现分监区、监狱和局级监狱管理局的应急指挥和管理。 发展历程 从2006年至2021年&am…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

LeNet实验 四分类 与 四分类变为多个二分类

目录 1. 划分二分类 2. 训练独立的二分类模型 3. 二分类预测结果代码 4. 二分类预测结果 5 改进训练模型 6 优化后 预测结果代码 7 优化后预测结果 8 训练四分类模型 9 预测结果代码 10 四分类结果识别 1. 划分二分类 可以根据不同的类别进行多个划分,以…

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

目录 例1 1.问题重述 2.基本模型 变量定义: 目标函数: 约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 ​编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 ​编辑 2.基本模型 3.模…

Python酷库之旅-第三方库Pandas(036)

目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…