好啦小伙伴们我回来了。说我拖沓不写文章的可以过来用你们的小拳头敲打我的胸口……所以今天我们就来说说用python+opencv+face++实现人脸验证和人脸解锁。代码量也不多。你可以在其他智能领域,比如智能家居中使用这些代码来判断你进门时是谁,也可以加入机器学习来判断来人是客人还是熟人。在讲之前,我们先把人脸识别的知识点进行适当的拓扑。好了,废话不多说,下面进入正题。解锁原理:原理其实很简单,没有那么复杂难懂(官方语言当然除外)。先说一下使用Face++实现人脸匹配的原理。推荐一个大家学习交流的地方:719+139+688,现在你打开相机,正好按下抓取。抓拍后,你的人脸图片会上传到远程服务器,服务器会提取你的人脸,生成一个独一无二的指纹(身份识别码)。这个指纹在Face++中叫做face\_token,这个我们后面会继续讲,这个指纹代表了你现在的身份。上传的内容经过服务器分析采集后,服务器会通过json发给你一个数据包,里面包含了你所有的面部特征。当你拿到服务器返回的json的时候,把face_token提取出来(这个很重要,face\_token相当于一个key)然后你把拿到的face\_token放到python的if里面去判断if如果是face\_token匹配则验证成功,不匹配则解锁失败。环境拓扑:操作系统:windows7Python版本:python2.7OpenCV版本:2.xFace++接口实现方案:1.上传人脸(我们在上一篇文章中已经实现了摄像头抓拍,本文不再赘述,直接用一个人脸图片代替)上传后json会返回人脸指纹(face\_token)2.创建人脸集合,将步骤1返回的人脸\_token添加到集合中3.通过python的判断是否包含当前人脸代码部分if:1.获取face\_token:这里重点关注request的内容:api规定需要post提交,所以这里使用了request.post()。传输的内容是请求的url,图片路径(必填!可以是本地绝对路径也可以是网络图片(image\_file,image\_url)data数据也是payload中的参数:apikey/apisecret必填,如果没有自申请return\_attributes可选,返回数据包括年龄、性别等return\_landmark可选填写是否检测并返回人脸关键点0表示不返回1表示detect83keypoints2表示检测到106个关键点报错的可能性)我们可以看到返回的json包里面有很多值。我们这里最重要的是获取这张脸的face\_toen,然后保存,记录到服务器的时候需要用到。注意:这里可能有朋友在网上随便找照片的时候会报错。这很可能是图片像素大小的问题。尝试找到高清的。跑完后,脸部部分会被绿框标记。2.创建人脸集合,加入face\_token。填写的face\_tokens就是刚才奥巴马图片返回的face\_token。别搞错了~记住人脸合集的名字,后面查询到的时候会用到。将上一部分获取的人脸\_token添加到一个新的人脸集合中。接下来的人脸比对将直接与服务器记录的指纹进行比对。这里简单的点击一下payload中的几个参数:display\_name:人脸集的名称outer\_id:FaceSet全局自定义logoforce\_merge:0:不在已有的FaceSet中添加人脸\_tokens,直接返回FACESET\_EXISTError1:addface\_tokenstotheexistingFaceSetface\_tokens:传入的人脸token操作效果:操作完成后,会返回一个faceset\_token,这个地方需要记录一下,因为我们已经上传了我们的Obamafacetoken到我们在服务器上创建的集合。这个facesettoken是我们的人脸集id或相册。3、判断是否是管理员:我们把奥巴马的颜值(facetoken)放到pythonif中,将要查询的人脸集(album)设置为我们之前获取的facesettoken,然后我们随机拍一张照片与之匹配.笔记本摄像头太低了,不好识别,看看效果吧,直接识别人脸就可以了。完了~当然,按理说现在应该有一些巨魔了。使用图片解锁不安全。可以做到。
