Java实现人脸识别登陆和绑定

利用百度接口

使用以下工具类

public class BaiduFaceMatchUtil {

    private static final String baseUrl = "https://aip.baidubce.com";
    private static final String accessTokenCache = "accessTokenCache";
    private static String apiKey;
    private static String secretKey;

    private static RedisUtil redisUtilNew;

    @Value("${baidu.api-key}")
    private String API_KEY;
    @Value("${baidu.secret-key}")
    private String SECRET_KEY;
    @Resource
    private  RedisUtil redisUtil;


    /**
    * @Description: 人脸对比
    * @Param: [imagesList]
    * @return: java.lang.String
    * @Author: hcc
    * @Date: 2024/5/9
    */
    public static String checkFaceMatch(List<String> imagesList) {
        try {
            if (ObjectUtil.isEmpty(imagesList) || imagesList.size() != 2) {
                log.info("人脸对比参数错误");
                throw new ApiException("人脸识别失败,请稍后再试");
            }
            List<HashMap<String, Object>> mapList = imagesList.stream().map(item -> {
                HashMap<String, Object> map = new HashMap<>();
                map.put("image", item);
                map.put("image_type", "BASE64");
                map.put("face_type", "LIVE");
                return map;
            }).collect(Collectors.toList());
            String accessToken = getAccessToken();
            return sendHttpRequest(baseUrl + "/rest/2.0/face/v3/match?access_token=" + accessToken,
                    JSONUtil.toJsonStr(mapList),
                    "application/json");
        } catch (Exception e) {
            throw new ApiException("系统异常,人脸比对失败");
        }
    }

    /**
     * 人脸检测示例方法
     * <p>
     * 本方法用于通过调用百度人脸检测API,来检测一张图片中的人脸。该方法不接受任何参数,直接返回API的响应结果。
     * 主要步骤包括:构建请求参数,发送POST请求,处理返回结果。
     *
     * @return 返回从百度人脸检测API获取的结果字符串。如果在处理过程中发生异常,则返回null。
     * @Param userFace 人脸信息,base64格式
     */
    public static String faceDetect(String userFace) {
        // 初始化请求URL
        String url = null;
        try {
            url = baseUrl + "/rest/2.0/face/v3/detect?access_token=" + getAccessToken();
        } catch (Exception e) {
            throw new ApiException("人脸检测异常!");
        }
        Map<String, Object> params = MapUtil.newHashMap();

        // 图片的标识,这里使用的是一个示例FACE_TOKEN
        params.put("image", userFace);
        // 指定返回的人脸属性,如脸型和脸型
        params.put("face_field", "faceshape,facetype");
        // 图片类型设置为FACE_TOKEN
        params.put("image_type", "BASE64");

        try {
            return sendHttpRequest(url, JSONUtil.toJsonStr(params), "application/json");
        } catch (Exception e) {
            // 异常处理,打印堆栈信息
            throw new ApiException("人脸检测失败!");
        }
    }

    /**
     * 获取AccessToken
     */
    public static String getAccessToken() throws Exception {
        String token = redisUtilNew.getCacheObject(accessTokenCache);
        if (StringUtils.isBlank(token)) {
            String url = baseUrl + "/oauth/2.0/token";
            String params = "grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey;
            String responseBody = sendHttpRequest(url, params, "application/x-www-form-urlencoded");

            // 使用 Hutool 的 JSONUtil 将 JSON 字符串解析为 JSONObject
            JSONObject jsonResponse = JSONUtil.parseObj(responseBody);

            // 从 JSONObject 中提取 access_token
            String accessToken = jsonResponse.getStr("access_token");

            redisUtilNew.setCacheObject(accessTokenCache, accessToken, 7200, TimeUnit.SECONDS);
            return accessToken;
        } else {
            return token;
        }
    }

    /**
     * 发送 HTTP 请求并返回响应体
     *
     * @param url         请求的 URL
     * @param requestBody 请求体内容
     * @param contentType 请求的内容类型
     * @return 响应体的字符串表示
     * @throws Exception 如果发送请求失败或处理响应失败
     */
    public static String sendHttpRequest(String url, String requestBody, String contentType) throws Exception {
        HttpResponse response = HttpRequest.post(url)
                .body(requestBody)
                .contentType(contentType)
                .execute();

        int statusCode = response.getStatus();
        if (statusCode >= 200 && statusCode < 300) {
            return response.body();
        } else {
            throw new ApiException("HTTP error: " + statusCode);
        }
    }

    @PostConstruct
    public void setExpDate() {
        apiKey = this.API_KEY;
        secretKey = this.SECRET_KEY;
        redisUtilNew = this.redisUtil;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java实现人脸识别,可以使用Face++提供的API来实现。首先,你需要注册一个Face++的账号并创建API Key和API Secret。然后,你可以使用Postman等工具来调用Face++的API接口。 在人脸识别中,你可以使用人脸检测API来检测图片中的人脸。通过调用人脸检测API,你可以获取到人脸的位置和特征标识(face_token)。人脸特征标识是系统为每个人脸分配的唯一标识。 接下来,你可以使用人脸对比API来比较两个人脸的相似度。你需要提供两个人脸的特征标识(face_token)作为参数进行对比。 如果你想进行人脸搜索,即在已知身份用户的人脸集合中搜索新的人脸属于哪个已知身份用户,你可以调用人脸搜索API。你需要提供一个人脸库(FaceSet)来存储已知身份用户的人脸信息,并在调用人脸搜索API时指人脸库。 在Java代码中,你可以使用HTTP请求库来发送HTTP请求,并将API的URL、请求方法、请求体等信息设置好。然后,你可以解析API的响应结果来获取人脸识别的结果。 总结起来,要在Java实现人脸识别,你需要注册Face++账号,创建API Key和API Secret,使用API调用人脸检测、人脸对比和人脸搜索等功能,并在Java代码中发送HTTP请求并解析响应结果。 #### 引用[.reference_title] - *1* *3* [人脸识别-Java实现刷脸登录](https://blog.csdn.net/qq_54227907/article/details/124785956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [通过调用face++接口实现人脸识别Java)](https://blog.csdn.net/weixin_43890515/article/details/110789552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值