利用ChatGPT3.5 预处理车辆计数数据集:CARPK和PUCPR+

本文在 3.5的辅助下对CARPK数据集和PUCPR+数据集进行了预处理,包括划分数据集和将数据集内的框标注转换为点标注 。
1 数据集介绍
在简书上找到了它们的下载地址:
CARPK数据集和PUCPR+数据集由Hsieh等人[1]在2017年中提出,其中CARPK数据集包含使用无人机拍摄的989张训练图像和459张测试图像,包含89777辆汽车的信息 。PUCPR+数据集是原始PUCPR数据集的修订版本,由fxe相机捕获,包含100张训练图像和25张测试图像,共有17000辆汽车信息 。上述数据集涉及车辆照明、黑暗程度和背景等方面的显著变化,部分展示图见图1和图2 。
图1 CARPK数据集展示
图2 PUCPR+数据集展示
CARPK数据集和PUCPR+数据集内部结构一样,分为三个文件夹、和 。存放了各个图像的车辆框标注信息,与图像同名;中存放了图像;存放了训练集和测试集的图像名,如图3所示 。
图3 数据集结构图
2 划分数据集
根据里的训练集和测试集信息将对应图片和txt提取出来便可将数据集进行划分 。
首先询问:实现,根据txt里存储的文件名称(无后缀)将一个文件夹中的文件提取到新的文件夹中 。
答复如下:
要实现根据txt文件中存储的文件名称(无后缀)将一个文件夹中的文件提取到新的文件夹中,你可以使用的库来完成 。下面是一个示例代码,假设txt文件中每行包含一个文件名(无后缀),文件夹中的文件也都是以这些文件名命名的 。
【利用ChatGPT3.5 预处理车辆计数数据集:CARPK和PUCPR+】import osimport shutildef extract_files(source_folder, destination_folder, txt_file_path):with open(txt_file_path, 'r') as txt_file:for line in txt_file:file_name = line.strip()# Remove newline characters or spacessource_file_path = os.path.join(source_folder, file_name)destination_file_path = os.path.join(destination_folder, file_name)try:shutil.move(source_file_path, destination_file_path)print(f"Moved {file_name} to {destination_folder}")except FileNotFoundError:print(f"File {file_name} not found in {source_folder}")except shutil.Error as e:print(f"Error moving {file_name}: {e}")# 示例用法source_folder = '/path/to/source_folder'destination_folder = '/path/to/destination_folder'txt_file_path = '/path/to/file_names.txt'extract_files(source_folder, destination_folder, txt_file_path)
请注意,在运行代码之前,确保替换/path/to/、/path/to/和/path/to/.txt为实际的文件夹路径和txt文件路径 。此代码将逐行读取txt文件中的文件名,并将相应的文件从源文件夹移动到目标文件夹 。如果文件名对应的文件不存在或移动过程中出现错误,将会显示相应的错误消息 。
然后本文根据提供的复制语法实现了将图片和标注文件提取到训练集文件夹和测试集文件夹的语法,详情看注释即可,值得注意的是本文将图片和标注文件分到两个文件夹中了 。
# 根据给定的train.txt 和 test.txt提取图片import osimport shutildef select_and_copy_images(txt_file, source_folder, destination_folder_img,destination_folder_ann):# 创建目标文件夹(如果不存在)if not os.path.exists(destination_folder_img):os.makedirs(destination_folder_img)if not os.path.exists(destination_folder_ann):os.makedirs(destination_folder_ann)# 读取txt文件中的图片名with open(txt_file, 'r') as file:image_names = file.read().splitlines()# 从源文件夹中选择并复制图片到目标文件夹for image_name in image_names:source_path = os.path.join(os.path.join(source_folder,'Images'), image_name+'.png')print(source_path)destination_path = os.path.join(destination_folder_img, image_name+'.png')if os.path.exists(source_path):shutil.copyfile(source_path, destination_path)print("已复制图片: "+image_name)else:print("找不到图片: "+image_name)# 从源文件夹中选择并复制标注文件到目标文件夹for image_name in image_names:source_path = os.path.join(os.path.join(source_folder,'Annotations'), image_name+'.txt')print(source_path)destination_path = os.path.join(destination_folder_ann, image_name+'.txt')if os.path.exists(source_path):shutil.copyfile(source_path, destination_path)print("已复制标注文件: "+image_name)else:print("找不到标注文件: "+image_name)file=['train','test']for i in file:#遍历训练集和测试集txt_file = os.path.join(r'/CARPKandPUCPR/CARPK_devkit/data/ImageSets',i+'.txt') # 训练集=测试集txt的存放地址source_folder = os.path.join(r'/CARPKandPUCPR/CARPK_devkit/data') # 源路径destination_folder_img = os.path.join(r'/CARPKandPUCPR/CARPK_devkit/data/destination_folder', i,'img') # 目的路径-图片destination_folder_ann = os.path.join(r'/CARPKandPUCPR/CARPK_devkit/data/destination_folder', i,'ann')# 目的路径-标注文件select_and_copy_images(txt_file, source_folder, destination_folder_img,destination_folder_ann)