百度AIP:Springboot人脸对比

发布于:2025-06-24 ⋅ 阅读:(25) ⋅ 点赞:(0)

目录

一、简述

二、依赖

三、代码步骤

3.1 实体注入

3.2 服务实现

3.3 其它实现

四、小结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[百度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实名认证、智能门禁系统、金融开户验证等需要生物识别的场景。


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

 


网站公告

今日签到

点亮在社区的每一天
去签到