您的位置:首页 > 其它

验证人脸识别算法

2017-09-16 21:57 190 查看
序言:博客(http://blog.csdn.net/xingchenbingbuyu/article/details/68482838)提到40行代码进行人脸识别,于是按照这篇博客介绍打流程,我尝试进行重现实验结果。

相关安装过程此处不详细介绍,参见博客1与博客2


过程1:为了保证实验结果不受客观环境影响,我尽量使我的环境与原博文中的环境一致。一是文件命名、文件放置位置我都与原博文给出的截图一致。如图1。


二是通过博文中给的测试图片,在网上通过以图搜图的功能分别找到相关的原图,并与原博文图片格式保持一致。如图2。图3。




三是代码直接从原博文Copy复制下来,未做任何改动。此处应注意,python对换行有要求,有时复制粘贴会出现格式混乱,代码无法正常运行,需要自行调整格式。

过程2:完成准备工作后,进入.py目录,运行人脸识别程序。完整结果截图如图4。


人脸识别的结果是“The person is:  Unknown2”,这与原博文提到的识别结果是
The 打person is Bingbing
”不一致。


什么会出现结果不一致?是因为人脸识别错误?原博
主算法存在问题?于是我进一步设置实验进行验证。

过程3:从图4截图看出,人脸识别扫描候选人图片顺序是girl6-->girl5--->girl1-->girl2----->girl3--->girl4。而人脸识别程序中候选人名单如下。# 候选人名单

candidate = ['Unknown1','Unknown2','Shishi','Unknown4','Bingbing','Feifei']
对于被测试图片test1,与之对应的候选人图片为girl5,而girl5是第二个扫描的图片,对应程序输出候选人名单数组中第二个元素,也就是“Unknown2”。
也就说原博主的算法并没有错,但是输出结果依赖与候选人图片被扫描顺序。此时我依然是猜测。

为了验证我的猜测,我查看原来的人脸识别程序,发现程序片段for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):这处在获取候选人图片时可能是依赖于系统。于是我将该程序段换成
#Input file
candiates = ['girl1.jpg','girl2.jpg','girl3.jpg','girl4.jpg','girl5.jpg','girl6.jpg'];
# 3.描述子提取

#for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
for f in candiates:
重新运行程序,将候选人图片按照girl1~ggirl6顺序输入,仍对test1进行识别,猜测输出结果应该为Bingbing,因为此时与test1是同一个人的图片girl5是第五个被扫描的图片,对应候选人名单数组元素为Binbing。实际输出结果为
Processing file: ../candidate-faces/girl1.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl2.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl3.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl4.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl5.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl6.jpg
Number of faces detected: 1

The person is: Bingbing


果然。输出结果和原博主一致,和我猜测的结果一致。为了进一步验证候选人图片扫描顺序会影响输出结果,我将候选人图片输出顺序改为图4扫描顺序(girl6-->girl5--->girl1-->girl2----->girl3--->girl4)。如下。
#Input file
#candiates = ['girl1.jpg','girl2.jpg','girl3.jpg','girl4.jpg','girl5.jpg','girl6.jpg'];
candiates = ['girl6.jpg','girl5.jpg','girl1.jpg','girl2.jpg','girl3.jpg','girl4.jpg'];
# 3.描述子提取

#for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
for f in candiates:
输出结果应为Unkown2。实际输出结果为:Processing file: ../candidate-faces/girl6.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl5.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl1.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl2.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl3.jpg
Number of faces detected: 1
Processing file: ../candidate-faces/girl4.jpg
Number of faces detected: 1

The person is: Unknown2


实际输出结果和我的猜测结果一致。
最终结论:原博主的人脸识别算法思路上是没有问题的,但是在算法实现上,输出结果依赖于输入文件打扫描顺序这是不合理的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息