接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测。
原理介绍:
把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人脸的位置。
主要代码:
前端:
function face_check(){
context.drawImage(video, 0, 0, 200, 150);
jQuery.post('faceCheck', { //指定发送图片到的servlet
snapData: canvas.toDataURL('image/jpg')
}).done(function(rs) {
//对结果集进行解析,判断是否存在人脸
console.log(JSON.stringify(rs));
if(rs.error_code == "222202"){
alert("没有人脸信息或人脸数量非1,请重新拍照!");
}else if(rs.error_code == "222207"){
alert("人脸库中没有您的注册信息,请先注册。");
}else if(rs.error_code == "223120"){
alert("请正确登录,不得伪造!");
}else if(rs.error_msg == "SUCCESS"){
context.strokeStyle = "#f00";
var face_list = rs.result.face_list;
console.dir(face_list);
face_list.forEach(function (item,index,array) {
var location = item.location;
console.dir(location);
context.strokeRect(location.left,location.top,location.width,location.height); //在图片中标识出人脸的位置
});
alert("检测成功!");
}
});
}
服务端:
@ResponseBody @RequestMapping(value = "faceCheck",method = RequestMethod.POST) public Map faceCheck(@RequestParam("snapData") String data) throws Exception{ //使用Ajax提交base64字符串,需要经过去头转码 String img_data = data.substring(22, data.length()); AipFace client = new AipFace(APP_ID_FACE, API_KEY_FACE, SECRET_KEY_FACE); JSONObject res = client.detect(img_data,"BASE64", new HashMap<String,String>()); //检测出人脸的位置 System.out.println(res.toString(2)); Map map = JSON.parseObject(res.toString()); return map; }