<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>调用摄像头</title>
<script src="js/jq/jquery-3.2.1.js"></script>
<script src="js/jq/jquery-3.2.1.min.js"></script>
</head>
<body>
<video id="v" 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> 登录</button>
<script>
function $(elem) {
return document.querySelector(elem);
}
var canvas = $('canvas'),
context = canvas.getContext('2d'),
video = $('video'),
snap = $('#snap'),
upload = $('#upload'),
uploaded = $('#uploaded'),
mediaStreamTrack;
//人脸识别参考文档: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("登录成功!");
// console.log(rs.result.user_list[0].user_info);
}
});
}
</script>
<script>
!(function() {
// 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
if(navigator.mediaDevices === undefined) {
navigator.mediaDevices = {};
}
if(navigator.mediaDevices.getUserMedia === undefined) {
navigator.mediaDevices.getUserMedia = function(constraints) {
// 首先,如果有getUserMedia的话,就获得它
var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
// 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
if(!getUserMedia) {
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
}
// 否则,为老的navigator.getUserMedia方法包裹一个Promise
return new Promise(function(resolve, reject) {
getUserMedia.call(navigator, constraints, resolve, reject);
});
}
}
const constraints = {
video: true,
audio: false
};
let promise = navigator.mediaDevices.getUserMedia(constraints);
promise.then(stream => {
let v = document.getElementById('v');
// 旧的浏览器可能没有srcObject
if("srcObject" in v) {
v.srcObject = stream;
} else {
// 防止再新的浏览器里使用它,应为它已经不再支持了
v.src = window.URL.createObjectURL(stream);
}
v.onloadedmetadata = function(e) {
v.play();
};
}).catch(err => {
console.error(err.name + ": " + err.message);
})
})();
</script>
</body>
</html>