tensorflow。js对视频直播人脸检测和特征点收集
前言:
这里要介绍的是Tensorflow。js官方提供的两个人脸检测模型,分别是facedetection和facelandmarksdetection。他们不但可以对视频中的人间进行精确定位,而且还能对当前设备(手机电脑摄像头)采集的直播流实时监测人脸。所以这些的应用场景就很常见了,比如在线美颜,实时添加互动虚拟挂件等等。
虽然这两个模型实现的功能类似,但是也还是有区别滴。facelandmarksdetection相比facedetection对人脸的检测有更多的特征点,而特征点更多可用来做类似建模匹配的重合度就越高,以下会通过官方的例子打印出脸部的特征点数据。
实操:
1。下载源码。
2。单独提出demos里uploadvideo。
这里要说明一下,因为个人习惯,我这里还是通过parcel方式打包。官方推荐是yarn,而且有文档流程介绍,可以按着上面运行。而我的方法完全不按套路出牌,其实单独提出demo里项目运行也是不正确,npm安装报错连连,那我就对我遇到的几个错误做一一复原吧。
2。1。npminstall抛出各种依赖包版本冲突,npmERR!codeERESOLVEnpmERR,如下。
2。1。1。原因:
由于本人前端水平有限,经过查阅,是npm版本原因。npm从v7开始,默认安装peerDependencies。在多数情况下,导致版本冲突,从而终端安装过程,在安装前可以查询一下npmv,小于v7就不用看下面方法了。
2。1。2。解决方法:在命令后面添加legacypeerdeps
加了这个就可以绕过peerDependency自动安装,告诉NPM忽略项目中引入的各个模块之间的相同模块,但不同版本的问题,保证各个引入的依赖之间对自身所使用的不同版本模块共存,最后的依赖就安装成功了,最后就执行parcelindex打包。
2。2。parcel时,抛出facedetection模型不存在,如下。
2。2。1。原因:
这里就是我运行项目时的方法不对,因为运行时需要在外面进行安装打包会生成模型文件,而demos里的模型引入其实是引入前面打包好的文件,我们可以看到package。json里。
2。2。2。解决方法:
将package。json里的模型依赖删掉,也就是上面标注的部分,然后通过npm进行安装,安装成后json文件会更新,其他问题类似。npminstalltensorflowmodelsfacedetectionlegacypeerdeps
运行效果:
1。facedetection
运行地址:http:127。0。0。1:1234?modelmediapipefacedetector
通过打印可以看到以上数据,box是目标的宽高等值,而keypoints就是检测出人脸的6个特征点。包括特征的名称和移动位置等信息。
2。facelandmarksdetection
地址:http:127。0。0。1:1234?modelmediapipefacemesh
打印出的不同的facedetection的是,keypoints数据更多,除了检测出人脸五官,而且五官轮廓的点位置也全部识别出来了。