第一步: 使用.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)

 

posted on 2019-06-24 11:02  python我的最爱  阅读(621)  评论(0编辑  收藏  举报