AI助手帮你轻松做好Imagenet数据集重命名与复制
AI助手帮你轻松做好Imagenet数据集重命名与复制
任务需求
我们对Imagenet数据集进行了水下的退化处理,保存的数据集所有图片的深度图,格式为.npy。但是命名存在一些问题,现有格式为:n02009912_1916.JPEG.npy
,需要更改为n02009912_1916.npy
,因此尝试用ChatGPT对数据集进行批量处理
要求点
- 文件夹形式为一个数据集result,路径为
/home/lihuanyu/code/03AdaBins/result/
,有train,test和val三个文件夹,每个文件夹又有若干的类别子文件夹,子文件夹是每一个类别的文件,文件的命名格式为如下所示:n02009912_1916.JPEG.npy
。 - 我们需要将所有的文件去掉
.JPEG
去掉。 - 最后将遍历的所有文件按照输入存储形式重新存入
/home/lihuanyu/code/03AdaBins/result2
中,result2下也是有train,test和val三个文件夹,每个文件夹又有若干的类别子文件夹,子文件夹是每一个类别的文件。 - 以python语言形式呈现。
- 注意我们是将原文件复制移动到新的文件夹,只是更改名字。
- 需要打印处理流程:处理到那张图片和处理完成的标志。
代码实现
这段代码实现了对原始文件夹下所有图片进行重命名并复制到新的文件夹中的功能,并且能够打印出每张图片的处理进度。
首先,外层的for循环遍历了三个模式(train、test、val),对应着三个文件夹。然后,通过os.path.join()
函数将模式和根路径拼接得到该模式下的图片路径img_mode_path
和新文件夹路径processed_mode_path
,用于后续的操作。接着,内层的for循环遍历了该模式下所有类别的文件夹,并通过os.path.join()
函数将类别名和图片路径拼接得到该类别下的图片路径img_class_path
和新文件夹路径processed_class_path
,同时判断新文件夹是否存在,如果不存在则创建。最后,for循环内部又嵌套了一个for循环,并通过os.listdir()
函数遍历该类别下的所有图片文件,并通过os.path.join()
函数将图片名和图片路径拼接得到该图片的绝对路径img_path
。接着,判断该图片名是否包含.JPEG
,如果是,则通过str.replace()
函数将.JPEG
去掉得到新的图片名new_img_name
,再通过os.path.join()
函数将新的图片名和新的文件夹路径拼接得到新的图片路径new_img_path
,最后通过shutil.copy()
函数将原图片复制到新的文件夹中,并更改文件名为去掉.JPEG
的新文件名new_img_name
,并打印出相应的处理进度。如果该图片名不包含.JPEG
,则直接跳过,不进行任何操作。
每处理完一类别下所有图片,就会打印出“Finished processing all images in 类别路径”这样的提示语,表示该类别下所有图片处理完成。当处理完一个模式下的所有类别时,就会打印出“Processed all images in 模式 mode”这样的提示语,表示该模式下所有图片处理完成。最后,当处理完所有三个模式下的所有图片时,就会打印出“All done!”这样的提示语,表示整个程序运行完毕。
import os
import shutil
# 原始数据集路径
img_data_root = "/home/lihuanyu/code/03AdaBins/result/"
# 更改后的文件夹路径
img_processed_root = "/home/lihuanyu/code/03AdaBins/result2/"
# 遍历原始数据集所有图片
for mode in ['train', 'test', 'val']:
img_mode_path = os.path.join(img_data_root, mode)
processed_mode_path = os.path.join(img_processed_root, mode)
for class_name in os.listdir(img_mode_path):
# 每个类别的文件路径
img_class_path = os.path.join(img_mode_path, class_name)
processed_class_path = os.path.join(processed_mode_path, class_name)
# 如果新文件夹不存在则创建
if not os.path.exists(processed_class_path):
os.makedirs(processed_class_path)
# 遍历该类别下所有的图片
for img_name in os.listdir(img_class_path):
# 图片的绝对路径
img_path = os.path.join(img_class_path, img_name)
# 如果图片名中包含.JPEG,则重命名为去掉.JPEG的文件名
if ".JPEG" in img_name:
new_img_name = img_name.replace(".JPEG", "")
new_img_path = os.path.join(processed_class_path, new_img_name)
shutil.copy(img_path, new_img_path)
print("Copying image {} and renaming to {}...".format(img_path, new_img_path))
# 如果图片名中包含.npy,则直接复制到新文件夹中
else:
pass
print("Finished processing all images in {}!".format(processed_class_path))
print("Processed all images in {} mode!".format(mode))
print("All done!")