人脸识别活体检测之张张嘴和眨眨眼——FaceServlet

简介: 人脸识别活体检测之张张嘴和眨眨眼——FaceServlet
package org.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.entity.Landmark;
import org.json.JSONObject;
import org.util.Json_Parsing;

import com.baidu.aip.face.AipFace;

public class FaceServlet extends HttpServlet {



    /**
    * @Fields serialVersionUID :该字段的意思:
    * 个人博客:https://blog.csdn.net/qq_34137397
    */

    private static final long serialVersionUID = 7753313994078255746L;
    //百度云信息
    private String APP_ID = "你的APP_ID ";
    private String API_KEY = "你的API_KEY ";
    private String SECRET_KEY = "你的SECRET_KEY ";
    private AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);  
    private Map<Integer, Object> dataMap = new ConcurrentHashMap<Integer,Object>();
    /**
     * (非 Javadoc)
    * <p>Description(描述):调用dopost的方法 </p>
    * <p>Title: doGet</p>
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    * 个人博客:https://blog.csdn.net/qq_34137397
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }


    /**
     * (非 Javadoc)
    * <p>Description(描述):dopost方法 </p>
    * <p>Title: doPost</p>
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    * 个人博客:https://blog.csdn.net/qq_34137397
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 防止乱码
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        String tag = request.getParameter("tag");           //区分操作类型的值
        String img = request.getParameter("img");           // 图像数据

        if(tag.equals("mouse")){
            //张嘴
            face_mouse(img,response,request);
        }else if(tag.equals("eye")){
            //眨眼比较
            face_eye(img,response,request);
        }

    }
    //C#winforms实现windows窗体人脸识别



    /**
     * 
    * @Description: 该方法的主要作用:张张嘴验证
    * @Title: face_jiance
    * @param  @param img
    * @param  @param response
    * @param  @param request 设定文件  
    * @return  返回类型:void   
    * @throws
    * 个人博客:https://blog.csdn.net/qq_34137397
     */
    private void face_mouse(String img, HttpServletResponse response,
            HttpServletRequest request) {

        /*if (dataMap.get(1) == null) {
            // 第一次请求
            landmark = face_jiance(img);
            System.out.println("第一次的上嘴唇:"+landmark.getMouse__top().get(0));
            System.out.println("第一次的嘴唇中心:"+landmark.getMouse_zhongxin().get(0));
            System.out.println("第一次的下嘴唇:"+landmark.getMouse__bottom().get(0));
            dataMap.put(1, landmark);
        } else {*/
            // 不是第一次请求
            Landmark landmark_next = face_jiance(img);
            // 和前一次的数据进行比较
            //Landmark landmark_pre = (Landmark) dataMap.get(1);
            // 嘴唇上面的位置相对于中心点对比
            PrintWriter writer;
            if ((landmark_next.getMouse_zhongxin().get(0) - landmark_next
                    .getMouse__top().get(0)) > 40&&(landmark_next.getMouse__bottom().get(0) - landmark_next
                            .getMouse_zhongxin().get(0)) > 30) {

                    try {
                        writer = response.getWriter();
                        writer.print("1");
                    } catch (IOException e) {
                        // TODO 异常执行块!
                        e.printStackTrace();
                }
            }else{
                try {
                    writer = response.getWriter();
                    writer.print("0");
                } catch (IOException e) {
                    // TODO 异常执行块!
                    e.printStackTrace();
            }
            }
            //dataMap.put(1,landmark_next);         //放进去  方便下次进行比较

        }

    /*}*/

    /**
     * 
    * @Description: 该方法的主要作用:眨眼对比
    * @Title: face_eye
    * @param  @param img
    * @param  @param response
    * @param  @param request 设定文件  
    * @return  返回类型:void   
    * @throws
    * 个人博客:https://blog.csdn.net/qq_34137397
     */
    private void face_eye(String img, HttpServletResponse response,
            HttpServletRequest request) {
        Landmark landmark_next = face_jiance(img);
         System.out.println("闭着眼的左眼上边与中间的值:"+((landmark_next.getLeft_eye_zhongxin().get(0))-(landmark_next.getLeft_eye_top().get(0))));
         System.out.println("闭着眼的左眼下边与中间的值:"+((landmark_next.getLeft_eye_bottom().get(0))-(landmark_next.getLeft_eye_zhongxin().get(0))));
         System.out.println("闭着眼的右眼上边与中间的值:"+((landmark_next.getRight_eye_zhongxin().get(0))-(landmark_next.getRight_eye_top().get(0))));
         System.out.println("闭着眼的右眼下边与中间的值:"+((landmark_next.getRight_eye_bottom().get(0))-(landmark_next.getRight_eye_zhongxin().get(0))));
        System.out.println("__________________________________________________");
         PrintWriter writer;
        if ((landmark_next.getLeft_eye_zhongxin().get(0))
                - (landmark_next.getLeft_eye_top().get(0)) < 6
                && (landmark_next.getRight_eye_zhongxin().get(0))
                        - (landmark_next.getRight_eye_top().get(0)) < 6) {
            System.out.println("进来了上边验证成功");
            // 继续判断下边的
            if ((landmark_next.getLeft_eye_bottom().get(0))
                    - (landmark_next.getLeft_eye_zhongxin().get(0)) < 6.6
                    && (landmark_next.getRight_eye_bottom().get(0))
                            - (landmark_next.getRight_eye_zhongxin().get(0)) < 6.6) {
                System.out.println("进来了下边验证成功");
                try {
                    writer = response.getWriter();
                    writer.print("1");
                } catch (IOException e) {
                    // TODO 异常执行块!
                    e.printStackTrace();
                }
            } else {
                try {
                    writer = response.getWriter();
                    writer.print("0");
                } catch (IOException e) {
                    // TODO 异常执行块!
                    e.printStackTrace();
                }
            }
        }
    }


    /**
     * 
    * @Description: 该方法的主要作用:活体检测
    * @Title: face_jiance
    * @param  @param img
    * @param  @return 设定文件  
    * @return  返回类型:Landmark   
    * @throws
    * 个人博客:https://blog.csdn.net/qq_34137397
     */
    private Landmark face_jiance(String img){
         HashMap<String, String> options = new HashMap<String, String>();
            options.put("face_field", "landmark");
            options.put("face_type", "LIVE");
            String image = img;
            String imageType = "BASE64";
            // 人脸检测
            JSONObject res = null;
            try {
                res = client.detect(image, imageType, options);
            } catch (Exception e) {
                // TODO 异常执行块!
                e.printStackTrace();

            }
           return Json_Parsing.parsingFaceJson(res);
    }


}
相关文章
|
7月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
|
7月前
|
JavaScript 前端开发 Java
纯前端JS实现人脸识别眨眨眼张张嘴案例
纯前端JS实现人脸识别眨眨眼张张嘴案例
|
7月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
|
7月前
|
JSON 安全 Java
人脸识别活体检测之张张嘴和眨眨眼
人脸识别活体检测之张张嘴和眨眨眼
|
6月前
|
机器学习/深度学习 数据采集 监控
人脸识别与检测
人脸识别与检测
116 4
|
6月前
|
移动开发 文字识别 算法
视觉智能开放平台产品使用合集之人脸核身是否包含静默活体检测
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
6月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之活体检测通过后,从返回结果中选择哪张图片进行人脸核身
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
6月前
|
机器学习/深度学习 监控 固态存储
人脸识别与检测
人脸识别与检测
59 0
|
7月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——index.html
纯js实现人脸识别眨眨眼张张嘴案例——index.html
|
7月前
|
弹性计算 Java PHP
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考
对于初次购买阿里云产品的用户来说,第一步要做的是注册账号并完成实名认证,然后才是购买阿里云服务器或者其他云产品,本文为大家以图文形式展示一下新手用户从注册阿里云账号、实名认证到购买云服务器完整详细教程,以供参考。
新手用户注册阿里云账号、实名认证、购买云服务器图文教程参考