干货福利:首先推荐给大家一款发送网络请求的神器PostMan,这款有关网络请求的神器几乎可以发送所有类型的请求,包括我们最常用的POST请求,我们写Android的程序员经常需要从服务端获取数据,然后将我们的数据展示在我们的APP中,但是第一步,我们就应该确定的是服务端是否给了我们有效的数据。这款软件不知道具体怎样使用的同学可以自行百度。
一、你将学到
最近公司的项目有一个部分涉及到人脸识别,所以自己开始接触人脸识别的知识,以前我们的人脸检测和人脸识别可以通过OpenCV来完成,现在商汤科技、百度、科大讯飞、Face++都是专业做人脸识别的,他们的人脸识别算法也更加强大,我们只要简单的学会调用他们提供的接口就可以了,因为公司使用的是Face++,所以我们这里以Face++为例。
通过本文我将带大家认识Face++的人脸检测和人脸搜索接口,实现人脸识别的流程。然后通过官网的API在Face++上创建自己的人脸集合,最后通过PostMan验证我们创建的人脸集合,本文目的就是为了使大家快速认识Face++的人脸检测和人脸搜索功能避免一些坑,至于怎样在自己APP中调用接口实现人脸登录功能,等有时间再分享给大家,不管怎样第一步还是应该来学习Face++官网上的内容。
二、前奏
首先肯定是注册Face++官网账号,然后根据相关提示完善开发者资料,接下来需要创建一个应用获得API Key和API Secret,因为调用Face++所有接口都需要这两个参数。
顺便记得绑定一下Bundle ID,Android系统下Bundle ID就是你所开发APP的包名。学习第三方最好的学习工具当然是它的官方文档,所以官网提供的文档我们一定要细看。既然有了官方文档那为什么我还写这篇简书呢,因为这可以帮助你以最短的时间使用Face++的人脸检测和人脸搜索,避免浪费不必要的时间,因为我当时学的时候网上很少有关于这方面的资料,所以自己细读官网文档花了不少时间,也有一些不明白的地方慢慢填坑。
三、创建人脸集合
(熟悉流程的同学可以直接跳过,理一下流程,假如我们需要开发一款类似刷脸登录的APP,当我们在客户端提交我们拍摄到的图片时,我们可以通过Face++提供的人脸搜索接口去搜索我们服务端的人脸集合中是否有与此图匹配的照片,如果有Face++会返回相应的参数给我们(Json数组),通过参数如果匹配,我们客户端拿到参数就可以判断让其登录成功,否则失败。所以现在我们首先要做的一件事情就是在Face++中创建一个属于我们自己的FaceSet人脸集合,要不然调用搜索接口就没意义了)根据官方文档,我们可以通过CreateAPI创建FaceSet,然后通过AddFaceAPI添加人脸face_tokens,那么问题来了,face_tokens是从哪里拿到的,所以怎样创建自己的人脸集合这一块自己弄了好长时间,现在我就来带大家快速创建属于自己的人脸集合。
步骤①通过CreateAPI创建FaceSet
这就是通过PostMan发送的POST请求,这里需要三个参数,前两个参数自己创建的应用里面有那是我们前奏部分就已经完成的了。outer_id,是我们自己随便起的一个名字,例如我这里就叫wangzi。发送请求如果显示Status 200OK,并返回了相应参数,则表示创建成功。这里参数的具体意义和作用官方文档都有,自己一定要去看!
步骤②通过人脸检测detectAPI获取face_token
第四个参数image_file是我们要上传的图片,请求成功以后,服务器就会返回一个人脸face_token给我们,注意你上传的图片中一定要有人脸,否则检测不到人脸,建议一开始上传的图片中最好只有一个人脸,比如我上传的就是我的帅照,当然上传的图片是有限制的比如图片的大小不能超过2M等等,这些官方文档写的都很清楚。
步骤③通过AddFaceAPI添加face_token
先跟着我做实现功能,参数不明白的可以上官网看,如果一切正常此时就表明添加成功了,可以看见我们的人脸集合中face_count为2,这是我们人脸集合的大小,那是因为之前我已经上传过一张了。到此我们就完成了我们人脸集合的创建。
步骤④通过SearchAPI实现人脸识别的功能
当我们调用这个API的时候传入相应的参数,第四个参数image_file就是我们我的照片,假如现在我们是使用APP刷脸登录,通过APP调用系统摄像头我们就可以进行拍照,然后SearchAPI发送网络请求通过image_file参数携带我们拍摄的照片。服务器会自动搜索我们的人脸集合,然后返回给我们一系列的值,其中confidence就是搜索结果的相似度,相似度越高说明约有可能是本人,比如我这里传的都是同一张图片,所以相似度有97.389这么高。(现在在我的APP项目中,我就可以通过自己的人脸进行识别通过了。)
微语:实际项目就是这样的,先添加照片到我们的人脸集合中,我们可以写一个程序调用这些接口一次性完成,然后写另一个程序调用搜索接口进行人脸识别。好了今天就讲到这里了,如果有时间在具体给大家分享自己的项目经验。