验证人脸识别算法

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

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

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

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

三是代码直接从原博文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

实际输出结果和我的猜测结果一致。

最终结论:原博主的人脸识别算法思路上是没有问题的,但是在算法实现上,输出结果依赖于输入文件打扫描顺序这是不合理的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值