目录
欢迎来到 盹猫(>^ω^<)的博客
本篇文章主要介绍了
[百度AIP:Springboot人脸对比]
❤博主广交技术好友,喜欢文章的可以关注一下❤
一、简述
人脸识别在日常生活中是非常常见的功能,它大量的应用于APP的认证(实名认证)、验证(手机识别开锁),本篇文章是通过百度人脸识别(AIP)实现人脸对比或实名认证的实现步骤,通过Springboot+SDK的方式实现,实现人脸1:1对比接口实现人脸和活体检测,接口功能是免费的(但有次数限制)。
二、依赖
调用百度AIP接口,我们需要使用以下依赖进行在线导入,也可以使用jar包的方式进行导入(记得在打包时包含本地依赖路径)
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.16.19</version>
</dependency>
三、代码步骤
3.1 实体注入
SDK中提供了一个AipFace客户端,用于快捷的调用人脸识别相关接口,所以首先需要将AipFace交给Spring管理,其实就是Bean的注入,代码如下:
package com.uav.config;
import com.baidu.aip.face.AipFace;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BaiduFaceConfig {
@Value("${baidu.face_app_id}")
private String APP_ID;
@Value("${baidu.face_api_key}")
private String API_KEY;
@Value("${baidu.face_secret_key}")
private String SECRET_KEY;
@Bean
public AipFace aipFaceClient() {
AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
return client;
}
}
这里的APP_ID、API_KEY、SECRET_KEY使用的是在百度AIP中创建的应用的相关配置,如果没有可以在创建API应用 该链接下进行创建。
注:这里创建的应用只是AIP功能的应用,和其它功能的KEY不能通用。
3.2 服务实现
//matchImg: 匹配人脸图片
//idCardFront: 身份证证明图片
@Override
public void checkFace(String matchImg, String idCardFront) {
MatchRequest matchRequest = new MatchRequest(matchImg, "BASE64");
MatchRequest idCardRequest = new MatchRequest(idCardFront, "BASE64");
ArrayList<MatchRequest> requests = new ArrayList<>();
requests.add(matchRequest);
requests.add(idCardRequest);
org.json.JSONObject object = aipFace.match(requests);
log.info("人脸识别接口返回结果:"+object.toString());
if (object.getInt("error_code")!=0) {
throw new SysException("人脸识别失败,请稍后再试!");
}
double score = object.getJSONObject("result").getDouble("score");
if (score < FACE_MATCH_THRESHOLD) {
throw new SysException("人脸识别失败,请上传清晰的照片!");
}
}
在该服务中,将接收到的Base64字符串的图片信息通过aipFace.match进行比较,将返回的结果分数进行比较,官方推荐的分数为80分,然后将识别结果返回。
3.3 其它实现
对上述实现的人脸对比功能进行扩展可实现如人脸验证、实名认证等功能,如这里作为实名认证的代码如下:
/**
* 认证用户信息
* @param certificationRequestDTO 认证信息
*/
@Override
public void authUserCertification(CertificationRequestDTO certificationRequestDTO) {
checkUserAuthStatus(certificationRequestDTO);
//人脸对比检测
checkFace(certificationRequestDTO.getMatchImg(),certificationRequestDTO.getIdCardFront());
//添加认证信息到数据库
try {
//TODO 这里是身份证照片
byte[] imageBytes = Base64.decodeBase64(certificationRequestDTO.getIdCardFront());
String url = OSSFactory.build().uploadSuffix(imageBytes, "jpg");
certificationRequestDTO.setIdCardFront(url);
}catch (Exception e){
throw new SysException("图片上传失败,请稍后再试!");
}
addCertification(certificationRequestDTO);
}
上述代码按照【检查实名状态】->【人脸对比】->【上传身份证照片】->【保存到数据库】的流程可以实现比较完整的实名认证流程。
注:上述代码为图片对比,按照严格流程应该做权威库(如公安数据)的比较,才能实现严格的实名认证流程。
四、小结
本文通过SpringBoot+百度AIP SDK实现了高效的人脸识别功能,其特点包括:
- 快速集成:10行代码完成核心验证
- 低成本:免费额度满足初期需求
- 可扩展:可无缝升级至企业级方案
适用项目:社交APP实名认证、智能门禁系统、金融开户验证等需要生物识别的场景。
如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链
感谢您的关注和收藏!!!!!!