只需下载3M安装包,就能让你的手机浏览器跟踪眼球运动

作者: Ann Yuan 、 Andrey Vakunov 
来源:TensorFlow Bolg
编译:威踢踢
虹膜跟踪可广泛应用,例如用于辅助技术的免提界面以及了解用户的点击和手势以外的行为。虹膜跟踪也是一个具有挑战性的计算机视觉问题。在变化的光照条件下,眼睛经常被头发遮住,并且根据头部的旋转角度和人的表情被感知为不同的形状。现有的解决方案严重依赖于专用硬件,通常需要昂贵的耳机或远程眼动仪系统。这些方法不适用于计算资源有限的移动设备。
启用眼睛重新着色的示例。
3月,我们宣布发布了一个新程序包,用于检测浏览器中的面部标志。今天,我们很高兴通过TensorFlow.js人脸标志检测模型将虹膜跟踪添加到此程序包中。MediaPipe Iris模型使这项工作成为可能。我们已经弃用了原始的facemesh模型,并将在将来对人脸标志检测模型进行更新。

请注意,虹膜跟踪不会推断人们正在看的位置,也不能提供任何形式的身份识别。在模型的文档  和随附的模型卡中,我们详细描述了模型的预期用途,局限性和公平性(与Google的AI原则保持一致)。 

MediaPipe虹膜模型能够使用单个RGB摄像机实时跟踪虹膜和瞳孔的界标,而无需专用硬件。该模型还返回眼睑和眉毛区域的界标,从而能够检测到轻微的眼球运动,例如眨眼。

引入@ tensorflow / face-landmarks-detection

左上方是@ tensorflow-models / facemesh @ 0.0.4的预测,右上方是@ tensorflow-models / face-landmarks-detection @ 0.0.1的预测。虹膜界标为红色。

熟悉我们现有的 facemesh 模型的用户可以升级到新的 faceLandmarksDetection 模型,并只需进行少量代码更改,下面将对此进行详细说明。faceLandmarksDetection对facemesh进行了三项重大改进:

  1. 虹膜关键点检测
  2. 改善眼睑轮廓检测
  3. 改进了对旋转脸部的检测

这些改进在上面的动图中得到了突出显示,该动图演示了faceLandmarksDetection和facemesh返回的界标在同一图像序列是如何不同的。

安装

有两种安装faceLandmarksDetection软件包的方法:

    1. 通过脚本标签:
    2. <script src="//cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.js"></script><script src="//cdn.jsdelivr.net/npm/@tensorflow-models/face-landmarks-detection"></script>
    3. 通过NPM(通过yarn,网址://yarnpkg.com/):
    4. $ yarn add @tensorflow-models/[email protected]
      $ yarn add @tensorflow/[email protected]


    用法

安装软件包后,只需加载模型权重,然后传递图像即可开始检测面部标志:

// If you are using NPM, first require the model. If you are using script tags, you can skip this step because `faceLandmarksDetection` will already be available in the global scope.const faceLandmarksDetection = require('@tensorflow-models/face-landmarks-detection');// Load the faceLandmarksDetection model assets.const model = await faceLandmarksDetection.load(    faceLandmarksDetection.SupportedPackages.mediapipeFacemesh);// Pass in a video stream to the model to obtain an array of detected faces from the MediaPipe graph.// For Node users, the `estimateFaces` API also accepts a `tf.Tensor3D`, or an ImageData object.const video = document.querySelector("video");const faces = await model.estimateFaces({ input: video });

输入的内容estimateFaces可以是视频,静态图像,`tf.Tensor3D`,甚至是供Node.js管道中使用的ImageData对象。然后,FaceLandmarksDetection返回输入中面部的预测对象数组,其中包括有关每个面部的信息(例如,置信度得分以及该面部中478个界标的位置)。

这是一个样本预测对象:

{    faceInViewConfidence: 1,    boundingBox: {        topLeft: [232.28, 145.26], // [x, y]        bottomRight: [449.75, 308.36],    },    mesh: [        [92.07, 119.49, -17.54], // [x, y, z]        [91.97, 102.52, -30.54],        ...    ],       // x,y,z positions of each facial landmark within the input space.    scaledMesh: [          [322.32, 297.58, -17.54],        [322.18, 263.95, -30.54]    ],    // Semantic groupings of x,y,z positions.    annotations: {        silhouette: [            [326.19, 124.72, -3.82],            [351.06, 126.30, -3.00],            ...        ],        ...    }}有关API的更多详细信息, 请参阅我们的自述文件。

性能

FaceLandmarksDetection是一种轻量级的程序包,只有大约3MB,因此非常适合在各种移动设备上进行实时推理。在测试时,请注意TensorFlow.js还提供了几种不同的后端供选择,包括带有 XNNPACK的 WebGL和WebAssembly(WASM),用于具有低端GPU的设备。下表显示了程序包如何在几种不同的设备和TensorFlow.js后端上执行。
桌面: 

移动: 
所有标准都是在Chrome浏览器中收集的。

展望未来

TensorFlow.js和MediaPipe团队都计划使用改进的虹膜坐标将深度估计功能添加到我们的人脸界标检测解决方案中。我们坚信共享可实现可重复研究和快速实验的代码,并期待看到更广泛的社区如何利用MediaPipe虹膜模型。
作者提供了新软件包,可以在Web浏览器中通过此链接使用:

//storage.googleapis.com/tfjs-models/demos/face-landmarks-detection/index.html