Python生成数据列表

利用Python根据目录下文件生成图片列表

跟我这样做:

  1. 定义训练参数
  2. 定义需要用到的变量、列表等
  3. 遍历每一类别的图片,并记录每一类别的数量和总数量
  4. 将遍历的图片路径、对应的类别存储到第二步定义的列表中
  5. 乱序后将相关信息存储到json文件

Let’s do it!

import os
import random

train_parameters = {
     
	"label_dict":{
     },  # 标签信息
	'class_dim':0,    # 类别个数
	"train_list_path": "/home/data/train.txt",       #train.txt路径
    "eval_list_path": "/home/data/eval.txt",         #eval.txt路径
    "readme_path": "/home/data/readme.json",         #readme.json路径
}

def get_data_list(dataPath, train_list_path, eval_list_path):
	class_infor  = []  # 存放所有类别,如:dog, cat, car……
	class_label = 0  # 标记类别标签
	class_num = 0  # 每一类多少张图片
	class_dim = 0  # 一共多少类
	all_class_images = 0  # 总的图片数量
	data_list_path = dataPath + "dataName/"  # 数据地址
	class_dirs = os.listdir(data_list_path) # 读取类别目录名称
	trainer_list = []  # 用于存储训练的文件地址,之后转成txt
	eval_list = []  # 用于推理训练的文件地址,之后转成txt

	for class_dir in class_dirs:  # 遍历目标地址下的所有目录文件,一个目录一个类别
		class_dim += 1  # 统计一共多少个文件夹,就是多少个类
		class_detail_list = {
     }  # 创建一个存储类别相关信息的字典,比如类别名称以及对应的标签等
		eval_sum = 0  # 某一类中的推理图片数量(类的相关信息之一)
		trainer_sum = 0  # 某一类的训练图片数量(类的相关信息之一)
		path = data_list_path + class_dir  # 某一类对应文件夹的路径
		img_paths = os.listdir(path)  # 某一类文件夹里的图片名称
		for img_path in img_paths:  # 遍历某一类文件里的每一张图片
			name_path = path + '/' + img_path  # 每张图片的路径
			if class_num % 10 == 0:  # 每10张取一个做验证数据
				eval_sum += 1
				eval_list.append(name_path + '\t%d' % class_label + '\n')
			else:
				trainer_sum += 1
				trainer_list.append(name_path + '\t%d' % class_label + '\n')
		class_num += 1  # 遍历一张图片,统计该类的有多上张图片的变量增1
		all_class_images += 1
		# 遍历完一类后,将该类的相关信息存储到字典中
		# 说明的json文件的class_detail数据
        class_detail_list['class_name'] = class_dir             #类别名称,如jiangwen
        class_detail_list['class_label'] = class_label          #类别标签
        class_detail_list['class_eval_images'] = eval_sum       #该类数据的测试集数目
        class_detail_list['class_trainer_images'] = trainer_sum #该类数据的训练集数目
        class_detail.append(class_detail_lis)
        #初始化标签列表
        train_parameters['label_dict'][str(class_label)] = class_dir
        class_label += 1  # 遍历完一个文件夹后,对应类别标签加1
    #初始化分类数
    train_parameters['class_dim'] = class_dim


	# 打乱文件顺序
	random.shuffle(eval_list)
	# 将打乱后的文件地址写入txt文件保存
	with open(eval_list_path, 'a') as f:
		for path in eval_list:
			f.write(path)
			
	random.shuffle(trainer_list)
	with open(train_list_path, 'a') as f:
		for path in eval_list:
			f.write(path)
	
	    # 说明的json文件信息
    readjson = {
     }
    readjson['all_class_name'] = data_list_path                  #文件父目录
    readjson['all_class_images'] = all_class_images
    readjson['class_detail'] = class_detail
    jsons = json.dumps(readjson, sort_keys=True, indent=4, separators=(',', ': '))
    with open(train_parameters['readme_path'],'w') as f:
        f.write(jsons)
    print ('生成数据列表完成!')
		
	
	

你可能感兴趣的:(Python,python)