基于 YOLOv8 的铝片缺陷检测系统:从数据到界面的全流程实现
基于yolov8的铝片缺陷检测系统 数据集共1400张,按照8:2划分训练集和验证集 包含四类缺陷:zhen_kong,ca_shang,zang_wu,zhe_zhou 有xml标签和txt标签,也可以用于yolo训练 yolov8训练完成,pyqt5设计了缺陷检测界面 注:电子资料 不退不换

最近,我完成了一个基于 YOLOv8 的铝片缺陷检测系统,今天就来和大家分享一下这个项目的开发过程,包括数据集处理、模型训练以及界面设计等方面。
数据集准备
首先是数据集,这次使用的数据集包含 1400 张铝片图片,里面涵盖了四类缺陷,分别是“zhenkong”(真空缺陷)、“cashang”(擦伤)、“zangwu”(污渍)和“zhezhou”(褶皱)。有了数据,我们得把它划分成训练集和验证集,按照 8:2 的比例来划分是比较常见的做法,这样既能保证模型有足够的数据进行学习,又能有一部分数据来验证模型的泛化能力。

下面是划分数据集的 Python 代码:
import os
import random
from shutil import copyfile
# 数据集总目录
data_dir = 'path/to/your/dataset'
# 训练集和验证集保存目录
train_dir = 'path/to/train'
val_dir = 'path/to/val'
# 创建训练集和验证集目录
if not os.path.exists(train_dir):
os.makedirs(train_dir)
if not os.path.exists(val_dir):
os.makedirs(val_dir)
# 获取所有图片文件
image_files = [f for f in os.listdir(data_dir) if f.endswith('.jpg') or f.endswith('.png')]
# 打乱图片文件列表
random.shuffle(image_files)
# 计算训练集和验证集的数量
train_size = int(len(image_files) * 0.8)
train_images = image_files[:train_size]
val_images = image_files[train_size:]
# 复制训练集图片和对应的标签文件
for image in train_images:
image_path = os.path.join(data_dir, image)
label_path = os.path.join(data_dir, image.replace('.jpg', '.txt').replace('.png', '.txt'))
copyfile(image_path, os.path.join(train_dir, image))
copyfile(label_path, os.path.join(train_dir, image.replace('.jpg', '.txt').replace('.png', '.txt')))
# 复制验证集图片和对应的标签文件
for image in val_images:
image_path = os.path.join(data_dir, image)
label_path = os.path.join(data_dir, image.replace('.jpg', '.txt').replace('.png', '.txt'))
copyfile(image_path, os.path.join(val_dir, image))
copyfile(label_path, os.path.join(val_dir, image.replace('.jpg', '.txt').replace('.png', '.txt')))
代码分析:
- 首先,我们定义了数据集的总目录、训练集和验证集的保存目录。然后创建这两个目录,确保它们存在。
- 接着,我们获取所有的图片文件,并打乱它们的顺序。这样做是为了让训练集和验证集的数据更具随机性,避免模型学习到数据的顺序特征。
- 计算出训练集和验证集的数量后,我们将图片文件列表分成两部分。
- 最后,使用
copyfile函数将图片和对应的标签文件复制到训练集和验证集目录中。
这个数据集还有一个好处,它同时提供了 XML 标签和 TXT 标签,而 YOLOv8 可以直接使用 TXT 标签进行训练,这就省去了很多数据转换的麻烦。
YOLOv8 模型训练
有了数据集,接下来就是训练 YOLOv8 模型了。YOLOv8 是一个非常强大的目标检测模型,它在速度和精度上都有很好的表现。

基于yolov8的铝片缺陷检测系统 数据集共1400张,按照8:2划分训练集和验证集 包含四类缺陷:zhen_kong,ca_shang,zang_wu,zhe_zhou 有xml标签和txt标签,也可以用于yolo训练 yolov8训练完成,pyqt5设计了缺陷检测界面 注:电子资料 不退不换

以下是使用 YOLOv8 进行训练的简单代码:
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt')
# 训练模型
results = model.train(
data='path/to/data.yaml',
epochs=100,
imgsz=640
)
代码分析:
- 首先,我们从
ultralytics库中导入YOLO类,并加载预训练的 YOLOv8n 模型。预训练模型可以帮助我们在训练时更快地收敛,节省训练时间。 - 然后,调用
train方法开始训练模型。data参数指定了数据集的配置文件路径,这个文件里包含了训练集和验证集的路径、类别名称等信息。epochs参数表示训练的轮数,imgsz参数表示输入图片的大小。
PyQt5 设计缺陷检测界面
模型训练完成后,为了方便使用,我们使用 PyQt5 设计了一个缺陷检测界面。
以下是一个简单的 PyQt5 界面代码示例:
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton
from PyQt5.QtGui import QPixmap, QImage
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('path/to/best.pt')
class DefectDetectionApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('铝片缺陷检测系统')
self.setGeometry(100, 100, 800, 600)
# 创建标签用于显示图片
self.image_label = QLabel(self)
self.image_label.setScaledContents(True)
# 创建按钮用于检测
self.detect_button = QPushButton('检测缺陷', self)
self.detect_button.clicked.connect(self.detect_defects)
# 布局
layout = QVBoxLayout()
layout.addWidget(self.image_label)
layout.addWidget(self.detect_button)
self.setLayout(layout)
def detect_defects(self):
# 读取图片
image = cv2.imread('path/to/test_image.jpg')
# 进行缺陷检测
results = model(image)
# 获取检测结果图片
result_image = results[0].plot()
# 将 OpenCV 图片转换为 QImage
height, width, channel = result_image.shape
bytes_per_line = 3 * width
q_img = QImage(result_image.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()
pixmap = QPixmap.fromImage(q_img)
# 在标签上显示图片
self.image_label.setPixmap(pixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DefectDetectionApp()
window.show()
sys.exit(app.exec_())
代码分析:
- 首先,我们加载训练好的 YOLOv8 模型。
- 然后创建一个
DefectDetectionApp类,继承自QWidget。在initUI方法中,我们设置了窗口的标题和大小,创建了一个用于显示图片的标签和一个用于触发检测的按钮,并将它们添加到布局中。 detect_defects方法是按钮的点击事件处理函数。在这个方法中,我们读取一张测试图片,使用训练好的模型进行缺陷检测,获取检测结果图片,将其转换为QImage格式,再转换为QPixmap格式,最后在标签上显示出来。
注意事项
最后要提醒一下,这个项目的相关电子资料是不退不换的哦。
通过以上步骤,我们就完成了一个基于 YOLOv8 的铝片缺陷检测系统,从数据集处理到模型训练,再到界面设计,整个流程都走了一遍。希望这篇分享能对大家有所帮助。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)