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