北京大学发布的PCB瑕疵数据集怎么使用

想问一下大家北京大学发布的PCB缺陷检测的数据集,旋转图片文件夹里的这种TXT是它们对应的标签吗?如果是的话我应该怎么去把它们和原始的图片混合在一起然后对它们进行划分呢。

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7655774
  • 你也可以参考下这篇文章:利用txt索引图像路径或直接对目录下的图像进行逐一测试
  • 以下回答来自chatgpt:

    首先,我们需要确认TXT文件是否是对应于图片的标签。可以打开其中一个TXT文件查看其内容,如果其中包含了关于图片的信息或者标签,那么可以确定这些TXT文件是对应于图片的标签。

    接下来,我们需要将这些TXT文件与原始图片混合在一起。可以使用Python的文件操作功能来实现这个目标。具体步骤如下:

    1. 首先,创建一个新的文件夹,用于存放混合后的图片和标签文件。例如,我们可以创建一个名为"merged_data"的文件夹。

    2. 使用Python的os库中的listdir函数读取旋转图片文件夹内的所有文件名,得到图片文件名列表。

    3. 遍历图片文件名列表,对于每个图片文件名,使用os.path.splitext函数拆分文件名和扩展名,得到文件名和扩展名。

    4. 使用拆分得到的文件名加上".txt"作为文件名,即可得到对应的TXT文件名。然后,使用Python的os.path.exists函数判断该TXT文件是否存在。如果存在,说明有对应的标签文件。

    5. 如果标签文件存在,我们可以使用open函数打开图片文件和标签文件,可以使用readlines函数读取标签文件的内容。

    6. 可以根据需要处理标签文件的内容,例如提取关键信息或者转换成适合训练的格式。

    7. 然后,将图片文件和处理后的标签文件保存到"merged_data"文件夹中,可以使用shutil库中的copy2函数实现文件复制功能。

    8. 完成以上步骤后,"merged_data"文件夹中就包含了混合后的图片和标签文件。

    最后,我们需要对数据集进行划分。可以根据需求和实际情况选择合适的划分方法。常见的划分方法有随机划分、按比例划分等。可以使用Python的random库中的函数来实现随机划分。以下是一个简单的示例代码:

    import os
    import random
    import shutil
    
    # 设置文件夹路径
    images_folder = "旋转图片文件夹路径"
    merged_data_folder = "合并数据文件夹路径"
    
    # 获取图片文件名列表
    image_files = os.listdir(images_folder)
    
    # 遍历图片文件
    for image_file in image_files:
        # 获取文件名和扩展名
        file_name, ext = os.path.splitext(image_file)
        # 拼接对应的TXT文件名
        txt_file = file_name + ".txt"
        # 判断TXT文件是否存在
        if os.path.exists(os.path.join(images_folder, txt_file)):
            # 打开图片文件和标签文件
            with open(os.path.join(images_folder, image_file), 'rb') as img_file, \
                    open(os.path.join(images_folder, txt_file), 'r') as txt_file:
                # 读取标签文件的内容
                txt_content = txt_file.readlines()
    
                # TODO: 处理标签文件的内容,根据需要进行相应的操作
    
                # 将图片文件和处理后的标签文件保存到合并数据文件夹中
                shutil.copy2(os.path.join(images_folder, image_file), merged_data_folder)
                with open(os.path.join(merged_data_folder, txt_file), 'w') as merged_txt:
                    merged_txt.writelines(txt_content)
    
    # 数据集划分示例:随机划分为训练集和测试集,比例为7:3
    all_files = os.listdir(merged_data_folder)
    random.shuffle(all_files)
    split_index = int(len(all_files) * 0.7)
    train_files = all_files[:split_index]
    test_files = all_files[split_index:]
    
    # 将训练集文件复制到train文件夹中
    train_folder = "train文件夹路径"
    for train_file in train_files:
        shutil.copy2(os.path.join(merged_data_folder, train_file), train_folder)
    
    # 将测试集文件复制到test文件夹中
    test_folder = "test文件夹路径"
    for test_file in test_files:
        shutil.copy2(os.path.join(merged_data_folder, test_file), test_folder)
    

    需要注意的是,以上代码仅提供了一个基础的实现思路,实际使用时需要根据实际情况进行适当的修改和调整。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^