目录

  • 活体检测工具类
  • http工具类
  • 前端页面
  • 效果

使用V3接口,接口文档详见百度智能云 https://cloud.baidu.com/doc/FACE/s/Zk37c1urr

活体检测工具类

package *.*.*.api;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;import net.sf.json.JSONObject;/*** 活体检测工具类* @author sxxu**/
@Controller
@RequestMapping(value = "/",produces="text/html;charset=UTF-8;")
public class BDFaceVerify {public static final String APP_ID = "";public static final String API_KEY = "";public static final String SECRET_KEY = "";//接口地址public static String FACE_VERIFY ="https://aip.baidubce.com/rest/2.0/face/v3/faceverify";/*** 人脸在线活体检测示例代码* @param param base64图片* @return error_msg*/@ResponseBody@RequestMapping("/faceVerify")public String FaceVerify(@RequestBody String param,HttpServletRequest request,HttpServletResponse response) {try {JSONObject json = GAParamUtil.validateParams(param);if (json.isEmpty()) {return GAParamUtil.FAIL(json).toString();}String image = GiantUtils.stringOf(json.get("image"));Map<String, String> map = new HashMap<String, String>();map.put("image", image);map.put("image_type", "BASE64");map.put("face_field", "age,beauty,spoofing");map.put("option", "COMMON");List<Map<String, String>> list = new ArrayList<>();list.add(map);String params = JSON.toJSONString(list);System.out.println("======"+params);// 注意线上环境access_token有过期时间,此处为每次都重新请求// 获取accessTokenString accessToken = getAuth();String result = HttpUtil.post(FACE_VERIFY, accessToken, params);JSONObject jsonObject = JSONObject.fromObject(result);String error_msg = jsonObject.getString("error_msg");return error_msg;} catch (Exception e) {e.printStackTrace();}return null;}/*** 获取API访问token* 该token有一定的有效期,需要自行管理,当失效时需重新获取.* @return assess_token 示例:* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"*/private static String getAuth() {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + API_KEY// 3. 官网获取的 Secret Key+ "&client_secret=" + SECRET_KEY;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/System.err.println("result:" + result);JSONObject jsonObject = JSONObject.fromObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}
}

http工具类

