百度AIP:Springboot人脸对比

目录

一、简述

二、依赖

三、代码步骤

[3.1 实体注入](#3.1 实体注入)

[3.2 服务实现](#3.2 服务实现)

[3.3 其它实现](#3.3 其它实现)

四、小结


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

本篇文章主要介绍了

**百度AIP:Springboot人脸对比**

❤博主广交技术好友,喜欢文章的可以关注一下❤

一、简述

人脸识别在日常生活中是非常常见的功能,它大量的应用于APP的认证(实名认证)、验证(手机识别开锁),本篇文章是通过百度人脸识别(AIP)实现人脸对比或实名认证的实现步骤,通过Springboot+SDK的方式实现,实现人脸1:1对比接口实现人脸和活体检测,接口功能是免费的(但有次数限制)。

二、依赖

调用百度AIP接口,我们需要使用以下依赖进行在线导入,也可以使用jar包的方式进行导入(记得在打包时包含本地依赖路径)

XML 复制代码
<dependency>
   <groupId>com.baidu.aip</groupId>
   <artifactId>java-sdk</artifactId>
   <version>4.16.19</version>
</dependency>

三、代码步骤

3.1 实体注入

SDK中提供了一个AipFace客户端,用于快捷的调用人脸识别相关接口,所以首先需要将AipFace交给Spring管理,其实就是Bean的注入,代码如下:

java 复制代码
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 服务实现

java 复制代码
//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 其它实现

对上述实现的人脸对比功能进行扩展可实现如人脸验证、实名认证等功能,如这里作为实名认证的代码如下:

java 复制代码
   /**
     * 认证用户信息
     * @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实名认证、智能门禁系统、金融开户验证等需要生物识别的场景。


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

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

相关推荐
华仔啊10 分钟前
工作5年没碰过分布式锁,是我太菜还是公司太稳?网友:太真实了!
java·后端
卿·静26 分钟前
Node.js对接即梦AI实现“千军万马”视频
前端·javascript·人工智能·后端·node.js
蓝倾9761 小时前
小红书获取用户作品列表API接口操作指南
java·服务器·前端·python·电商开放平台·开放api接口
SamDeepThinking1 小时前
在 Cursor IDE 中配置 SQLTools 连接 MySQL 数据库指南(Windows 11)
后端·ai编程·cursor
聆风吟º1 小时前
【Spring Boot 报错已解决】Web server failed to start. Port 8080 was already in use.
spring boot·笔记·技术干货
武子康1 小时前
大数据-92 Spark 深入解析 Spark Standalone 模式:组件构成、提交流程与性能优化
大数据·后端·spark
青梅主码1 小时前
麦肯锡最新发布报告《想打破生产力天花板吗?重新思考完成工作的方式》:与其一味调整组织结构,不如从根本上简化工作流程,释放更大价值
后端
Python私教1 小时前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
一叶飘零_sweeeet2 小时前
SpringBoot 数据脱敏实战: 构建企业级敏感信息保护体系
java·spring boot·数据安全
绝无仅有2 小时前
面试总结之Nginx 经验常见问题汇总第二篇
后端·面试·github