H5调用摄像头人脸注册、人脸搜索功能(Java)
756665228 发布于2019-01-04 12:00 浏览:4406 回复:13
2
收藏
最后编辑于2019-11-26

基于百度AI使用H5实现调用摄像头进行人脸注册、人脸搜索功能(Java)

整个项目源代码直接访问 https://gitee.com/xshuai/faceRecognition

由于社区html标签显示问题。详细博文可以看。https://blog.csdn.net/u010651369/article/details/85765723

体验地址(人脸注册) http://123.207.12.111:32095/storage
体验地址(人脸搜索) http://123.207.12.111:32095/
只是为了演示。所以是IP。最好用火狐浏览器访问。谷歌提示异常作者就不专门修改了。大家可以直接下载源码运行体验的
  • 前期准备工作

1.http://ai.ai/ 注册账户 实名认证 创建人脸应用 保存APPID、APIKEY、SECRETKEY 三个值备用

2.需要必须的Java经验(最好是会用SpringBoot、Maven)

3.https://trackingjs.com/ 了解一下trackingjs(进行视频中的人脸检测。更多功能自行阅读文档)

4.项目源码地址:https://gitee.com/xshuai/faceRecognition

  • 一个简单流程图

  • 示例图(先看下效果)

用户名为空提示
百度AI人脸注册需要userid groupid 演示功能 直接写固定的值 userid是UUID生成的一个字符串。大家根据实际情况更改即可

图片不包含人脸
确保图片中包含人脸即可。未做活体检测。活体检测请参考百度AI官方文档的H5活体检测

人脸注册成功

人脸搜索
trackingjs提供人脸检测功能。需要完整面部 缺少下颚也是不行的。搜索是使用百度AI接口。成功搜索返回注册给的用户名称

无需用户主动拍照。只要摄像头中包含完整面部即可。同样也不支持活体检测

FaceManagerController(人脸注册、搜索方法)

package cn.xsshome.controller;

import java.util.HashMap;
import java.util.UUID;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baidu.aip.face.AipFace;

import cn.xsshome.common.FactoryUtil;
import cn.xsshome.vo.FacePageBean;
import cn.xsshome.vo.FacePageResponse;
import cn.xsshome.vo.response.FaceSerachResponse;
/**
 * 人脸照片注册方法
 * @author 小帅丶
 *
 */
@Controller
@RequestMapping("/facemanager")
public class FaceManagerController {
	//人脸模块对象
	AipFace aipFace = FactoryUtil.getAipFace();
	private static Logger log = LoggerFactory.getLogger(FaceManagerController.class);
	/**
	 * 人脸注册
	 * @param facePageBean 请求的参数对象
	 * @param request  
	 * @param response
	 * @return
	 */
	@PostMapping("/add")
	@ResponseBody
	public String addFace(FacePageBean facePageBean,HttpServletRequest request, HttpServletResponse response){
		log.info("发送过来的参数{}",JSONObject.toJSONString(facePageBean));
		FacePageResponse facePageResponse = new FacePageResponse();
		if(facePageBean.getUser_info().equals("")||null==facePageBean.getUser_info()){
			facePageResponse.setError_code("100");
			facePageResponse.setError_msg("用户名称为空 请填写后重试");
			return JSON.toJSONString(facePageResponse);
		}else{
			String groupId = "xsdemo";//记得替换成自己的或通过页面传递用户组id(由数字、字母、下划线组成),长度限制128B
			String userId = UUID.randomUUID().toString().replace("-", "").toUpperCase();//用户id(由数字、字母、下划线组成),长度限制128B
			HashMap options = new HashMap();
			options.put("user_info","小帅丶");
			org.json.JSONObject resultObject = aipFace.addUser(facePageBean.getImgdata(), "BASE64", groupId, userId, options);
			log.info("注册返回的数据{}",resultObject.toString(2));
			return resultObject.toString();	
		}
	}
	/**
	 * 人脸搜索
	 * @param facePageBean 请求的参数对象
	 * @param request  
	 * @param response
	 * @return
	 */
	@PostMapping("/search")
	@ResponseBody
	public FacePageResponse searchFace(FacePageBean facePageBean,HttpServletRequest request, HttpServletResponse response){
		FacePageResponse facePageResponse = new FacePageResponse();
		log.info("发送过来的参数{}",JSONObject.toJSONString(facePageBean));
		String groupIdList = "xsdemo";//用户组id(由数字、字母、下划线组成),长度限制128B
		org.json.JSONObject resultObject = aipFace.search(facePageBean.getImgdata(), "BASE64", groupIdList, null);
		//使用fastjson处理返回的内容 直接用javabean接收 方便取值
		FaceSerachResponse faceSerachResponse = JSON.parseObject(resultObject.toString(), FaceSerachResponse.class);
		if("0".equals(faceSerachResponse.getError_code())&&"SUCCESS".equals(faceSerachResponse.getError_msg())){
			if(faceSerachResponse.getResult().getUser_list().get(0).getScore()>80f){
				facePageResponse.setError_code(faceSerachResponse.getError_code());
				facePageResponse.setError_msg(faceSerachResponse.getError_msg());
				facePageResponse.setUser_info(faceSerachResponse.getResult().getUser_list().get(0).getUser_info());
			}else{
				facePageResponse.setError_code("555");
				facePageResponse.setError_msg("人脸搜索失败,请重试或请先注册");
			}
		}else{
			facePageResponse.setError_code("500");
			facePageResponse.setError_msg(faceSerachResponse.getError_msg());
		}
		log.info("搜索返回的数据{}",resultObject.toString(2));
		return facePageResponse;
	}
}