package *.*.*.util;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;/*** http 工具类*/
public class HttpUtil {public static String post(String requestUrl, String accessToken, String params)throws Exception {String contentType = "application/x-www-form-urlencoded";return HttpUtil.post(requestUrl, accessToken, contentType, params);}public static String post(String requestUrl, String accessToken, String contentType, String params)throws Exception {String encoding = "UTF-8";if (requestUrl.contains("nlp")) {encoding = "GBK";}return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);}public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)throws Exception {String url = requestUrl + "?access_token=" + accessToken;return HttpUtil.postGeneralUrl(url, contentType, params, encoding);}public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)throws Exception {URL url = new URL(generalUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");// 设置通用的请求属性connection.setRequestProperty("Content-Type", contentType);connection.setRequestProperty("Connection", "Keep-Alive");connection.setUseCaches(false);connection.setDoOutput(true);connection.setDoInput(true);// 得到请求的输出流对象DataOutputStream out = new DataOutputStream(connection.getOutputStream());out.write(params.getBytes(encoding));out.flush();out.close();// 建立实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> headers = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : headers.keySet()) {System.err.println(key + "--->" + headers.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = null;in = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));String result = "";String getLine;while ((getLine = in.readLine()) != null) {result += getLine;}in.close();System.err.println("result:" + result);return result;}
}

前端页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
<script type="text/javascript" src="${staticPath}/static/html5/js/jquery.js"></script>
</head><body><input id="checkflag" type="hidden" value="1"><div class="form-group" id="facecheck"><div style="text-align:center"><span style="font-size: 20px;color: red">请拍照进行活体检测</span></div><video id="video" class="video" style="width: 300px;height: 270px"controls> </video><canvas id="canvas" width="300" height="230"style="float:right;margin-top:20px;"></canvas><div style="text-align:center"><span id="capture" onclick="snap()" class="gainetbtn">拍照</span></div><div style="text-align:center"><span id="capture" onclick="getCompetence()" class="gainetbtn">打开摄像头照</span></div><div style="text-align:center"><span id="capture" onclick="stopNavigator()" class="gainetbtn">关闭摄像头</span></div><br><div style="text-align:center"><span onclick="faceCheck()" class="gainetbtn">活体检测</span><div style="font-size: 20px;color: red" align="center" id="result"></div><input name="image" id="image" type="hidden" class="form-control"required></div></div>
</body>
<script type="text/javascript">$(function(){showFace();});function IsPC() {var userAgentInfo = navigator.userAgent;var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];var flag = true;for (var v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {flag = false;break;}}return flag;}var flag = IsPC(); //true为PC端,false为手机端var thisCancas;var thisContext;var thisVideo;// 调用权限(打开摄像头功能)function getCompetence() {var _this = this;_this.thisCancas = document.getElementById("canvas");_this.thisContext = this.thisCancas.getContext("2d");_this.thisVideo = document.getElementById("video");//_this.thisVideo.style.display = 'block';// 获取媒体属性,旧版本浏览器可能不支持mediaDevices,我们首先设置一个空对象if (navigator.mediaDevices === undefined) {navigator.mediaDevices = {};}// 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象// 使用getUserMedia,因为它会覆盖现有的属性。// 这里,如果缺少getUserMedia属性,就添加它。if (navigator.mediaDevices.getUserMedia === undefined) {navigator.mediaDevices.getUserMedia = function(constraints) {// 首先获取现存的getUserMedia(如果存在)var getUserMedia =navigator.webkitGetUserMedia ||navigator.mozGetUserMedia ||navigator.getUserMedia;// 有些浏览器不支持,会返回错误信息// 保持接口一致if (!getUserMedia) {//不存在则报错return Promise.reject(new Error("getUserMedia is not implemented in this browser"));}// 否则,使用Promise将调用包装到旧的navigator.getUserMediareturn new Promise(function(resolve, reject) {getUserMedia.call(navigator, constraints, resolve, reject);});};}var constraints = {audio: false,video: {width: this.videoWidth,height: this.videoHeight,transform: "scaleX(-1)"}};navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {// 旧的浏览器可能没有srcObjectif ("srcObject" in _this.thisVideo) {_this.thisVideo.srcObject = stream;} else {// 避免在新的浏览器中使用它,因为它正在被弃用。_this.thisVideo.src = window.URL.createObjectURL(stream);}_this.thisVideo.onloadedmetadata = function(e) {_this.thisVideo.play();};}).catch(err=> {//console.log(err);});};// 打开新增信息对话框function showFace() {$("#checkflag").val("-1");var canvas = document.getElementById('canvas');canvas.width = canvas.width$("#result").html("");getCompetence();}// 拍照function snap(){thisContext.drawImage(video, 0, 0, 300, 230);var imgData = thisCancas.toDataURL();$("#image").val(imgData);}// 关闭摄像头function stopNavigator() {this.thisVideo.srcObject.getTracks()[0].stop();}var clear_time;// 人脸核验function faceCheck(){var image=$("#image").val().split(",")[1];var param = {};param["image"] = image;$.ajax({url: '<%=basePath%>/faceVerify',type: "post",dateType:"json",headers:{"Content-Type" : "application/json;charset=UTF-8"},data: JSON.stringify(param),success: function (data) {$("#result").html(data);}});}</script>
</html>

效果

