原理介绍:

基于百度云的人脸资料库(用户上传),调用本地摄像头抓拍的图像,与百度云的用户图像做比对,实现人脸认证。

主要步骤如下:

1. 创建百度去账号

2. 在百度云控制台中创建人脸识别的应用,并记录app id ,api key, api sercet.

3. 创建用户组,创建用户并上传图像。

4. 创建spring boot创建 并使用themleaf模板,实现功能。

主要逻辑:

1. 在页面中调用摄像头

2. 点击登录后,会抓拍一张图片发送到服务端

3. 服务端收到图片后,对图片进行处理,并设置参数,发给百度云认证。

4. 收到服务端返回的结果,进行结果判断。

主要代码如下:

只有一个html页面:

<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>人脸认证</title>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.2.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<video width="400" height="300"></video> <!-- 图像画布 -->
<canvas width="200" height="150"></canvas>
<button id="" onclick="face_login()" class="btn btn-info"><i class="icon-play"></i>&nbsp;登录</button>
<script>
function $(elem){
return document.querySelector(elem);
}
var canvas = $('canvas'),
context = canvas.getContext('2d'),
video = $('video'),
snap = $('#snap'),
upload = $('#upload'),
uploaded = $('#uploaded'),
mediaStreamTrack;
//打开摄像头
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({
video: true,
}).then(function(stream) {
mediaStreamTrack = typeof stream.stop === 'function' ? stream : stream.getTracks()[1];
// 旧的浏览器可能没有srcObject
if ("srcObject" in video) {
video.srcObject = stream;
} else {
// 防止再新的浏览器里使用它,应为它已经不再支持了
video.src = window.URL.createObjectURL(stream);
}
video.play();
});
}else if (navigator.getMedia) {
navigator.getMedia({
video: true
}, function(stream) {
mediaStreamTrack = stream.getTracks()[0];
video.src = (window.URL || window.webkitURL).createObjectURL(stream);
video.play();
});
}
//人脸识别参考文档:https://cloud.baidu.com/doc/FACE/
function face_login(){
context.drawImage(video, 0, 0, 200, 150);
jQuery.post('faceLogin', {           //指定发送图片到的servlet
snapData: canvas.toDataURL('image/jpg')
}).done(function(rs) {
//对结果集进行解析,判断是否存在人脸
console.log(JSON.stringify(rs));
if(rs.error_code == "222202"){
alert("没有人脸信息或人脸数量非1,请重新拍照!");
}else if(rs.error_code == "222207"){
alert("人脸库中没有您的注册信息,请先注册。");
}else if(rs.error_code == "223120"){
alert("请正确登录,不得伪造!");
}else if(rs.error_msg == "SUCCESS"){
alert("登录成功!");
}
});
}
</script>
</body>
</html>

服务端代码也只有一个类:代码中百度云账号信息,已处理,不能直接用。

package com.cis.cloud;

import com.alibaba.fastjson.JSON;
import com.baidu.aip.face.AipFace;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import java.util.HashMap;
import java.util.Map; @Controller
@RequestMapping("/user")
public class UserController { private static final String APP_ID_FACE ="155671420";
private static final String API_KEY_FACE ="6jnC1LDLEox5SsGfktlWhYZqx";
private static final String SECRET_KEY_FACE ="Q0C1Y2upbpxxVuPkTNwqkxOWYMDpCwwwI"; @GetMapping("face")
public String face(){
return "user/face";
} //005.人脸识别登录
@ResponseBody
@RequestMapping(value = "faceLogin",method = RequestMethod.POST)
public Map faceLogin(@RequestParam("snapData") String str) throws Exception{
//使用Ajax提交base64字符串,需要经过去头转码
String img_data = str.substring(22, str.length());
AipFace client = new AipFace(APP_ID_FACE, API_KEY_FACE, SECRET_KEY_FACE);
HashMap<String,String> options = new HashMap<String,String>(); //请求预置参数
options.put("quality_control", "NORMAL");
options.put("liveness_control", "LOW");
options.put("user_id", "hkk"); //与后台用户ID匹配
options.put("max_user_num", "3"); JSONObject res = client.search(img_data,"BASE64","family", options); //人脸库搜索 family为后台用户组名称
System.out.println(res.toString(2)); Map map = JSON.parseObject(res.toString());
return map;
} }

附一段百度云返回的结果:

{
"result": {
"face_token": "59b1966b9042068a95d69713e48e50bf",
"user_list": [{
"score": 94.014793395996,
"group_id": "family",
"user_id": "hkk",
"user_info": ""
}]
},
"log_id": 304569203895258121,
"error_msg": "SUCCESS",
"cached": 0,
"error_code": 0,
"timestamp": 1550389525
}

