Web前端+Java实现⼈脸识别登录
使⽤前端页⾯+java后台实现⼈脸登录,⼈脸的图像对⽐是调⽤的百度接⼝(百度AI开放平台)。
⼀、实现思路
a.前端页⾯调⽤设备摄像头获取实时图⽚数据。
b.通过Ajax将图⽚数据提交后台处理,并返回处理后的数据。
c.后台使⽤java调⽤接⼝进⾏图⽚的对⽐。
d.最后将返回的结果进⾏分析后返回前端页⾯。
⼆、准备⼯作
a.编辑器:Myeclipse写jiava代码、WebStorm写前端页⾯(编辑器随便什么都可以的)。
b.jar包
c.百度AI接⼝
三、前端页⾯
a.需要使⽤到两个标签,⼀个是<video>⼀个是<canvas>,这两个标签,video是将摄像头获取到的数据呈现成视频,canvas是画布,将视频中的画⾯换成图⽚。
b.将获取到的图⽚数据通过Ajax请求的⽅式作为数据传到java后台。
c.前端代码
web端登录<div id="face-box">
<video id="video"></video>
<canvas id="canvas" ></canvas>
</div>
d.js代码
GetFace.js打开摄像头和获取图⽚
/*
在⽤getUserMediaToPhoto之前要写两个回调函数,⼀个success ⼀个 error
格式:
function success(stream){
}
//失败回调函数
function error(error) {
}
*/
//成功回调函数
var video = ElementById("video");
var canvas = ElementById("canvas");
var context = Context("2d");
var mediaStreamTrack=null;
function success(stream){
//兼容webkit核⼼浏览器
// var CompatibleURL = window.URL || window.webkitURL;
//将视频流转化为video的源
mediaStreamTrack=stream;
try {
// video.src = ateObjectURL(stream);
video.srcObject=stream;
}catch (e) {
console.log("访问⽤户媒体设备失败:",error.ssage);
}
video.play();//播放视频
//将视频绘制到canvas上
}
//错误回调函数
//错误回调函数
function error(error) {
console.log('访问⽤户媒体失败:',error.ssage);
}
function getUserMediaToPhoto(constraints,success,error) {
UserMedia){
//最新标准API
}else if (navigator.webkitGetUserMedia) {
//webkit核⼼浏览器
navigator.webkitGetUserMedia(constraints,success,error);
}else GetUserMedia){
//firefox浏览器
}else UserMedia){
/
/旧版API
}
}
function getFace() {
context.drawImage(video,0,0,300,150);
this.DataURL('image/jpg')
//获取完整的base64编码
this.img=img.split(',')[1];
return this.img;
}
function openUserMedia() {
UserMedia || navigator.webkitGetUserMedia || GetUserMedia || UserMedia){        getUserMediaToPhoto({video:{width:480,height:320,facingMode: "user"}},success,error);
}else{
alert('你的浏览器不⽀持访问⽤户媒体设备');
}
}
function  offUserMedia() {
if(mediaStreamTrack!=null)
}
FaceLoginAjax.js数据提交
function Facelogin() {
setTimeout(function () {
img = getFace();
$.ajax({
type:"post",
url:"localhost:8080/DDserver/LoginServlet",
data:{
"imgpath":img,
"imgType":"BASE64"
},
success:function (data) {
var obj= new Function("return"+data)();
var sult;
var error__msg;
if("SUCCESS"===error_msg){
sessionStorage.setItem("account",result.user_id);
location.href="Main.html";
}
else{
Facelogin();
}
},
error:function () {
alert("连接服务器失败")
},
async:true
})
},500);
}
四、后台Java
a.在Myeclipse中新建⼀个web项⽬,并导⼊上⾯的jar包,然后在src⽂件夹下创建⼀个facelogin的包
这是⾥⾯的结构,代码如下
AiFaceObject.java
这个类是使⽤单例模式创建⼀个AipFace对象,因为我们后⾯会⼀直使⽤这个对象,⽽这个对象的创建会得到⼀个SDK,这个SDK的有效期好像是⼀个⽉。所以我们没必要⼀直创建对象来获取这个SDK,就使⽤单例模式创建最好。
import com.baidu.aip.face.AipFace;
public class AiFaceObject {
//设置APPID/AK/SK
public static final String APP_ID = "你的APP_ID";
public static final String API_KEY = "你的..";
public static final String SECRET_KEY = "你的..";
//这上⾯的东西在你申请百度接⼝的时候都会给的
//创建⼀个aipface对象
private static AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
//创建单例的原因是避免多次获取sdk
public static AipFace getClient(){
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
return client;
}
}
FaceComparison.java
这个类是实现两张⼈脸照⽚的⽐较,返回⽐较后的字符串结果
package cn.ddserver.facelogin;
import java.util.ArrayList;
import org.json.JSONObject;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import ity.Image;
public class FaceComparison {
public static String Facecomparison(AipFace client,Image imageU,Image imageC){
MatchRequest req1 = new Image(), ImageType());
MatchRequest req2 = new Image(), ImageType());
ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
requests.add(req1);
requests.add(req2);
JSONObject res = client.match(requests);
String(2);
}
}
FaceDetection.java
这个类是⼈脸的检测,因为在获取⼈脸照⽚的时候如果没有⼈脸的照⽚是不合格的,如果保存了这样的数据,后⾯进⾏⼈脸⽐较的时候,肯定是⽐对不成功的
import java.util.HashMap;
import org.json.JSONObject;
import com.baidu.aip.face.AipFace;
import ity.Image;
public class FaceDetection {//⼈脸检测的类
public static String Facedetection(AipFace client,Image image){
HashMap<String, String> options= new HashMap<String, String>();
options.put("face_field", "age");//返回的⼈脸信息
options.put("max_face_num", "1");//最⼤⼈脸识别数1
options.put("face_type", "LIVE");//照骗类型⽣活照
JSONObject res=client.Image(), ImageType(), options);
String(2);
}
}
FaceRegistration.java
这个类是进⾏⼈脸的注册,就是在百度的⼈脸库⾥⾯注册你的⽤户⼈脸库,可以不使⽤。你可以使⽤两张图⽚进⾏⽐较。但是这⾥为了⽅便,使⽤这个库和前端上传的图⽚进⾏匹配得到匹配成功的图⽚ID实现登录。
package cn.ddserver.facelogin;
import java.util.HashMap;
import org.json.JSONObject;
import com.baidu.aip.face.AipFace;
import ity.Image;
public class FaceRegistration {
public static String Faceregistrtion(AipFace client,String groupId,String userId,Image image){
// 传⼊可选参数调⽤接⼝
HashMap<String, String> options = new HashMap<String, String>();
options.put("user_info", "user's info");
options.put("quality_control", "NORMAL");
options.put("liveness_control", "LOW");
// ⼈脸注册
JSONObject res = client.Image(), ImageType(), groupId, userId, options);
String(2);
}
}
FaceUser.java

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。