百度智能云在线活体检测相关推荐

  1. 百度智能云人脸活体检测系统获得公安部一所首批安全性能认证

    随着人工智能视觉技术的迅速发展,"刷脸"远程实名认证因其核验流程快捷,用户体验良好的优点被各行业所接受和应用,在银行开户.手机办卡.社交直播.电商用户认证等业务环节中随处可见,且往 ...

  2. 微信小程序通过百度智能云实现人脸检测

    可通过微信小程序[在线颜值检测]功能,查看最终效果. 1.注册登录百度智能云 百度智能云-登录 链接 1.1 注册登录登录之后,进入人脸识别页面. 2.创建应用,获取key 2.1 打开[公有云服务] ...

  3. 百度智能云首秀CES的主场感觉:用两个“中国第一”抛出AI新态势

    作者|震霆   出品|新芒X        公众号|GOwithAI 每年的1月初,总有那么几天令科技圈躁动不已. 没错,说的就是此时此刻,当然也毫不夸张. 只是因为在那座叫拉斯维加斯的赌城,有一场叫 ...

  4. 百度智能云牵手中国跳水队,体育和AI正在酝酿新化学反应

    4月22日,百度大厦迎来了一群特殊的参观者. 时常在赛场上摘金的中国国家跳水队现身百度大厦,中国"梦之队"的运动健儿们开启了一场奇妙的AI之旅:体验百度的无人车,与自动驾驶展开了一 ...

  5. 基于百度智能云的人脸识别登陆系统

    基于百度智能云的人脸识别登陆系统 设计说明 后端项目结构 前端页面 项目版本1下载 使用说明 项目版本1的Gitee链接 项目版本2--基于人脸对比的登陆系统 项目2下载链接 版本2的Gitee链接 ...

  6. 百度智能云服务器BCC实例在线配置变更

    您可以根据需求灵活的调整BCC实例的配置,包括CPU.内存.系统盘.弹性带宽等. 升级CPU和内存 背景信息 对预付费形式的BCC实例,支持CPU.内存.网络带宽等资源从低到高进行升级. 对于后付费的 ...

  7. 百度智能云 x 联通在线丨智能助理,“智”理你的通话

    开会时电话响不停,飞机上错过重要来电,休息中骚扰电话频繁,忙碌时错过家人的问候,当通信随时随地.无时无刻都在影响你的生活时,你是否想拥有一个"助理"帮你接电话? 近日,联通在线与百 ...

  8. ESP32接入百度智能云语音识别,实现在线语音识别

    一.概述   使用ESP32接入百度智能云实现在线语音识别.实现最基本的语音识别功能还是很简单的,但还是遇到了一些小问题,在这记录一下.   使用了max9814麦克风模块用做语音输入,一个按键来控制 ...

  9. 深耕城市治理场景,百度智能云联合慧联无限推内涝智能检测预警

    在刚刚过去的7月里,全国竟有多座城市因为暴雨引发的洪涝灾害频频登上热搜.轻则"城市看海",重则"内涝成灾",我国城市普遍性的内涝问题,在极端降雨天气影响下,扎堆 ...

最新文章

  1. 手机qq2008触屏版_比微信老却是00后最爱 手机QQ 16年进化史
  2. 【廖雪峰python入门笔记】Unicode编码_UnicodeDecodeError处理
  3. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授
  4. Linux 文件权限管理命令chmod、chown
  5. Python——七段数码管绘制
  6. boost::multiprecision模块cpp_complex相关的测试程序
  7. AD设备覆铜与同网络过孔的连接方式
  8. 织梦检测环境不支持mysql_本地测试织梦dedeCMS 安装环境
  9. 1.Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server(tomcat突然用不了)...
  10. Codeforce 记录 Rating
  11. 黑客声称攻陷并加密白俄罗斯国家铁路的服务器
  12. 使用ImageMagick和Tesseract进行简单数字图像识别
  13. linux服务器安装补丁包,Linux下Web服务器环境搭建LNMP一键安装包 v2.6[20141224更新] | 系统运维...
  14. 银行专业术语解释说明(持续更新)
  15. Routerboard/DR4019S-Qualcomm-IPQ4019-2T2R-Dual-Band-2-4GHz-5GHz-support-OpenWRT-802.11ac-Wave-2.
  16. linux wine qq2017,20170506-linux下最新WineQQ8.9.1安装教程
  17. 20.4.26工作感想
  18. 路径穿越(Path Traversal)详解
  19. Echarts—地图的基本实现
  20. 2020最值得读的java书,2020年最值得读的10本书,你看过几本?

热门文章

  1. 最新 在线下载谷歌play apk 地址
  2. 【华为云技术分享】物联网常用开发板
  3. USACO-Subset Sums
  4. 题目:什么是内联函数
  5. java身份证格式强校验
  6. 潘正磊谈微软研发团队管理和Visual Studio开发过程中的敏捷实践
  7. java代码审计手书(三)
  8. 如何通过重写hashCode()方法将偏向锁性能提高4倍?
  9. android手机 无电池开机,手机无法开机的6种解决方法
  10. 【读书笔记】《Effective Java》第二章 第2条:遇到多个构造器参数时要考虑使用Builder