有时候,我们需要对已经有的数据集进行数据划分,划分后的coco数据集需要寻找对应的图片,可以使用下面的程序脚本。
import json
import os
import shutil
def copy_images_by_json(image_folder, json_file, output_folder):
with open(json_file, 'r') as file:
data = json.load(file)
image_data = {img['id']: img['file_name'] for img in data['images']}
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for image_id, file_name in image_data.items():
source_path = os.path.join(image_folder, file_name)
destination_path = os.path.join(output_folder, file_name)
if os.path.exists(source_path):
shutil.copy(source_path, destination_path)
print(f"已复制 {file_name} 到 {output_folder}")
else:
print(f"警告:在 {image_folder} 中找不到图像文件 {file_name}")
# 使用示例
image_folder_path = "输入文件夹路径"
json_file_path = "JSON 文件路径"
output_folder_path = "输出文件夹路径"
copy_images_by_json(image_folder_path, json_file_path, output_folder_path)
首先,导入三个必要的模块:json、os 和 shutil。json 模块用于读取 JSON 文件,os 模块用于处理文件路径,shutil 模块用于执行文件复制操作。
接下来,定义一个名为 copy_images_by_json 的函数,它接受三个参数:image_folder(输入图像文件夹路径)、json_file(JSON 文件路径)和 output_folder(输出文件夹路径)。
在函数内部,使用 open 函数打开 JSON 文件,并使用 json.load 函数将文件内容加载为 Python 字典形式的数据。这些数据包含了图像的 ID 和文件名等信息。
使用字典推导式创建一个名为 image_data 的字典,其中键是图像的 ID,值是图像的文件名。这样我们可以根据 ID 快速查找到对应的文件名。
接下来,使用 os.path.exists 函数检查输出文件夹是否存在。如果不存在,则使用 os.makedirs 函数创建该文件夹。
然后,使用一个循环遍历 image_data 字典中的每个图像。对于每个图像,构建源文件路径和目标文件路径。
使用 os.path.exists 函数检查源文件路径是否存在。如果存在,使用 shutil.copy 函数将源文件复制到目标文件路径,并打印相应的提示信息。
如果源文件路径不存在,则打印警告信息,指示找不到图像文件。
最后,提供一个使用示例,需要将输入文件夹路径、JSON 文件路径和输出文件夹路径替换为实际的路径。