前端人脸识别框架tracking.js,解决ios浏览器调摄像头黑屏的问题,兼容pc、安卓、ios。

总结两版人脸识别的心路历程。主要是开发中遇到的问题。

需求:实现pc端、webapp人脸拍照打卡的功能。

第一版,使用flash+JqueryFaceDetection.js 。

因为项目最初是http协议,使用getUserMedia需要 https 协议,所以pc端使用flash调摄像头。也没有要求真正的人脸识别,就用facedetection检测是否为人脸,但并不能保证是否为本人。

方案:使用jquery.webcam.min.js,调取摄像头拍照,使用facedetection检测照片中是否存在人脸。

pc端遇到的问题:

浏览器只能用IE、360浏览器兼容模式,极速模式。拍照的时候对于光线也有限制,经常拍出来识别不到人脸,需要多试几次。

webapp端遇到的问题:

使用input调摄像头拍照识别,图片需要压缩。

小部分安卓机型比如三星、小米会发生图片旋转的问题,ios拍照也会旋转。这里使用插件exifJs,网上有很多demo。

需要注意一个问题,旋转之后的照片,在输出到画布的时候,是按照图片原始尺寸输出的,像在ios上,一张图的尺寸可能到了4000*4000,所以页面会加载异常的慢,转的base64也会异常的大,往后台传输会卡。

这里的解决方案是在旋转方法里,控制img的尺寸不要超过限定的最大尺寸,我这里是400,并且输出到画布的时候注意写全宽高,否则输出图片为剪裁之后的部分。

 

 

第二版,使用trackingJs检测人脸+腾讯云对比。

为了更好的兼容性,网站升级https协议。

1.使用opencvjs做人脸检测+人脸对比。

https://docs.opencv.org/4.3.0/d5/d10/tutorial_js_root.html,指路opencvjs的官网。

https://blog.csdn.net/weixin_38361925/article/details/82528529,借鉴的这篇博客里的例子。

说一下遇到的问题。

  1. java后端套页面的时候,需要jdk版本在1.8以上。
  2. 涉及到的opencv.js 、utils.js 、xml文件需要在同一个目录下,否则会报错xml文件404。
  3. 一个严重的问题就是部分安卓机、ios,页面运行卡顿,我猜是因为xml文件太大了?加载的资源太大?所以卡顿。因为华为手机可以正常运行。但是最后没有去解决,能力有限,方案弃用。

2.使用trackingJs做人脸检测+腾讯云人脸对比。

领导终于看不下去了,要放过我这个小渣渣了,说要采用三方的人脸识别。比较了一下阿里云和腾讯云识别的方案,腾讯云相对省钱,2000+/年/100万次。这里我们只用腾讯云的人脸对比。

https://trackingjs.com/ trackingjs的官网。

网上的例子也有很多,可以多方参考。

引入tracking-min.js,根据需要引入face-min.js、eye-min.js、mouth-min.js。

使用getUserMedia调用摄像头,ios端需要使用mediaDevices.getUserMedia,这里可以多阅读mediaDevices.getUserMedia--MDN的文档,详细介绍了调用手机端前置摄像头,后置摄像头的问题 。

1、video.play() 可以开启摄像头,tracking.track('#video', tracker,{camera:true});也可以调用摄像头,提前加载tracker。去掉camera:true,否则会闪屏。

2、手机端使用canvas把video视频流输出的时候,注意画布的大小,宽高不要超过屏幕的宽高,

 var vm = $(window).width();

3、使用mediaDevices.getUserMedia在ios调用摄像头,需要系统版本11以上,只支持safari浏览器,

ios系统11会显示空白,因为浏览器没有开启摄像头的权限。

ios系统12会显示黑屏,ios系统13可以显示视频流但是一帧一帧的出现。

这些统统都是因为video需要加上playsinline属性 !

最后发一下最终的效果图。

 

手机端浏览器支持情况
型号自带浏览器qq浏览器谷歌浏览器
华为p30/p40 pro
小米9/红米9×
三星s9
苹果7p××
oppo未测试
荣耀未测试

还是有bug的,小米手机有些型号qq浏览器也不能够调起摄像头,还在优化中。

 

 

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
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安卓设备上正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值