页面代码

人脸注册页面

人脸搜索页面

trackerTask.stop();为防止人脸搜索接口调用中 多次提交问题。

由于社区html标签显示问题。详细博文可以看。https://blog.csdn.net/u010651369/article/details/85765723


	
  
    
    	
    		  
    		 
    	
      
  
     
     	   
     
  

收藏
点赞
2
个赞
共13条回复 最后由756665228回复于2019-11-26 10:50
#14756665228回复于2019-11-26 10:50:13
#13 180******28回复
好的,谢谢大佬,我可以加你其他联系方式吗

QQ; 783021975

0
#13180******28回复于2019-11-26 10:20:32

好的,谢谢大佬,我可以加你其他联系方式吗

0
#12756665228回复于2019-11-25 16:37:19
#11 180******28回复
谢谢大佬,我现在已经把照片注册进去了, 但是我这边出现这种问题,就是下边的从视频中剪贴的照片一直在闪,而且不停的向后台发送,怎么处理可以让他识别之后就不再重复向后台发送,
展开

识别成功后 跳转页面。

我只是做示例。识别成功没有任何跳转。人脸在摄像头中会导致这个情况的

1
#11180******28回复于2019-11-25 15:28:58

谢谢大佬,我现在已经把照片注册进去了,

但是我这边出现这种问题,就是下边的从视频中剪贴的照片一直在闪,而且不停的向后台发送,怎么处理可以让他识别之后就不再重复向后台发送,

0
#10756665228回复于2019-11-25 12:07:53
#9 180******28回复
那我直接拿一张照片可以注册吗,大佬

可以的呀。只要图片包含人脸就能注册进去。

正常业务应该是活体验证。证明是活体入库才有意义。

我写的示例不支持活体验证。想要活体验证 看百度文档。

1
#9180******28回复于2019-11-24 12:52:38

那我直接拿一张照片可以注册吗,大佬

0
#8756665228回复于2019-11-24 12:02:07
#7 180******28回复
大佬,我现在的项目是已经有了一个图片库,现在不想再进行注册这一步了,该怎么办,还请大佬指点
展开

这个是基于百度来的。你的图片库 必须录入到百度ai才行

0
#7180******28回复于2019-11-24 10:55:23

大佬,我现在的项目是已经有了一个图片库,现在不想再进行注册这一步了,该怎么办,还请大佬指点

0
#6756665228回复于2019-11-21 21:04:07
#5 180******28回复
大佬这个face2 是什么

face2?

1
#5180******28回复于2019-11-21 18:36:58

大佬这个face2 是什么

0
#4荒墨丶迷失回复于2019-01-04 12:09:53

完成了我H5系列未完成使命 哈哈哈

0
#3荒墨丶迷失回复于2019-01-04 12:09:25

大佬级小帅案例,非常帅

0
#2goJhou回复于2019-01-04 12:07:05

大佬级小帅案例。看着就帅哈哈哈哈

0
TOP
切换版块