LFW人脸数据集相关

1 简介

      LFW (Labeled Faces in the Wild) 人脸数据库是由美国马萨诸塞州立大学阿默斯特分校计算机视觉实验室整理完成的数据库,主要用来研究人脸识别问题。

      LFW 数据库主要是从互联网上搜集图像。

 

2 内容

LFW人脸数据集相关_第1张图片

 

      LFW数据集主要测试人脸识别的准确率。

      随机生成6000对人脸对,其中3000对为同一个人2张人脸照片,3000对为不同的人每人1张人脸的照片。

     测试过程:系统给出人脸对是不是同一人的结论。通过6000对人脸测试结果与真实情况比值可得acc。
     这个集合被广泛应用于评价 face verification算法的性能。 
 

4 获取pairs.txt代码

import glob
import os.path
import numpy as np
import os


def create_match_content():
    matched_result = set()
    k = 0
    sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
    # print(sub_dirs)
    # print(sub_dirs[0:])
    while len(matched_result) < 3000:
        for sub_dir in sub_dirs[1:]:
            # print(sub_dir)
            # 获取当前目录下所有的有效图片文件
            extensions = 'jpg'
            # 把图片存放在file_list列表里
            file_list = []
            # os.path.basename(sub_dir)返回sub_sir最后的文件名
            dir_name = os.path.basename(sub_dir)
            # print(dir_name)
            file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extensions)
            # glob.glob(file_glob)获取指定目录下的所有图片,存放在file_list中
            file_list.extend(glob.glob(file_glob))
            if not file_list: continue
            if len(file_list) >= 2:
                # print(dir_name)
                # 通过目录名获取类别的名称
                label_name = dir_name
                length = len(file_list)
                random_number1 = np.random.randint(length)
                random_number2 = np.random.randint(length)
                while random_number1 == random_number2:
                    random_number1 = np.random.randint(length)
                    random_number2 = np.random.randint(length)
                base_name1 = os.path.basename(file_list[random_number1 % length])  # 获取文件的名称
                base_name2 = os.path.basename(file_list[ random_number2 % length])
                if(file_list[random_number1%length] != file_list[random_number2%length]):
                    # 将当前类别的数据放入结果字典
                    matched_result.add(label_name +'\t'+ base_name1 + '\t' + base_name2)
                    k = k + 1

    # 返回整理好的所有数据
    return matched_result, k


def create_unmatch_content():
    """不同类的匹配对"""
    unmatched_result = set()
    k = 0
    while len(unmatched_result) < 3000:
        sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
        length_of_dir = len(sub_dirs)
        for j in range(24):
            for i in range(1, length_of_dir):
                class1 = sub_dirs[i]
                random_number = np.random.randint(length_of_dir)
                while random_number == 0 | random_number == i:
                    random_number = np.random.randint(length_of_dir)
                class2 = sub_dirs[random_number]
                class1_name = os.path.basename(class1)
                class2_name = os.path.basename(class2)
                # 获取当前目录下所有的有效图片文件
                extensions = 'jpg'
                file_list1 = []
                file_list2 = []
                # 把图片存放在file_list列表里
                file_glob1 = os.path.join(INPUT_DATA, class1_name, '*.' + extensions)
                file_list1.extend(glob.glob(file_glob1))
                file_glob2 = os.path.join(INPUT_DATA, class2_name, '*.' + extensions)
                file_list2.extend(glob.glob(file_glob2))
                if file_list1 and file_list2:
                    base_name1 = os.path.basename(file_list1[j % len(file_list1)])  # 获取文件的名称
                    base_name2 = os.path.basename(file_list2[j % len(file_list2)])
                    s = class2_name+'\t'+base_name2+'\t'+class1_name+'\t'+base_name1
                    if(s not in unmatched_result):
                        unmatched_result.add(class1_name+'\t'+base_name1+'\t'+class2_name+'\t'+base_name2)
                        if len(unmatched_result) > 3000:
                            break
                    k = k + 1
    return unmatched_result, k


if __name__ == '__main__':
    txt_path = 'pairs.txt'
    if os.path.isfile(txt_path):
        os.remove(txt_path)
    # 图片数据文件夹
    INPUT_DATA = r'lfw\lfw-funneled\lfw_funneled'
    result, k1 = create_match_content()
    print(k1)
    # print(result)
    result_un, k2 = create_unmatch_content()
    print(k2)
    # print(result_un)
    file = open(txt_path, 'w')
    result1 = list(result)
    result2 = list(result_un)
    file.write('10 300\n')
    for i in range(10):
        for pair in result1[i*300:i*300+300]:
            file.write(pair + '\n')
    
        for pair in result2[i*300:i*300+300]:
            file.write(pair + '\n')
    file.close()

LFW人脸数据集相关_第2张图片

 

你可能感兴趣的:(Algorithm,Pycharm,dlib)