美文网首页研究有意思
LFW人脸数据集筛选有多张图的人

LFW人脸数据集筛选有多张图的人

作者: Cloudox_ | 来源:发表于2018-03-27 16:44 被阅读95次

    LFW人脸图像数据集是一个大型的人脸数据集,经常用于做人脸识别算法的衡量或比赛,其人脸图像来自网络,且在下载的图像包中要已经全部按照人名分别放在对应文件夹里了,这一点挺方便的。

    按人名分类好的人脸图像

    LFW不像CelebA一样有具体的戴眼镜与否等标签,不过官方也给出了一个txt文件,记录了各个人分别有多少张人脸图像,因此如果要做人脸识别的测试,可以筛选出有多张人脸图像的人的文件夹来做测试。

    首先我们把上面的记录了所有人名及对应图像数的txt保存起来,然后用python代码去遍历该txt,找到那些图像大于一张的人,保存到另一个txt中:

    import os
    
    f = open("nameAndNum.txt")
    newTxt = "imgMoreThanOne.txt"
    newf = open(newTxt, "a+")
    
    lines = f.readlines()
    print (len(lines))
    num = 1
    newNum = 0
    for line in lines:
        array = line.split()
        if (int(array[1]) > 1): 
            new_context = array[0] + '   ' + array[1] + '\n'
            newf.write(new_context)
            newNum = newNum + 1
        num = num+1
        if (num % 1000 == 0): print("%d / %d"%(num, len(lines)))
    
    print ("There are %d lines in %s" % (newNum, newTxt)) 
    
    f.close()
    newf.close()
    

    做法就是简单的遍历,找到数量值,判断大于1就存到新txt中去,因为LFW数据集有五千多个人,所以我们每遍历1000张就输出一下,聊作进度条。

    筛选完后会发现有1680个人含有两张以上的图像,和官网给出的数据一致。

    接着,就需要去移动文件夹了:

    # _*_ coding:utf-8 _*_
    import os
    import shutil
    
    f = open("imgMoreThanOne.txt")
    
    line = f.readline() 
    
    list = os.listdir("./")
    num = 0
    while line:
        for i in range(0, len(list)):
            fileName = os.path.basename(list[i])
    
            array = line.split()
            if (len(array) < 1): break
    
            if (fileName == array[0]):
                oldname= "./"+fileName
                newname="./多张图像的人/"+fileName
                shutil.move(oldname, newname)
                line = f.readline()
                num = num + 1
    
            if (i % 500 == 0): print(i)
        line = f.readline()
    
    print ("共移动%d个文件夹"%num)
    f.close()
    

    这里的做法是大循环遍历txt中每一行,对于每一行的人,在文件夹中进行寻找,如果找到了,则在txt中看下一行,文件夹中的指针也不回退,直接往下找,因为本身文件夹都是按照和txt中同样的顺序排列的,两个指针可以同步往下走,节省时间。

    那为什么还要外套一个大while循环遍历txt呢?因为我在一开始的时候只同步推进两个指针找,发现时不时出现找不到txt中的人名文件夹的情况,但实际上文件夹似乎确实在,可能是编码之类的问题导致没识别成功,但这很麻烦,总是移动几个文件夹就停了,而且除非你打印出来,不然你也不知道是哪个没找到,即使打印出来了,要在那么多文件夹里找也是件挺麻烦的事。我的解决方案就是,找不到就算了,跳过,继续找下一个,这样一来虽然会损失一些人,但是可以一移到底,不用老是停下来。

    最终我成功筛选除了1500多个人,也够了。


    查看作者首页

    相关文章

      网友评论

      本文标题:LFW人脸数据集筛选有多张图的人

      本文链接:https://www.haomeiwen.com/subject/fpjscftx.html