设置目录:
该脚本首先定义包含图像和文本文件的源目录。然后,您指定将移动未配对的文件的目标目录。这种设置就像在开始项目之前组织工作空间一样,确保一切都在正确的位置。
创建目标目录:
如果未配对文件的目标目录不存在,脚本将创建它。这类似于为不适合现有文件系统的文档设置一个新文件夹。
识别未配对的文件:
该脚本列出了源目录中的所有文件,然后将它们分为图像文件 ( .jpg
) 和文本文件 ( .txt
)。它比较这些列表以查找任何未配对的文件 - 没有相应文本文件的图像,反之亦然。此过程类似于对一副纸牌进行排序以查找丢失或不匹配的对。
移动未配对的文件:
一旦识别,脚本会将这些未配对的文件移动到目标目录。此步骤就像从报告中删除不完整或不相关的页面,以确保仅保留完整且相关的信息。
输出结果:
最后,脚本提供了未配对的图像和文本文件的列表。此反馈对于检查和了解哪些文件未配对且需要注意至关重要。
import os
import shutil
# 设置源文件夹的路径
source_directory = r'D:\Desktop\3.v2i.yolov5pytorch\train\images' # 替换为你的源文件夹路径
# 生成目标文件夹的路径,保持和源文件夹相同的结构
target_directory = os.path.join(os.path.dirname(source_directory), '不成对')
# 如果目标文件夹不存在,创建它
if not os.path.exists(target_directory):
os.makedirs(target_directory)
# 初始化列表,用于跟踪不成对的文件
unpaired_images = []
unpaired_texts = []
# 获取源文件夹中的所有文件
files_in_directory = os.listdir(source_directory)
# 识别所有的图片文件和对应的文本文件
image_files = set(file for file in files_in_directory if file.endswith('.jpg'))
text_files = set(file for file in files_in_directory if file.endswith('.txt'))
# 寻找不成对的图片文件
for image_file in image_files:
text_file = image_file.replace('.jpg', '.txt')
if text_file not in text_files:
unpaired_images.append(image_file)
# 寻找不成对的文本文件
for text_file in text_files:
image_file = text_file.replace('.txt', '.jpg')
if image_file not in image_files:
unpaired_texts.append(text_file)
# 将不成对的文件移动到目标文件夹
for file in unpaired_images + unpaired_texts:
# 生成目标文件夹中的子目录路径,用于存储不成对文件
relative_path = os.path.relpath(os.path.join(source_directory, file), source_directory)
target_subdirectory = os.path.join(target_directory, os.path.dirname(relative_path))
os.makedirs(target_subdirectory, exist_ok=True)
# 移动文件到目标子目录
shutil.move(os.path.join(source_directory, file), os.path.join(target_subdirectory, file))
# 输出不成对的图片和文本文件列表
print('不成对的图片文件:', unpaired_images)
print('不成对的文本文件:', unpaired_texts)
为了加深您的理解,请考虑以下事项:
对于任何从事与图像相关的机器学习项目的人来说,该脚本都是一个非常宝贵的工具。通过自动化识别和管理未配对文件的过程,不仅可以节省时间,还有助于保持数据集的完整性和一致性,确保您的机器学习模型接受完整且准确的数据训练。
1. 使用 Python进行数据集分割:简洁完美的数据集划分脚本
2. 深度学习中的自动化标签转换:对数据集所有标签做映射转换
3. 识别并处理数据集中不配对图像和标签文件