2026 JAVA 腾讯云人脸比对工具类,支持url或者base64进行比对

官方网址API文档

https://cloud.tencent.com/document/product/867/44987?from=console_document_search

1、pom依赖

XML 复制代码
<!-- 腾讯云 SDK -->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java-iai</artifactId>
    <version>3.1.1171</version>
</dependency>
<!--  导入Json格式化依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    version>1.2.83</version>
</dependency>

2、工具类TengxunyunFaceUtils

java 复制代码
import com.alibaba.fastjson.JSONObject;
import com.tencentcloudapi.common.AbstractModel;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.iai.v20200303.IaiClient;
import com.tencentcloudapi.iai.v20200303.models.CompareFaceRequest;
import com.tencentcloudapi.iai.v20200303.models.CompareFaceResponse;

import java.util.HashMap;

public class TengxunyunFaceUtils {
    private static String ENDPOINT = "iai.tencentcloudapi.com";
    private static String SECRET_ID = "自己的secret_id";
    private static String SECRET_KEY = "自己的秘钥secret_key";


    public static void main(String[] args) throws TencentCloudSDKException {
        faceCompare("https://测试图片连接.jpg","https://测试图片连接.jpg",0l);
    }

    /**
     *
     * @param imgA 图A,url链接或者base64
     * @param imgB 图B,url链接或者base64
     * @param qualityControl  图片质量控制
     *    0: 不进行控制;默认
     *    1: 较低的质量要求,图像存在非常模糊,眼睛鼻子嘴巴遮挡至少其中一种或多种的情况;
     *    2: 一般的质量要求,图像存在偏亮,偏暗,模糊或一般模糊,眉毛遮挡,脸颊遮挡,下巴遮挡,至少其中三种的情况;
     *    3: 较高的质量要求,图像存在偏亮,偏暗,一般模糊,眉毛遮挡,脸颊遮挡,下巴遮挡,其中一到两种的情况;
     *    4: 很高的质量要求,各个维度均为最好或最多,在某一维度上存在轻微问题;
     * @return
     * @throws TencentCloudSDKException
     */
    public static HashMap faceCompare(String imgA, String imgB, Long qualityControl) throws TencentCloudSDKException {
        // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
        // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性
        // 以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
        Credential cred = new Credential(SECRET_ID, SECRET_KEY);

        // 实例化一个http选项,可选的,没有特殊需求可以跳过
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setEndpoint(ENDPOINT);

        // 实例化一个client选项,可选的,没有特殊需求可以跳过
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);

        // 实例化要请求产品的client对象,clientProfile是可选的
        IaiClient client = new IaiClient(cred, "ap-beijing", clientProfile);

        // 实例化一个请求对象,每个接口都会对应一个request对象
        CompareFaceRequest req = new CompareFaceRequest();


        //如果是链接会使用链接,如果是base64会使用base64
        if(imgA.contains("https://")){
            req.setUrlA(imgA);
        }else{
            req.setImageA(imgA);
        }
        if(imgB.contains("https://")){
            req.setUrlB(imgB);
        }else{
            req.setImageB(imgB);
        }
        req.setFaceModelVersion("3.0");

        //图片质量控制 若图片质量不满足要求,则返回结果中会提示图片质量检测不符要求
        //0: 不进行控制;默认
        //1: 较低的质量要求,图像存在非常模糊,眼睛鼻子嘴巴遮挡至少其中一种或多种的情况;
        //2: 一般的质量要求,图像存在偏亮,偏暗,模糊或一般模糊,眉毛遮挡,脸颊遮挡,下巴遮挡,至少其中三种的情况;
        //3: 较高的质量要求,图像存在偏亮,偏暗,一般模糊,眉毛遮挡,脸颊遮挡,下巴遮挡,其中一到两种的情况;
        //4: 很高的质量要求,各个维度均为最好或最多,在某一维度上存在轻微问题;
        req.setQualityControl(qualityControl);

        //是否开启图片旋转识别支持取值范围:0为不开启,1为开启
        req.setNeedRotateDetection(1L);
        //System.out.println("请求人脸比对请求参数:"+AbstractModel.toJsonString(req));
        //System.out.println("【请求腾讯云】人脸比对请求参数:" + AbstractModel.toJsonString(req));
        // 返回的resp是一个CompareFaceResponse的实例,与请求对象对应
        CompareFaceResponse resp = client.CompareFace(req);
        JSONObject jsonObject = JSONObject.parseObject(AbstractModel.toJsonString(resp));
        System.out.println("【请求腾讯云】人脸比对请求源码结果:" + jsonObject.toString());
        //比较结果数值
        String Score = null;
        //错误信息
        String message = null;
        //错误码
        String error = "0";
        if (jsonObject.getJSONObject("Error") == null) {
            Score = jsonObject.getString("Score");
        } else {
            error = "1";
            message = jsonObject.getJSONObject("Error").getString("Message");
        }
        HashMap hashMap = new HashMap<>();
        hashMap.put("Score", Score);
        hashMap.put("Error", error);
        hashMap.put("Message", message);
        System.out.println("人脸比对返回请求结果(java解析处理后):" + hashMap);
        return hashMap;
    }
}
相关推荐
wfsm1 小时前
reactive streaming
java
Coder_Boy_1 小时前
【Java核心】JVM核心知识清单
java·开发语言·jvm
在坚持一下我可没意见2 小时前
ideaPool论坛系统测试报告
java·spring boot·功能测试·selenium·jmeter·mybatis·压力测试
像少年啦飞驰点、2 小时前
零基础入门 RabbitMQ:从消息队列是什么到 Spring Boot 实战收发消息
java·spring boot·微服务·消息队列·rabbitmq·异步编程
v***57002 小时前
SpringBoot项目集成ONLYOFFICE
java·spring boot·后端
阿萨德528号2 小时前
Spring Boot实战:从零构建企业级用户中心系统(八)- 总结与最佳实践
java·spring boot·后端
爱上妖精的尾巴2 小时前
8-8 WPS JS宏 正则表达式 字符组与任选
java·服务器·前端
一嘴一个橘子2 小时前
mybatis-plus 基于 service 接口的 crud
java