人脸识别keras+opencv(三):遇到的问题

昨天写到,实验室小伙伴也是显示Hansen,所以今天就在网上下载了李冰冰的图片,新建了一个label看看。
这是扣完脸之后的图片.这是直接运行pick_face的。

这里写图片描述
但是,如果运行read_img就会有问题。
这里写图片描述
进入不了for循环了,也就是读不了图片了。后发现可以进入for循环,但是if endwith 出错。
直接拿出这一小段程度进行测试。

"""test read_img.endwith  判断s文件夹中是否有带有endstring为后缀的文件"""
def endWith(s,*endstring):
    array = map(s.endswith,endstring)
    if True in array:
        return True
    else:
        return False

#if __name__ == '__main__':
import os
s = os.listdir('E:\Anconda\openCV\pictures\source')
print(s) #['Hansen', 'Libingbing']
for i in s:
    print(1)
    #i = os.path.join('E:\Anconda\openCV\pictures\source\\', i)
    if endWith(i,'.jpg','.jpey'):
        print (i ,)
        print(2)

几经调试发现, read_img 和 pick_face 只是做早期图片处理的工作,当单独测试时,里面路径只能是最底层的文件夹,这个文件夹路径进去就得是图片,不能是子文件夹,然后子文件夹是图片的形式,不然出错。结论:先手工将person1,的源文件放入,然后扣人脸,保存在一个文件夹1,然后person2扣完后保存到文件夹2.。再将文件夹1,文件夹2复制到dataSet里面。然后将dataSet这层目录放到read_data里面。
在rad_data里对上面的问题解决的一句代码:

child_path = os.path.join(path, child_dir)

只有这样才能将子文件的图片读出了。
2.还有一个问题, person1,和person2放入dataSet里的图片数量要想打不多,不然问题非常大。preson2比person1多一倍,去训练,此时accuracy降低到0.6左右,打开摄像头进行识别,都显示person2,跟比认不出person1。

3.对于准确率的问题,猜测还需要, 建立神经元的时候,还需dropout。

猜你喜欢

转载自blog.csdn.net/weixin_41376658/article/details/79469055