基于YOLO V8的PCB缺陷检测识别系统(python源码+Pyqt5界面+数据集+训练代码)

news2025/1/23 4:06:16

  1. 数据集准备:收集并标注PCB缺陷的图像。
  2. 模型训练:使用YOLO v8框架训练一个模型来识别这些缺陷。
  3. GUI开发:利用PyQt5创建一个用户友好的图形界面。
  4. 模型部署:在GUI中集成训练好的模型,使用户能够上传PCB图像并得到缺陷检测的结果。

下面是对这个项目的简要介绍以及一个简单的代码示例,包括了训练代码和GUI界面的基本结构。

项目简介

1. 数据集准备
  • 数据集:收集带有不同PCB缺陷类型的图像,并使用如LabelImg等工具进行标注。
  • 数据集划分:将数据集分为训练集、验证集和测试集。
2. 模型训练
  • 使用YOLO v8框架(如ultralytics/yolov8)进行训练。
  • 配置文件定义模型架构和训练参数。
  • 使用GPU加速训练过程。

3. GUI开发
  • 使用PyQt5设计一个简洁直观的界面,允许用户上传图片、查看结果等。
  • 实现模型加载和推理功能。
4. 模型部署
  • 将训练好的模型部署到GUI中,使得用户可以方便地使用该系统进行PCB缺陷检测。

训练代码示例

下面是一个简单的YOLO v8训练脚本示例,用于训练PCB缺陷检测模型。

1# train.py
2
3from ultralytics import YOLO
4
5# 加载YOLO v8模型
6model = YOLO('yolov8n.pt')  # 使用预训练模型作为基础
7
8# 设置训练参数
9data_config = 'data.yaml'  # 数据集配置文件
10epochs = 100  # 训练轮数
11batch = 16  # 批量大小
12
13# 开始训练
14results = model.train(data=data_config, epochs=epochs, batch=batch)

GUI代码示例

下面是一个使用PyQt5创建的基本GUI界面示例,用于展示如何集成YOLO v8模型进行实时检测。

1# gui.py
2
3import sys
4from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel, QFileDialog
5from PyQt5.QtGui import QPixmap
6import cv2
7import numpy as np
8from ultralytics import YOLO
9
10class PCBDefectDetector(QWidget):
11    def __init__(self):
12        super().__init__()
13        self.initUI()
14
15    def initUI(self):
16        self.setWindowTitle('PCB Defect Detection System')
17        self.setGeometry(300, 300, 600, 400)
18
19        self.image_label = QLabel(self)
20        self.image_label.resize(400, 300)
21
22        self.load_button = QPushButton('Load Image', self)
23        self.load_button.clicked.connect(self.loadImage)
24
25        layout = QVBoxLayout()
26        layout.addWidget(self.image_label)
27        layout.addWidget(self.load_button)
28        self.setLayout(layout)
29
30    def loadImage(self):
31        options = QFileDialog.Options()
32        options |= QFileDialog.ReadOnly
33        file_name, _ = QFileDialog.getOpenFileName(self, "Open Image", "", "Image Files (*.png *.jpg *.jpeg)", options=options)
34        if file_name:
35            image = cv2.imread(file_name)
36            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
37            self.detect_defects(image)
38            height, width, channel = image.shape
39            bytes_per_line = 3 * width
40            q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
41            pixmap = QPixmap.fromImage(q_image)
42            self.image_label.setPixmap(pixmap)
43
44    def detect_defects(self, image):
45        # 加载模型
46        model = YOLO('path/to/best.pt')  # 替换为你的模型路径
47
48        # 进行推理
49        results = model.predict(source=image, save=False)
50
51        # 处理结果
52        for r in results:
53            boxes = r.boxes
54            for box in boxes:
55                b = box.xyxy[0]  # 获取边界框
56                c = box.cls  # 获取分类
57                # 绘制边界框
58                cv2.rectangle(image, (int(b[0]), int(b[1])), (int(b[2]), int(b[3])), (0, 255, 0), 2)
59
60app = QApplication(sys.argv)
61ex = PCBDefectDetector()
62ex.show()
63sys.exit(app.exec_())

项目结构

  • train.py:用于训练模型。
  • gui.py:用于运行GUI应用程序。
  • data.yaml:数据集配置文件。
  • images/ 和 labels/:存放训练图像和标注文件的目录。

请确保你已经安装了所有必要的库,并且正确设置了YOLO v8模型的路径。此外,你需要准备一个适当的数据集,并根据实际情况修改训练和GUI代码中的相关路径。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-树(二叉树)-第三天

结合leetcode学习c 学习资料来源 定义 二叉树(binary tree)是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。 与链表类似,二叉树的基本单元是节点,每个节点包含…

[数据集][目标检测]停车场空位检测数据集VOC+YOLO格式7959张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7959 标注数量(xml文件个数):7959 标注数量(txt文件个数):7959 标注…

p9 镜像的基本命令

docker的常用命令 帮助命令 查看docker的版本 docker version2. 查看当前安装的docker的详细的信息 docker的系统信息包括镜像和容器的数量 docker info3. 查询帮助命令 image是你想要获取哪一个命令的帮助文档,一般百度或者人工智能就行所有命令的可选项都可以用这个–hel…

