前言
上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册,本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。
效果演示
首页
注册
后端响应数据:
登录
后端响应数据:
项目结构
后端代码实现
1、BaiduAiUtils工具类封装
package com.jzj.utils;
import com.baidu.aip.face.AipFace;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.HashMap;
/**
* 百度AI工具类封装
*
* @author 黎明
* @version 1.0
* @date 2023/8/5 9:35
*/
@Component
@Slf4j
public class BaiduAiUtils {
/*
注入百度个人用户相关配置
*/
@Value("${baidu.face.appId}")
private String APP_ID;
@Value("${baidu.face.apiKey}")
private String API_KEY;
@Value("${baidu.face.secretKey}")
private String SECRET_KEY;
@Value("${baidu.face.imageType}")
private String IMAGE_TYPE;
@Value("${baidu.face.groupId}")
private String groupId;
// 声明私有变量client,AipFace是百度人脸识别 API 的 Java 客户端类,用于与人脸识别服务进行通信。
private AipFace client;
// 用于存储一些参数配置(图片质量控制、活体检测控制)
private HashMap<String, String> map = new HashMap<>();
/*
私有的构造函数,表明该类是一个单例类,只能通过静态方法获取实例
*/
private BaiduAiUtils() {
// 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE
map.put("quality_control", "NORMAL");
// 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低拒绝率) NORMAL: 一般的活体要求(平衡的拒绝率, 通过率) HIGH: 较高的活体要求(高拒绝率 低通过率) 默认NONE
map.put("liveness_control", "LOW");
}
/*
用于在类初始化时执行client的初始化操作
*/
@PostConstruct
public void init() {
client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
}
/**
* 人脸注册:用户照片存入人脸库中
*/
public Boolean faceRegister(String userId, String image) {
JSONObject res = client.addUser(image, IMAGE_TYPE, groupId, userId, map);
log.info("人脸注册响应数据 :{}", res);
Integer errorCode = res.getInt("error_code");
return errorCode == 0 ? true : false;
}
/**
* 人脸更新:更新人脸库中的用户照片
*/
public Boolean faceUpdate(String userId, String image) {
JSONObject res = client.updateUser(image, IMAGE_TYPE, groupId, userId, map);
log.info("人脸更新响应数据 :{}", res);
Integer errorCode = res.getInt("error_code");
return errorCode == 0 ? true : false;
}
/**
* 人脸检测:判断上传的图片中是否具有面部信息
*/
public Boolean