当前位置: 首页 > news >正文

【人脸识别】百度人脸识别H5方案对接

经调研,百度的人脸识别使用场景比较广泛且准确率较高,项目上有用到,这里做一下记录,整体对接没有难度,按照文档操作就行。

一、准备工作

1、需要注册百度云开放平台(企业资质)注册指南
2、创建应用 指南

在这里插入图片描述

3、创建项目

在这里插入图片描述

二 、方案接入

我这边使用的是通过接口先上传用户信息,之后使用百度的人脸认证链接。

1、获取access_token

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class BaiduAuthService {private static final String AUTH_URL = "https://aip.baidubce.com/oauth/2.0/token";public static String getAccessToken(String apiKey, String secretKey) throws Exception {String url = String.format("%s?grant_type=client_credentials&client_id=%s&client_secret=%s",AUTH_URL, apiKey, secretKey);try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet httpGet = new HttpGet(url);try (CloseableHttpResponse response = httpClient.execute(httpGet)) {if (response.getStatusLine().getStatusCode() == 200) {String responseBody = EntityUtils.toString(response.getEntity());// 解析 JSON 响应,提取 access_tokenreturn parseAccessToken(responseBody);}throw new RuntimeException("获取 Access Token 失败: " + response.getStatusLine());}}}private static String parseAccessToken(String json) throws Exception {ObjectMapper objectMapper = new ObjectMapper();JsonNode node = objectMapper.readTree(json);return node.get("access_token").asText();}
}
2、获取verify_token
 private String verifyToken(String accessToken) {try {String url = "https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/verifyToken/generate?access_token=%s";JSONObject req = new JSONObject();req.put("plan_id", planId);String reqUrl = String.format(url, accessToken);String html = HttpRequestUtil.connect(reqUrl).header("Content-Type", "application/json").charset("utf-8").timeout(5000).json(JSON.toJSONString(req)).post().html();log.info("H5FaceRecognitionService | verifyToken | 获取verifyToken-百度-返回信息:{}", html);if (ObjectUtils.isEmpty(html)) {return "";}TokenData tokenData = JSONObject.parseObject(html, TokenData.class);if (ObjectUtils.isEmpty(tokenData) || !tokenData.isSuccess()) {return "";}JSONObject result = tokenData.getResult();if (ObjectUtils.isEmpty(result.getString("verify_token"))) {return "";}return result.getString("verify_token");} catch (Exception e) {return "";}}@Datapublic static class TokenData {private boolean success;private JSONObject result;private String log_id;}
3、提交用户信息
    public SubmitInfoResp submitInfo(String userName, String idCardNumber, String verifyToken, String accessToken) {try {Map<String, Object> req = new HashMap<>();req.put("verify_token", verifyToken);req.put("id_name", userName);req.put("id_no", idCardNumber);req.put("certificate_type", 0);//大陆居民身份证String url = String.format(submitUserInfo, accessToken);//这个工具类HttpRequestUtil,自己完全可以按照okhttp进行请求,一个post请求,怎么实现都OKString resp = HttpRequestUtil.connect(url).header("Content-Type", "application/json").charset("utf-8").timeout(5000).json(JSON.toJSONString(req)).post().html();log.info(String.format("H5FaceRecognitionService | submitInfo | 提交用户信息-百度-返回信息:%s", resp));return JSON.parseObject(resp, SubmitInfoResp.class);} catch (Exception e) {log.error(String.format("H5FaceRecognitionService | submitInfoError 提交用户信息异常,异常信息:%s", e.getMessage()));return null;}}
4、如果提交用户信息成功, 此时构造百度的人脸认证链接:
//h5认证链接private static final String h5AuthUrl = "https://brain.baidu.com/face/print/?token=%s&successUrl=%s&failedUrl=%s";//这里需要给出successUrl/failedUrl:认证成功/失败之后会自动跳转,需要进行编码String.format(h5AuthUrl, verifyToken, successUrl, failedUrl)
最后就是前端页面开发了,这里我使用的是uniapp(不贴代码了,主要是window.location.href )
		getH5FaceMatch(req).then((res) => {if (res.code == 200) {window.location.href = res.msg;}});

在这里插入图片描述

相关文章:

  • Spring AOP + Logback + MDC全链路日志追踪
  • Cesium学习笔记——坐标系统及坐标转换
  • 实用生活c语言脚本
  • Android如何通过aspectj打造一个无侵入式动态权限申请框架
  • webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)
  • IDEA创建Gradle项目然后删除报错解决方法
  • 调整IntelliJ IDEA中当前文件所在目录的显示位置
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]:在Mac App Store外创建、部署与公证
  • CoinNexus Chain 推出泰利风暴,开启 Web3.0 智能金融元宇宙科技新时代
  • Lua 第8部分 补充知识
  • webrtc使用
  • 自然语言处理 | 语言模型(LM) 浅析
  • 【MCP Node.js SDK 全栈进阶指南】中级篇(2):MCP身份验证与授权实践
  • AI数字人:品牌营销的新宠与增长密码(6/10)
  • 【Linux】计算机基本知识补充
  • 使用PyTorch构建神经网络笔记
  • 【音视频】FFmpeg内存模型
  • 准确--Tomcat更换证书
  • 短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析
  • 【延迟双删】简单解析
  • 国防部发布、中国军号及多家央媒官博发祝福海报:人民海军76岁生日快乐
  • 对话|四代中国缘的麦肯锡前高管:在混乱中制定规则,而不是复制旧秩序
  • 专访|前伊核谈判顾问:伊朗不信任美国,任何核协议都会有中俄参与
  • 新童谣童诗征稿活动在沪开启:设三个创作主题,面向全国征集
  • 18条举措!上海国际金融中心进一步提升跨境金融服务便利化
  • 印度空军计划增购40架法制“阵风”战机,此前已购买36架