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


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

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

相关推荐
技术猴小猴8 分钟前
如何使用Python实现UDP广播
开发语言·python·udp
come1123420 分钟前
深入分析JAR和WAR包的区别 (指南七)
android·spring boot·后端
武昌库里写JAVA34 分钟前
Java 设计模式在 Spring 框架中的实践:工厂模式与单例模式
java·vue.js·spring boot·sql·学习
峥嵘life35 分钟前
Android16 adb投屏工具Scrcpy介绍
android·开发语言·python·学习·web安全·adb
千里码aicood42 分钟前
springboot+vue心理健康服务小程序(源码+文档+调试+基础修改+答疑)
数据库·vue.js·spring boot
每天进步一点_JL1 小时前
深入理解 volatile
后端
李慕婉学姐1 小时前
【开题答辩过程】以《基于SpringBoot+Vue的扶贫助农平台的设计与实现》为例,不会开题答辩的可以进来看看
vue.js·spring boot·后端
麦兜*1 小时前
Redis高可用架构设计:主从复制、哨兵、Cluster集群模式深度对比
java·数据库·spring boot·redis·spring·spring cloud·缓存
王嘉俊9251 小时前
Redis 入门:高效缓存与数据存储的利器
java·数据库·redis·后端·spring·缓存·springboot
kangaroo.1 小时前
基于EasyExcel、FastExcel封装spring boot starter
spring boot·easyexcel·fastexcel