spring boot2 基于百度云apiface实现人脸检测与认证1的更多相关文章

  1. spring boot2 基于百度云apiface实现人脸检测与认证2

    接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测. 原理介绍: 把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人 ...

  2. 借助百度云API进行人脸识别

    前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测.笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病, ...

  3. Android 高仿微信实时聊天 基于百度云推送

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百 ...

  4. 基于Android平台的简易人脸检测库

    代码地址如下:http://www.demodashi.com/demo/12135.html ViseFace 简易人脸检测库,不依赖三方库,可快速接入人脸检测功能. 项目依赖:compile 'c ...

  5. mongoDb学习以及spring管理 (包括百度云配置)

    1.windows下的安装http://www.cnblogs.com/liuzhiying/p/5915741.html 2.慕课网学习单机操作mongoDb 赋权限:http://blog.csd ...

  6. 基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

  7. 基于opencv3.0下的人脸检测和检测部分的高斯模糊处理

    如题 这里将任务分解为三大部分: 1.录播放视频 2.人脸检测 3.部分高斯模糊 其中重点放在人脸检测和部分高斯模糊上 1.录播放视频(以opencv中的VideoCapture类进行实现) 首先罗列 ...

  8. 基于OpenCV读取摄像头进行人脸检测和人脸识别

    前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,opencv的环境配置网上有很多,不再赘述.检测的代码网上很多,记不清楚从哪儿copy的 ...

  9. 联想A798T刷机包 基于百度云V6 集成RE3.1.7美化版 精简冗余文件

    ROM介绍 1.apk进行odex合并及zipaliang优化-省电及降低内存暂用. 2.測试相机.通话.数据.wifi.蓝牙.等传感器均正常,. 3.提供时间居中防iphone状态栏补丁 4.增加I ...

随机推荐

  1. hibernate在Oracle中插入数据,默认字段被设置为null的问题解决

    参考内容: http://blog.sina.cn/dpool/blog/s/blog_90629d5301014a5w.html 在数据库中一个字段的默认值为1,但是在插入数据后,本来该字段为空,值 ...

  2. Mac - iPhone屏幕录制

    1. Mac电脑屏幕录制 1.1 文件->新建屏幕录制   1.2 点击红色按钮   1.3 截取需要录制的屏幕部分,点击开始录制   1.4 点击工具栏的停止按钮,停止录制   1.5 然后会 ...

  3. thinkphp --- 写入日志

    在开发过程中,对于一些参数,不好直接输入或者打印调试,特别是在微信开发过程中,这个时候,通过日志来查看信息就显得格外重要. 下面是在TP3.2.3框架中,写入日志的方法: public functio ...

  4. ibatis 中#和 $ 符号的区别

    1.数据类型匹配 #:会进行预编译,而且进行类型匹配(自动确定数据类型): $:不进行数据类型匹配. 2.实现方式: # 用于变量替换(先生成一个占位符,然后替换) select * from use ...

  5. [ASP.NET 大牛之路]03 - C#高级知识点概要(2) - 线程和并发

    目录: 1.线程简单使用 2.并发和异步的区别 3.并发控制—锁 4.线程的通信机制 5.线程池中的线程 6.案例:支持并发的异步日志组件 7.结束 1.线程的简单使用---------------- ...

  6. Mac下通过远程桌面向Windows发送Ctrl+Alt+Delete

    今天在Mac中通过远程桌面给Windows安装Git Extensions,在安装程序自动关闭资源管理器时,Windows无响应,桌面显示黑屏.于是,想通过Ctrl+Alt+Delete快捷键调出对话 ...

  7. C# WebBrowser的8个方法、13个属性和事件

    1.方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项  GoHome 相当于IE的“主页”按 ...

  8. 基于linux-2.6.35的class_create(),device_create解析

    基于linux-2.6.35的class_create(),device_create解析 作者:苗老师,华清远见嵌入式学院讲师. 从linux内核2.6的某个版本之后,devfs不复存在,udev成 ...

  9. 前端程序员:月薪 5K 到 5 万

    入行行头:5 大硬件 请准备好以下东西 一颗人类的大脑:智商在平均水平线以上即可 一份强烈的渴望:我的代码要可以运行在任何一个有浏览器的设备上. 一台笔记本电脑:不需要花费很多钱得那种,只要它可以运行 ...

  10. Windows:子线程中创建窗口

    一般来讲,UI的所有操作都必须在主线程,否则会出现未知错误.但有时候我们会需要一个功能比较单一的窗口,同时希望他在一个单独的线程运行.并不影响主线程的效率. 下面说明一下新建子线程创建的新窗口的方法, ...