java 通过旷视接口实现人脸识别登陆

编程入门 行业动态 更新时间:2024-10-06 20:30:31

java 通过旷视<a href=https://www.elefans.com/category/jswz/34/1771365.html style=接口实现人脸识别登陆"/>

java 通过旷视接口实现人脸识别登陆

简单的人脸识别登陆

  • 人脸识别实现的接口
    • 对人脸识别登陆过程的理解
      • 搭建项目步骤



     一次偶然的机会接触到了开课吧的体验课,经过学习之后写一篇记录成长。

人脸识别实现的接口

  • 首先登陆 旷视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 ,继续下一步。 搜索此人的人脸是否在我们的人脸集合中。
  • 注册:查找为不在集合中,把人脸信息添加到集合中。在集合中就提示注册失败。
  • 登陆:查找为不在集合中,通知登陆失败。在集合中就提示登陆成功。
  • 由于服务器等异常,还需要增加条件提示服务器异常影响操作失败。

搭建项目步骤

  1. 打开Eclipse,创建一个 Dynamic web project ,命名FaceLoginByMyself。

  2. 创建项目完成后,在Src中创建一个包 com.zy.facelogin.Servlet,并在包中创建一个FaceControlServlet用来处理网页请求。

  3. 引用封装好的jar包,将其复制后,粘贴在如下位置。

  1. 这个时候你可能已经发现了api.properties文件,这个文件存储了我们很多方法里所要用到的几个必要参数,分别存储了API_KEY,API_SERECT,DISPLAY_NAME,OUTER_ID。前两个在Face++里可以找到,后面两个是自己定义的人脸集合。关于配置文件的读取在Util文件中,直接引用jar包的话必须把配置文件命名为上述形式,并且配置文件中对四个变量进行赋值。
  2. Util中的文件在faceMade_zy.jar中进行了封装,所以我们在引用了jar包之后就不需要重新写这些Util文件。
  3. 在写Servlet文件之前,我们要明白人脸识别登陆的整体流程。可以参考第二步中对人脸识别登陆的理解来写出登陆步骤。
  4. 下面给出Servlet中的代码,要注意@WebServlet("/faceController")这个注解,因为前段的代码里已经指明要调用这个Servlet,所以我们如果更改了括号内的内容,就没办法实现网页调用Servlet。
  5. 如果想要自己写Util,一定要注意相关API文档中介绍必要参数的调用,否则会出现一直注册失败,至于为什么我会知道!
  6. 相关文件的下载链接,原来另一个号注销了,又重新上传了一下。
  7. 有什么疑问的话,欢迎在评论区留言。
package com.zy.facelogin.servlet;import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.zy.facelogin.util.FaceUtil;
import com.zy.facelogin.util.ImageUtils;/*** Servlet implementation class FaceControler*/
@WebServlet("/faceController")
public class FaceController extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {File file = ImageUtils.uploadImg(request, "imgData", "upimg");boolean res = false;boolean delFlag = true;try {// 检测String faceToken = FaceUtil.detect(file);if (faceToken != null) {// 包含开始searchres = FaceUtil.search(faceToken);String type = request.getParameter("type");if ("register".equals(type)) {if (res) {// 已经注册过res = false;} else {// 开始注册,添加信息到faceSet中,保留照片res = FaceUtil.addFace(faceToken);delFlag = false;}}// 1 有 登陆成功// 2 无 登陆失败} else {// 不包含}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 删除照片if (delFlag)file.delete();// 数据返回到客户端,登陆是否成功//	if(res) response.sendRedirect(request.getContextPath()+"/index.jsp");PrintWriter out = response.getWriter();String msg = " {\"success\":" + res + "}";out.write(msg);out.close();//	response.sendRedirect(request.getContextPath()+"/index.jsp");}}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

更多推荐

java 通过旷视接口实现人脸识别登陆

本文发布于:2024-02-14 04:34:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1761804.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:接口   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!