人工智能,百度AI人脸识别java版

人工智能,百度AI人脸识别java版

需求:人脸识别登录,人脸就需要有人脸的照片,数据库建一个字段face保存用户人脸的照片,jquery.webcam.js实现调用摄像头拍照,然后后端接受base64图片,然后与数据库的图片对比,用百度的人脸识别api对比,得出一个分数,分数大于80则登录成功。

前端代码:


js代码:

 


 

后端java代码:

//默认传入的参数带类型等参数:data:image/png;base64,
		String imgStr = req.getParameter("image");
		if (null != imgStr) {
			imgStr = imgStr.substring(imgStr.indexOf(",") + 1);
		}
		Boolean flag = GenerateImage(imgStr, filePath, fileName);
		if (flag) {
			
			String image = "img/" + "faceLogin" + "/" + fileName;
			boolean faceFlag = userService.testFaceLogin(image, session, req);
			if (faceFlag) {
				return "1";
			}else{
				session.setAttribute("login_error", "登录失败或者没有开启人脸识别功能");
				return "0";
			}
		}else{
				session.setAttribute("login_error", "登录失败或者没有开启人脸识别功能");
				return "0";
		}

人工智能,百度AI人脸识别java版_第1张图片

人工智能,百度AI人脸识别java版_第2张图片
人工智能,百度AI人脸识别java版_第3张图片
人工智能,百度AI人脸识别java版_第4张图片
缺点:1、谷歌浏览器开启摄像头需要https支持,IE浏览器摄像头开启无效,小编用的是360极速浏览器。
人工智能,百度AI人脸识别java版_第5张图片
2、需要安装最新flash
人工智能,百度AI人脸识别java版_第6张图片
3、浏览器需开通摄像头权限,不能是灰色的。

识别率很高,把自己的证件照上传,然后用有摄登录都识别出来了。

核心算法代码:

/**
	 * true 对比成功
	 * @return
	 */
    public static Boolean match(String img1, String img2) {
        // 请求url
    	Boolean flag = false;
        String url = "https://aip.baidubce.com/rest/2.0/face/v3/match";
        try {
            byte[] bytes1 = FileUtil.readFileByBytes(img1);
            byte[] bytes2 = FileUtil.readFileByBytes(img2);
            String image1 = Base64Util.encode(bytes1);
            String image2 = Base64Util.encode(bytes2);
            List> images = new ArrayList<>();
            Map map1 = new HashMap<>();
            map1.put("image", image1);
            map1.put("image_type", "BASE64");
            map1.put("face_type", "LIVE");
            map1.put("quality_control", "LOW");
            map1.put("liveness_control", "NORMAL");
            Map map2 = new HashMap<>();
            map2.put("image", image2);
            map2.put("image_type", "BASE64");
            map2.put("face_type", "LIVE");
            map2.put("quality_control", "LOW");
            map2.put("liveness_control", "NORMAL");
            images.add(map1);
            images.add(map2);
            String param = GsonUtils.toJson(images);
            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = AuthService.getAuth();
            String result = HttpUtil.post(url, accessToken, "application/json", param);
            JSONObject resultJson = parseJSONP(result);
            JSONObject scoreJson = parseJSONP(resultJson.getString("result"));
            String score = scoreJson.getString("score");
            Double obj1 = new Double(score);
            Double obj2 = new Double(80);
            int retval =  obj1.compareTo(obj2);
            if(retval > 0) {
               flag = true;
            }
            else if(retval < 0) {
               flag = false;
            }
            else {
               flag = true;
            }
            //score	是	float	人脸相似度得分,推荐阈值80分
            //{"error_code":0,"error_msg":"SUCCESS","log_id":747956922753388261,"timestamp":1552275338,"cached":0,"result":{"score":12.31431961,"face_list":[{"face_token":"e7c43e08d768787d7a3d5dac8af322f8"},{"face_token":"f7cd6a55d6b61bf643f3417d0b98cfb5"}]}}
            return flag;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

系统需要整合人脸登录java版的,请加QQ490647751(需付费)。
需要源码学习的,请加QQ490647751(需付费)。

你可能感兴趣的:(java之路)