前端使用tracking.js进行人脸识别

1 篇文章 0 订阅

背景

因为要在一个客户端上增加人脸识别功能,最终找到了第三方库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形成截图画面,把图片保存下来发给后端。

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
tracking.js是一个基于JavaScript的电脑视觉库,用于实时在浏览器中进行人脸检测、追踪和分析。从理论上讲,tracking.js可以在安卓平台上运行。然而,实际上在安卓设备上使用tracking.js需要考虑一些因素。 首先,安卓设备的性能可能会影响tracking.js的运行效果。由于安卓设备的处理能力和浏览器性能的限制,tracking.js可能会在某些较老的或低端的安卓设备上运行较慢或出现卡顿。因此,对于性能较弱的设备,可能需要进行优化或选择其他适合该设备的人脸检测库。 其次,安卓设备上的浏览器兼容性也可能影响tracking.js使用。尽管tracking.js是基于JavaScript的库,但不同的浏览器在JavaScript的支持和实现方面可能存在差异。因此,在选择使用tracking.js之前,需要确保目标安卓设备上的浏览器支持所需的JavaScript功能,并且在不同的浏览器上进行兼容性测试。 另外,安卓设备上的摄像头也是使用tracking.js的关键因素之一。tracking.js需要通过设备摄像头捕捉图像帧进行人脸检测和追踪。因此,需要确保安卓设备上的摄像头能够正常工作,并与tracking.js兼容。 总而言之,理论上讲tracking.js可以在安卓设备上使用,但需要考虑设备性能、浏览器兼容性以及摄像头等因素的影响。在实际使用中,应根据具体情况综合考虑,并进行必要的优化和测试,以确保tracking.js在安卓设备上正常运行。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值