使用YOLOv8来训练一个钢材表面缺陷检测数据集,并使用OpenCV和Tkinter构建一个GUI应用程序来进行检测 ——钢材缺陷检测识别+数据集+代码
发布时间
阅读量:
阅读量


可以通过YOLOv8组织训练数据集来完成钢材表面缺陷检测任务,并且可以通过OpenCV与Tkinter结合开发一个GUI应用程序来进行图像、视频以及实时摄像头上的缺陷检测。
数据集描述

该数据集包含以下信息:
- 数据规模 :共包含4312张图像样本
- 分类项数 :共有6类分类项
- 裂纹现象:该分类项下包含较多的研究文献
- 杂质:分析了图像中常见的金属杂质分布情况
- 斑块状物:识别出图像中的斑块状金属颗粒特征
- 亚微米级表面损伤:重点研究了亚微米尺度的表面损伤特征
- 铁路道岔处的鳞状结构:分析了不同道岔处金属组织中的鳞状结构特征
- 划痕状态:评估了不同划痕状态下的金属性能变化规律
- 分类项数 :共有6类分类项
数据集组织
假设你的数据集目录结构如下:
steel_defect_dataset/
├── train/
│ ├── images/
│ └── labels/
├── valid/
│ ├── images/
│ └── labels/
└── data.yaml # 数据配置文件
AI写代码
其中:
train/存储着训练数据集的所有图像及其对应的标注信息文件。valid/存储着验证数据集的所有图像及其对应的标注信息文件。data.yaml包含了完整的数据配置参数。
数据配置文件
创建或确认data.yaml文件是否正确配置了数据集路径和类别信息:
train: ./train/images/ # 训练集图像路径
val: ./valid/images/ # 验证集图像路径
test: ./test/images/ # 测试集图像路径(如果有)
# Classes
nc: 6 # 类别数量
names: ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches'] # 类别名称列表
AI写代码
安装相关库
确保安装了以下库:
pip install opencv-python-headless # 如果不需要显示窗口,可以使用headless版本
pip install opencv-python # 如果需要显示窗口
pip install ultralytics
pip install tk
AI写代码
构建GUI应用程序
开发一个基于图形用户界面(GUI)的应用程序。该应用能够实现对图像识别、视频分析以及实时摄像头数据处理的功能模块设计。
主要功能模块
- 导入预训练好的YOLOv8模型。
- 完成一张图片的图像识别任务。
- 解析视频流,并对每帧执行分析。
- 通过实时获取摄像头画面完成监控。
示例代码
以下是一个基于Python的简单GUI程序范例。该程序采用Tkinter库构建界面框架,并结合YOLOv8模型进行目标检测的同时利用OpenCV库展示检测结果
import tkinter as tk
from tkinter import filedialog
import cv2
import numpy as np
from ultralytics import YOLO
# 加载模型
model = YOLO("path/to/best.pt") # 替换为实际的模型路径
def detect_image(image_path):
results = model.predict(source=image_path, conf=0.5)
result = results[0]
boxes = result.boxes.xyxy.cpu().numpy().astype(int)
labels = result.names
for box in boxes:
cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
cv2.putText(image, labels[int(result.boxes.cls[box])], (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow("Detected Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
def detect_video(video_path):
cap = cv2.VideoCapture(video_path)
while True:
ret, frame = cap.read()
if not ret:
break
results = model.predict(source=frame, conf=0.5)
result = results[0]
boxes = result.boxes.xyxy.cpu().numpy().astype(int)
labels = result.names
for box in boxes:
cv2.rectangle(frame, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
cv2.putText(frame, labels[int(result.boxes.cls[box])], (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow("Detected Video", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
def detect_camera():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = model.predict(source=frame, conf=0.5)
result = results[0]
boxes = result.boxes.xyxy.cpu().numpy().astype(int)
labels = result.names
for box in boxes:
cv2.rectangle(frame, (box[0], box[1]), (box[2], box[3]), (0, 255, 0), 2)
cv2.putText(frame, labels[int(result.boxes.cls[box])], (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.imshow("Camera Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
def select_image():
file_path = filedialog.askopenfilename()
if file_path:
image = cv2.imread(file_path)
detect_image(image)
def select_video():
file_path = filedialog.askopenfilename()
if file_path:
detect_video(file_path)
# 创建主窗口
root = tk.Tk()
root.title("钢材表面缺陷检测")
# 创建按钮
btn_image = tk.Button(root, text="选择图片", command=select_image)
btn_video = tk.Button(root, text="选择视频", command=select_video)
btn_camera = tk.Button(root, text="启动摄像头", command=detect_camera)
# 布局
btn_image.pack(pady=10)
btn_video.pack(pady=10)
btn_camera.pack(pady=10)
root.mainloop()
AI写代码
运行效果
运行上述代码后,你会得到一个包含三个按钮的GUI窗口:
- 加载图片 :点击进入界面后会显示一个选项页面,请用户选择一张图片并执行检测操作。
- 加载视频文件 :用户点击进入选项页面后会看到多个视频文件列表,请您选择其中一个并开始检测流程。
- 打开摄像头设备 :用户操作流程中,在设备管理界面进行设置之后即可打开摄像头设备进行实时监控。
按照以下步骤操作:首先使用YOLOv8训练钢材表面缺陷检测的数据集;然后同时利用OpenCV和Tkinter搭建一个缺陷检测系统。
全部评论 (0)
还没有任何评论哟~
