简单的人脸识别登陆
一次偶然的机会接触到了开课吧的体验课,经过学习之后写一篇记录成长。
人脸识别实现的接口
- 首先登陆 旷视Face++官网,点击技术–人脸检测–应用管理–创建API。
- 由于金钱等因素的原因,我选择了体验版。创建完成后记得打开API文档,然后准备我们一步步实现项目。
对人脸识别登陆过程的理解
先来介绍一下人脸识别的原理。通过连接旷视Face++人脸检测接口完成用户登陆,每次对人脸检测,一张人脸会返回一个face_token值,这个值对于相同的一张人脸每次也都是不一样的。对于旷视供的API中,search是每次登陆都需要使用的一个方法,它的原理是每次在FaceSet中寻找当前face_token值,在人脸集合中寻找,并返回请求值(下方有例子),在其中有一个名为 thresholds 的JSONObject它提供三个键值对(我个人这样理解了一下JSONObject), 他们的key值分别为(“1e-3”,“1e-4”,“1e-5”),然后我们获取其中1e-5的value,为什么要获取"1e-5"的值呢,这其实是一个精度,为了尽可能的减少出错的概率,所以选用这个值,同样的,在result数组中我们获得 confidence 的value(置信值),用这个置信值与1e-5进行比较,如果置信值比较大的话就可以确定在十万分之一出错的概率下,确保两个照片中的人脸是出自同一个人。(详情请参考Face++中search API,当然这些东西都在jar包中封装好了,你可以理解一下,直接引用。也可以理解一下,尝试自己重新封装这个jar包)。
{
"request_id": "1470481443,0d749845-7153-4f5e-a996-ffc5a1ac0a79",
"time_used": 1126,
"thresholds": {
"1e-3": 65.3,
"1e-5": 76.5,
"1e-4": 71.8
},
"results": [
{
"confidence": 96.46,
"user_id": "234723hgfd",
"face_token": "4dc8ba0650405fa7a4a5b0b5cb937f0b"
}
]
}
- 首先在搭建项目之前我们需要明白,通过人脸登陆需要有怎么样的一个过程。
- 我们需要先进行用户注册,不然的话人脸集合中没有人脸信息。
- 注册和登陆首先都是提供一张照片来检测照片中是否出现人脸。
- 那么第一个条件出现了—— 检测人脸
- 这个时候分为两种情况,即出现和不出现。
- 对于不出现人脸的情况我们可以直接宣布,注册(登陆)失败。
- 如果我们先不管登陆,对于检测出人脸的图片可以直接宣布注册成功吗?
- 当然是不可以,我们还需要对图片进行分析,分析我们这个照片中的人脸个数。
- 为什么要分析人脸个数呢?
- 注册登陆这种事情,当然是不能两个人一起来啦!
- 所以这个时候,第二个条件也出现了——检查人脸的个数
- 如果人脸个数>1,那么就可以提醒操作失败了。
- 如果人脸个数 == 1 ,继续下一步。 搜索此人的人脸是否在我们的人脸集合中。
- 注册:查找为不在集合中,把人脸信息添加到集合中。在集合中就提示注册失败。
- 登陆:查找为不在集合中,通知登陆失败。在集合中就提示登陆成功。
- 由于服务器等异常,还需要增加条件提示服务器异常影响操作失败。
搭建项目步骤
-
打开Eclipse,创建一个 Dynamic web project ,命名FaceLoginByMyself。
-
创建项目完成后,在Src中创建一个包 com.zy.facelogin.Servlet,并在包中创建一个FaceControlServlet用来处理网页请求。
-
引用封装好的jar包,将其复制后,粘贴在如下位置。