前端使用tracking.js进行人脸识别
前端使用tracking.js进行人脸识别背景一、引入第三方库二、使用步骤1.初始化打开摄像头获取视频流、创建检测2.检测视频中人脸3.拍照4.保存文件至本地5.关闭摄像头以及取消监听的方法总结背景因为要在一个客户端上增加人脸识别功能,最终找到了第三方库tracking.js,基于此库完成了前端部分的需求开发。大致流程为:初始化打开摄像头获取视频流、创建监听->检测视频中人脸->进行拍
·
前端使用tracking.js进行人脸识别
背景
因为要在一个客户端上增加人脸识别功能,最终找到了第三方库tracking.js,基于此库完成了前端部分的需求开发。
大致流程为:初始化打开摄像头获取视频流、创建监听->检测视频中人脸->进行拍照->保存图片文件至本地->调取后端命令
提示:以下是本篇文章正文内容,下面案例可供参考
一、引入第三方库
因为我的前端代码是jquery、bootstrap、nwjs写的,所以直接下载第三方包引用就可以了。tracking.js
<script src="js/tracking.js"></script>
<script src="js/face.js"></script>
第一个是主包,第二个是一个检测人脸的包。
二、使用步骤
1.初始化打开摄像头获取视频流、创建检测
代码如下(示例):
var tipFlag = false // 是否检测
var faceflag = false // 是否进行拍照
var informationTitle = $("#informationTitle_bind")//人脸提示
// 获取video、canvas实例
var facevideo = document.getElementById('video_bind');
var facecanvas = document.getElementById('canvas_bind');
var facecontext = facecanvas.getContext('2d');
// 使用监听人脸的包
var tracker = new tracking.ObjectTracker('face');
tracker.setInitialScale(4);
tracker.setStepSize(2);
tracker.setEdgesDensity(0.1);
// 每次打开弹框先清除canvas没拍的照片
facecontext.clearRect(0, 0, facecanvas.width, facecanvas.height);
//打开摄像头
var tra = tracking.track('#video_bind', tracker, { camera: true });
// 创建监听 每帧都会触发
tracker.on('track', function(event) {
});
2.检测视频中人脸
代码如下(示例):
tracker.on('track', function(event) {
if(!tipFlag){
facecontext.clearRect(0, 0, facecanvas.width, facecanvas.height);
if (event.data.length === 0) {
//未检测到人脸
if(!faceflag){
informationTitle.html('未检测到人脸')
}
} else if (event.data.length === 1) { // 长度为多少代表检测到几张人脸
//检测到一张人脸
if(!tipFlag){
informationTitle.html('识别成功,正在拍照,请勿乱动~')、
// 给检测到的人脸绘制矩形
event.data.forEach(function(rect) {
facecontext.strokeStyle = '#a64ceb';
facecontext.strokeRect(rect.x, rect.y, rect.width, rect.height);
});
if(!faceflag){// 检测到人脸进行拍照,延迟两秒
faceflag = true
setTimeout(() => {
tackPhoto () // 拍照
tipFlag = true
}, 2000);
}
}
} else {
//检测到多张人脸
if(!faceflag){
informationTitle.html('只可一人进行人脸识别!')
}
}
}
});
3.拍照
当检测到视频中只有一张人脸时候,进行拍照代码如下(示例):
//保存照片至canvas 利用canvas覆盖video形成截图界面
facecontext.drawImage(facevideo, 0, 0, facecanvas.width, facecanvas.height)
4.保存文件至本地
利用node模块fs写文件至本地,代码如下(示例):
//转换照片为base64格式
let imgData = facecanvas.toDataURL('image/png', 0.3)
//过滤data:URL
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = Buffer.from(base64Data, 'base64');
fs.writeFile("/tmp/face.png", dataBuffer, function(err) {
if(err) {
}else{
}
});
5.关闭摄像头以及取消监听的方法
// 关闭摄像头
facevideo.srcObject.getTracks().forEach(track => track.stop());
// 取消监听
tra.stop()
总结
本文人脸识别功能,前端要做的工作就是通过第三方库检测到人脸,通过canvas覆盖video形成截图画面,把图片保存下来发给后端。
更多推荐
已为社区贡献1条内容
所有评论(0)