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); } }