金属表面缺陷识别检测数据集 yolo数据集 共4000张 4类

 

金属表面缺陷识别检测数据集 yolo数据集 共4000张  4类

金属表面缺陷识别数据集介绍

数据集概览

这是一个针对金属表面缺陷识别的图像数据集,包含了4000张图片,其中包含四种类型的缺陷:腐蚀、划痕、孔洞和裂纹。这些缺陷在工业生产中很常见,因此对它们的自动检测具有重要意义。数据集已经按照YOLO格式进行了标注,可以用于YOLO系列的目标检测算法。

数据集特点

  • 规模适中: 包含4000张图片,足够训练和评估YOLO模型。
  • 多类别标注: 标注了四种常见的金属表面缺陷类型。
  • YOLO格式: 标签采用YOLO格式,适合用于YOLO系列目标检测模型。
  • 应用场景广: 可应用于质量控制、工业检测等领域。
数据集结构

数据集文件夹结构如下:

 
metal_defect_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/
│   ├── val/
│   └── test/
└── data.yaml
  • images/ 目录下存放图片文件。
  • labels/ 目录下存放对应的YOLO格式的文本标注文件。
  • data.yaml 文件定义了数据集的配置信息。
data.yaml 文件示例
 

yaml

深色版本

# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test

nc: 4  # 类别数量
names: ['Cacat_Korosi', 'Cacat_Las', 'Cacat_Lubang', 'Cacat_Retak']
关键代码示例

以下是一段Python代码示例,展示如何加载和查看数据集中的部分图片及其标注:

 

python

深色版本

import os
import cv2
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

def load_image_and_label(image_path, label_path):
    """
    加载图片和其对应的标注信息。
    
    Parameters:
        image_path (str): 图片路径。
        label_path (str): 标注文件路径。
        
    Returns:
        img (numpy.ndarray): 加载的图片。
        labels (list of dict): 标注信息列表。
    """
    img = cv2.imread(image_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换颜色空间
    
    with open(label_path, 'r') as f:
        lines = f.readlines()
        labels = []
        for line in lines:
            class_id, x_center, y_center, width, height = map(float, line.strip().split())
            labels.append({
                'class_id': int(class_id),
                'x_center': x_center,
                'y_center': y_center,
                'width': width,
                'height': height
            })
    
    return img, labels

def draw_bounding_boxes(img, labels, class_names):
    """
    在图片上绘制边界框。
    
    Parameters:
        img (numpy.ndarray): 图片。
        labels (list of dict): 标注信息列表。
        class_names (list of str): 类别名称列表。
    """
    fig, ax = plt.subplots(1, figsize=(12, 12))
    ax.imshow(img)
    
    for label in labels:
        x_center, y_center, width, height = label['x_center'], label['y_center'], label['width'], label['height']
        h, w, _ = img.shape
        x_min = int((x_center - width / 2) * w)
        y_min = int((y_center - height / 2) * h)
        x_max = int((x_center + width / 2) * w)
        y_max = int((y_center + height / 2) * h)
        
        rect = Rectangle((x_min, y_min), x_max - x_min, y_max - y_min, linewidth=2, edgecolor='r', facecolor='none')
        ax.add_patch(rect)
        
        class_name = class_names[label['class_id'] - 1]  # YOLO的类别ID从0开始
        ax.text(x_min, y_min, class_name, fontsize=12, color='red', backgroundcolor='white')
    
    plt.axis('off')
    plt.show()

if __name__ == "__main__":
    data_dir = "/path/to/your/dataset"
    train_images_dir = os.path.join(data_dir, "images/train")
    train_labels_dir = os.path.join(data_dir, "labels/train")

    # 选择任何一张训练集中的图片及其对应的标注信息
    image_name = os.listdir(train_images_dir)[0]  # 选择第一张图片
    label_name = image_name.replace(".jpg", ".txt")  # 假设图片是.jpg格式,标签文件名相同但扩展名为.txt
    
    image_path = os.path.join(train_images_dir, image_name)
    label_path = os.path.join(train_labels_dir, label_name)
    
    img, labels = load_image_and_label(image_path, label_path)
    
    print(f"Loaded image shape: {img.shape}")
    print(f"Number of objects: {len(labels)}")
    print(f"First object's label: {labels[0]}")
    
    # 绘制边界框
    class_names = ['Cacat_Korosi', 'Cacat_Las', 'Cacat_Lubang', 'Cacat_Retak']
    draw_bounding_boxes(img, labels, class_names)

请确保替换"/path/to/your/dataset"为你本地数据集的实际路径。这段代码会加载训练集中的一张图片及其对应的标注信息,并显示带有边界框和类别的图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值