baiduapi-spring-boot-starter

组件简介

基于 百度智能云 - 人脸识别 在线API实现的人脸识别整合
离线SDK参考 :http://ai.baidu.com/tech/face/offline-sdk

使用说明

1、发布百度SDK到自己的 Maven私服(请下载新版本
mvn deploy:deploy-file -DgroupId=com.baidu.aip -DartifactId=java-sdk -Dversion=4.11.1 -Dpackaging=jar -Dfile=D:\aip-java-sdk-4.11.1.jar -Durl=http://127.0.0.1:8082/nexus/content/repositories/releases/ -DrepositoryId=nexus-releases
2、Spring Boot 项目添加 Maven 依赖
<dependency>
    <groupId>com.github.hiwepy</groupId>
    <artifactId>baiduapi-spring-boot-starter</artifactId>
    <version>${project.version}</version>
</dependency>
2、在application.yml文件中增加如下配置
#################################################################################################
### 百度人脸识别 配置:
#################################################################################################
baidu:
  face:
    v3:
      enabled: true
      client-id: xxxx
      client-secret: xxxx
3、使用示例

配置对象 FaceRecognitionProperties

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(FaceRecognitionProperties.PREFIX)
public class FaceRecognitionProperties {

    public static final String PREFIX = "face";

    /**
     * 人脸识别服务提供者(local: 本地实现, baidu: 百度人脸识别服务)
     */
    private String provider = "local";
    /**
     * 人脸识别数据分组(以学校代码为分组)
     */
    private String group = "14535";

    public String getProvider() {
        return provider;
    }

    public void setProvider(String provider) {
        this.provider = provider;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

}

本地使用示接口(为了方便多种识别方案对接,这里采用了提供者模式进行开发)

import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONObject;

public interface FaceRecognitionProvider {

    /**
     * Provider Name
     * @return
     */
    String getName();
    /**
     * 人脸检测与属性分析:
     * 1、人脸检测:检测图片中的人脸并标记出位置信息;
     * 2、人脸关键点:展示人脸的核心关键点信息,及150个关键点信息。
     * 3、人脸属性值:展示人脸属性信息,如年龄、性别等。
     * 4、人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。
     * @param imageBase64 人脸图片文件
     * @return
     */
    JSONObject detect(String imageBase64) throws Exception;
    /**
     * 活体检测:
     * 1、人脸基础信息:包括人脸框位置,人脸空间旋转角度,人脸置信度等信息。
     * 2、 人脸质量检测:判断人脸的遮挡、光照、模糊度、完整度等质量信息。可用于判断上传的人脸是否符合标准。
     * 3、 基于图片的活体检测:基于单张图片,判断图片中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节)。此能力可用于H5场景下的一些人脸采集场景中,增加人脸注册的安全性和真实性。
     * @param image 人脸图片文件
     * @return
     */
    JSONObject verify(MultipartFile image) throws Exception;
    /**
     * 人脸对比:
     * 1、两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;
     * 2、 多种图片类型:支持生活照、证件照、身份证芯片照、带网纹照四种类型的人脸对比;
     * 3、活体检测控制:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);
     * 4、质量检测控制:分析图片的中人脸的模糊度、角度、光照强度等特征,判断图片质量;
     * @param userId 用户ID
     * @param image 人脸图片文件
     * @return
     */
    JSONObject match(String userId, MultipartFile image) throws Exception;
    /**
     * 人脸搜索:
     * 1、人脸搜索:也称为1:N识别,在指定人脸集合中,找到最相似的人脸;
     * 2、人脸搜索 M:N识别:也称为M:N识别,待识别图片中含有多个人脸时,在指定人脸集合中,找到这多个人脸分别最相似的人脸
     * @param image 人脸图片文件
     * @return
     */
    JSONObject search(MultipartFile image) throws Exception;
    /**
     * 人脸融合:对两张人脸进行融合处理,生成的人脸同时具备两张人脸的外貌特征(并不是换脸)
     * 
     * 1、指定人脸:当图片中有多张人脸时,可以指定某一张人脸与模板图进行融合
     * 2、 图像融合:将检测到的两张人脸图片进行融合,输出一张融合后的人脸
     * 3、 黄反识别:利用图像识别能力,判断图片中是否存在色情、暴恐血腥场景、政治敏感人物
     * @param template 人脸融合模板图片文件
     * @param target 人脸融合人脸图片文件
     * @return
     */
    JSONObject merge(MultipartFile template, MultipartFile target) throws Exception;
}

基于百度人脸识别接口实现:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import com.alibaba.fastjson.JSONObject;
import com.baidu.ai.aip.spring.boot.FaceOption;
import com.baidu.ai.aip.spring.boot.FaceRecognitionV3Template;
import com.baidu.aip.util.Base64Util;

@Component
public class BaiduFaceRecognitionProvider implements FaceRecognitionProvider {

    @Autowired
    private FaceRecognitionV3Template faceRecognitionV3Template;
    @Autowired
    private FaceRecognitionProperties faceRecognitionProperties;
    @Autowired
    private IAuthzFaceDao authzFace;

    @Override
    public String getName() {
        return "baidu";
    }

    @Override
    public JSONObject detect(String imageBase64) throws Exception {
        return getFaceRecognitionV3Template().detect(imageBase64);
    }

    @Override
    public JSONObject verify(MultipartFile image) throws Exception {
        // 对文件进行转码
        String imageBase64 = Base64Util.encode(image.getBytes());
        return getFaceRecognitionV3Template().faceVerify(imageBase64, FaceOption.COMMON);
    }

    @Override
    public JSONObject match(String userId, MultipartFile image) throws Exception {
        AuthzFaceModel model = getAuthzFace().getModel(userId);
        String imageBase64_2 = Base64Util.encode(image.getBytes());
        return getFaceRecognitionV3Template().match(model.getFace(), imageBase64_2);
    }

    @Override
    public JSONObject search(MultipartFile image) throws Exception {
        // 对文件进行转码
        String imageBase64 = Base64Util.encode(image.getBytes());
        return getFaceRecognitionV3Template().search(imageBase64, faceRecognitionProperties.getGroup());
    }

    @Override
    public JSONObject merge(MultipartFile template, MultipartFile target) throws Exception {
        return getFaceRecognitionV3Template().merge(template.getBytes(), target.getBytes());
    }

    public FaceRecognitionV3Template getFaceRecognitionV3Template() {
        return faceRecognitionV3Template;
    }
}

Jeebiz 技术社区

Jeebiz 技术社区 微信公共号小程序,欢迎关注反馈意见和一起交流,关注公众号回复「Jeebiz」拉你入群。

公共号 小程序
作者:Jeebiz  创建时间:2023-03-19 23:05
最后编辑:Jeebiz  更新时间:2024-10-05 00:01