DN专业3D图形制作软件win/mac软件安装下载(附下载链接)

目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统: Mac系统: 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …

.NET内网实战:通过DNS查找出网主机

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,对内网和后渗透感兴趣的朋友们可以订阅该电子报刊,解锁更多的报刊内容。 02基本介绍 03编码实现 在红队活动中&…

Modbus 数据帧解析

Modbus 是一种通信协议,广泛应用于工业自动化系统中,用于连接电子设备。它是一种基于主从结构的通信协议,其中主设备可以与多个从设备通信。数据通过一系列的帧进行传输,每一帧包含多个字段,每个字段都有特定的功能。 …

SQL进阶技巧:最近有效的缺失值填充问题【last_value实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 场景:现在有一张商品入库表,包括商品id、商品成本和入库日期3个字段,由于某些原因,导致部分商品的成本缺失(为0或者没有值都是缺失),这样不利于我们计算成本。所以现在要把缺失的商品进价补充完整,补充的…

OpenCTI:开源网络威胁情报平台

OpenCTI 是一个开源平台,旨在帮助组织管理其网络威胁情报 (CTI) 数据和可观察数据。 该平台由 Filigran 开发,使用基于 STIX2 标准的知识模式构建数据。 它采用现代 Web 应用程序架构,配备 GraphQL API 和用户友好的前端。 OpenCTI 与 MIS…

MySQL在Windows和Ubuntu上的安装与远程连接配置

MySQL是一个广泛使用的开源关系数据库管理系统,适用于各种操作系统。本文将详细介绍如何在Windows和Ubuntu系统上安装MySQL,并配置远程连接。 1. 在Windows上安装MySQL 1.1 下载MySQL安装包 首先,访问MySQL官方网站(https://de…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑模块冗余和系统状态的多...电系统可靠性的蒙特卡洛分析》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【Java日志系列】JCL、SLF4J日志门面

目录 前言 一、日志门面概述 1. 门面模式(外观模式) 2. 日志门面 二、JCL 1. JCL组件结构 2. JCL案例 三、SLF4J 1. SLF4J简介 2. SLF4J桥接技术 3. 快速入门 4. SLF4J集成日志实现 4.1 集成nop 4.2 集成Logback 4.3 集成Log4j 4.4 集成…

一文彻底搞懂Transformer - 总体架构,零基础入门到精通,收藏这一篇就够了

Transformer 一、RNN编码器-解码器架构**** ********序列到序列模型(Seq2Seq):Seq2Seq模型的目标是将一个输入序列转换成另一个输出序列,这在多种应用中都具有广泛的实用价值,例如语言建模、机器翻译、对话生成等。 …

网络及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册:•一旦使用 signal 函数注册了信号处理函数,该函数就会一直有效,直到程序结束或者显式地取消注册。2. 注册多次的影响:•如果多次注册同一信号的处理函数,最后一次注册的…

Java 入门指南:List 接口

Collection 接口提供了一系列用于操作和管理集合的方法,包括添加、删除、查询、遍历等。它是所有集合类的根接口,包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element):向集合中添加元素。 addAll(Collection col)&#xff1…

打架检测算法在公共安全中的创新应用

在现代社会中,公共场所的安全问题日益受到重视,特别是暴力事件的监控和预防更是各类安防系统的核心需求之一。随着视频监控设备的普及,如何从大量监控数据中实时、高效地识别出潜在的暴力行为,成为亟待解决的难题。传统的视频监控…

怎么对前端的一些按钮做一个权限校验

在一般情况下,我们需要对一些按钮做一个权限校验,来保证只有有权限的用户才能看到 1.创建一个js文件,来写我们的全局方法 我的方法是这样的 import Vue from vue;Vue.mixin({methods:{hasAuth(perm) {var authority this.$store.state.menu.permList;if (authority.indexOf(…

JointJs 在 Vue 中的使用探索(一): Hello JointJS

文章目录 前言根本问题探索过程安装 jointjs测试 joint/core demo 代码jointjs joint/core 前言 最近需要用到 JointJs 做一些东西,但是 官方文档 的 joint/core 跑下来后发现并不太好使,空白一片…(这是个误会…) 所以开了个贴给…

map与set容器初识:初步运用map与set

前言: 本文主要讲解的时对于map与set容器的初步使用,希望大家对map与set容器不熟悉的看了之后可以快速运用set与map到日常中来。(本文适合对vector等基础容器有一定基础的同学) 一、set与map容器常见接口 迭代器接口与以往的所…

【hot100篇-python刷题记录】【不同路径】

R5-多维动态规划篇 多维动态规划的核心在于建立多维状态记录表。 本题中,建立dp二维数组表(初始化为1) dp[i][j]dp[i-1][j]dp[i][j-1] 注意,需要判断是否存在,因为二维数组有边界 第一种处理需要判断边界 第二种&…

go的defer机制

defer的底层机制 为栈操作&#xff0c;栈是一个先进后出的数据结构 func main() {fmt.Println("reciprocal")for i : 0; i < 10; i {defer fmt.Println(i)} }运行结果 reciprocal 9 8 7 6 5 4 3 2 1 0defer拷贝机制 以下已经发生压栈发生值拷贝数据不再会发生变…