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

为什么80%的码农都做不了架构师?>>> hot3.png

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

人脸注册、人脸搜索使用百度AI接口。不支持H5活体检测(需要活体检测请参考百度AI-H5活体检测)

 体验地址(人脸注册) http://123.207.12.111:32095/storage
 体验地址(人脸搜索) http://123.207.12.111:32095/

只是为了演示。所以是IP。最好用火狐浏览器访问。谷歌提示异常作者就不专门修改了。大家可以直接下载源码运行体验的

前期准备工作

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

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

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

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

简易流程图

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

示例图(先看下效果)

用户名为空提示

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

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

图片不包含人脸

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

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

人脸注册成功

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

人脸搜索

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

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

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

搭建SpringBoot项目

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

pom配置相关库

百度SDK、fastjson、thymeleaf必不可少


  4.0.0

  cn.xsshome
  faceRecognition
  jar

  faceRecognition
  http://maven.apache.org
	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.4.RELEASE
		 
	
  
    UTF-8
    2.7.0
  

  
    
	
		com.alibaba
		fastjson
		1.2.35
	
	
		org.springframework
		springloaded
		1.2.6.RELEASE
	
	
		org.springframework.boot
		spring-boot-devtools
	
	
	
		org.springframework.boot
		spring-boot-starter
	
	
		
			org.springframework.boot
			spring-boot-starter-web
		
	
		org.springframework.boot
		spring-boot-starter-actuator
		
	
	
		org.springframework.boot
		spring-boot-starter-thymeleaf
		
	
	
		log4j
		log4j
		1.2.17
	
	
	
		com.baidu.aip
		java-sdk
		4.10.0
	
  
  	
	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					true
				
			
		
	

application.yml配置

server:
  port: 8888
#只简单配置了项目启动端口

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();为防止人脸搜索接口调用中 多次提交问题。




  
  人脸识别
  
  
  
  
  
  
  
  


	

请确保面部完整,未检测到请靠近摄像头

 

转载于:https://my.oschina.net/xshuai/blog/2996826

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