第一步: 使用.read().strip().split('\n') 将标签进行拆分
第二步:对路径进行拆分,分成文件夹名字和路径名
第三步:构造字典,将文件夹名做为key,图片的路径作为value,如果图片路径存在就进行添加
第四步:使用class构造出data_dir,list_file, 及每一个文件夹对应一个类别
第五步:循环train_set, 读取其中的属性list_file,构造出image_list 和 label_list
import os
def dataset_from_list(data_dir, list_file):
# 第一步:使用.read() 读取文件,使用strip()去除两边的空格, split('\n')根据换行符进行切分
lines = open(list_file, 'r').read().strip().split('\n')
from os import path
d = path.dirname(__file__) # 获得当前文件夹的名字
path = os.path.join(d, data_dir) # 构造出图片的路径
lines_dict = {}
for line in lines: # 循环每一张图片
image_path = line.split(' ')[0] # 获得图片的路径
key, picture_name = image_path.split('\\') # 进行路径的拆分,获得标签的key
picture_name = os.path.join(path, image_path) # 将图片路径与image_path结合获得单张图片的路径
if key not in lines_dict: # 如果字典的键不在,就构造出line_dict
lines_dict[key] = []
else:
if os.path.exists(picture_name): # 如果图片的路径存在,就将图片的路径添加在字典中
lines_dict[key].append(picture_name)
keys = lines_dict.keys()
dataset = []
# 使用类构造出key,和图片的list_file
for key in keys:
print(key)
print(lines_dict[key])
dataset.append(Dict_image(key, lines_dict[key]))
return dataset
class Dict_image():
def __init__(self, data_dir, list_file):
self.data_dir = data_dir
self.list_file = list_file
def p(self):
print('1')
# 将读入的列表的class的属性提取,构造出image_list 和 label_list
def get_image_paths_and_labels(train_set):
image_list = []
label_list = []
for i in range(len(train_set)):
image_list += train_set[i].list_file
label_list += [i] * len(train_set[i].list_file)
return image_list, label_list
data_dir = 'casia_maxpy_mtcnnalign_182_160'
list_file = 'cleaned_list.txt'
train_set = dataset_from_list(data_dir, list_file)
image_list, label_list = get_image_paths_and_labels(train_set)