当前位置: 首页 > 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;}});

在这里插入图片描述

http://www.xdnf.cn/news/79291.html

相关文章:

  • 表格识别版面还原分析-GO语言集成-表格文字识别接口
  • AutoJs相关学习
  • 国家自然科学基金答辩ppt制作案例模板下载
  • jsconfig.json文件的作用
  • 优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论
  • Android Studio开发 SharedPreferences 详解
  • 联易融受邀参加上海审计局金融审计处专题交流座谈
  • Linux进程6-alarm闹钟定时终止、raise发送信号、abort终止、pause挂起进程验证
  • Jenkins的地位和作用
  • Nginx:支持 HTTPS
  • SQL Tuning Advisor
  • [OpenGL] Lambertian材质漫反射BRDF方程的解释与推导
  • Spark-Streaming简介和核心编程
  • 发布一个npm包,更新包,删除包
  • Python基础知识语法归纳总结(数据类型-2)
  • 开源QML控件:进度条滑动控件(含源码下载链接)
  • 【Ansible】批量管理 Windows自动化运维
  • GTS-400 系列运动控制器板(六)----修改编码器计数方向
  • UML 状态图:以共享汽车系统状态图为例
  • 全面介绍AVFilter 的添加和使用
  • 基于cubeMX的hal库STM32实现硬件IIC通信控制OLED屏
  • 实战交易策略 篇十七:翻倍黑马交易策略
  • Spring Data详解:简化数据访问层的开发实践
  • Socket
  • 【数据可视化-21】水质安全数据可视化:探索化学物质与水质安全的关联
  • python 脚本引用django中的数据库model
  • UnitTest框架
  • c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第七式】程序的编译
  • ARM Cortex-M (STM32)如何调试HardFault
  • vite详细打包配置,包含性能优化、资源处理...