人脸识别活体检测之张张嘴和眨眨眼——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);
    }


}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Uniapp是一款基于Vue.js框架开发的跨平台应用开发框架,它可以将我们的Vue代码编译成不同平台的原生应用。而腾讯云人脸识别检测是一项用于识别人脸并验证其真实性的技术,可以用于安全认证、人脸支付等场景。 在Uniapp中对接腾讯云人脸识别检测,我们可以按以下步骤进行: 1. 注册并创建腾讯云账号,开通人脸识别服务,并获取到相关的API密钥和访问密钥。 2. 在Uniapp项目中引入相关的插件或库,比如uni-app-faceid插件,该插件是为了方便Uniapp与腾讯云人脸识别服务进行交互而开发的。 3. 在Uniapp的页面中,使用插件提供的组件或方法,调用腾讯云人脸识别服务的接口,传递待识别人脸图像数据。 4. 接收腾讯云人脸识别服务返回的结果,根据返回的结果判断检测是否通过。 需要注意的是,在使用腾讯云人脸识别检测时,我们需要保证传入的人脸图像质量较高,且能够满足腾讯云人脸识别服务的要求,例如需要清晰可见的人脸图像。 除了以上步骤,根据具需求,我们还可以根据腾讯云人脸识别服务的其他功能,如人脸比对、人脸搜索等,进行更高级的功能扩展。 总之,Uniapp与腾讯云人脸识别检测的对接,需要通过引入插件或库来实现与腾讯云交互,并根据返回结果判断检测是否通过。这样我们就可以在Uniapp项目中应用腾讯云的人脸识别服务,实现更广泛的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆雄雄

哎,貌似还没开张来着呢~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值