面部检测是指在可视媒体(数字图片或视频)中自动定位人类面部的流程。对于检测到的面部,此流程会报告其位置及相关的尺寸和朝向信息。检测到面部后,此流程还会搜索其眼睛、鼻子等特征点。
以下是我们在讨论机器学习套件的面部检测功能时会用到的一些术语:
面部跟踪将面部检测功能扩展到视频序列。系统可以跟踪在视频中出现任意时长的任何面部。也就是说,系统可将在连续的视频帧中检测到的面部判定为同一个人。请注意,它不同于面部识别;此机制只根据面部在视频序列中的位置和动作进行推理。
特征点是指人类面部的一些关键点。左眼、右眼、鼻基都是特征点。机器学习套件能够在检测到的面部上找出特征点。
轮廓是一组与面部特征形状相一致的点。机器学习套件能找到面部的轮廓线。
分类用于指示是否出现了某些面部特征。例如,可以按眼睛是否睁开对面部进行分类。另一个例子是面部是否出现笑容。
面部朝向
以下术语用于描述面部相对于镜头的角度:
- 欧拉 X:如果欧拉 X 角为正,表示面部向上。
- 欧拉 Y:如果欧拉 Y 角为正,表示面部朝向镜头视角的右侧(即朝向自身的左侧)。
- 欧拉 Z:如果欧拉 Z 角为正,表示面部相对于镜头沿逆时针方向转动。
机器学习套件每次都会报告检测到的面部的欧拉 Z 角。仅当使用面部检测器的“精确”模式设置(与此相对的是“快速”模式设置,在该模式下系统会省略一些步骤来提高检测速度)时,才会报告欧拉 Y 角。尚无法报告欧拉 X 角。
特征点
特征点是指面部的一些关键点。左眼、右眼、鼻基都是特征点。
机器学习套件并非首先检测特征点,再以特征点为基础进行全脸检测;而是分别单独进行全脸检测与详细特征点检测。因此,特征点检测是一个可选步骤,默认情况下并未启用。
下表汇总了对于不同的面部欧拉 Y 角,机器学习套件可以检测到的所有特征点:
| 欧拉 Y 角 | 可检测到的特征点 |
|---|---|
| < -36 度 | 左眼、左侧嘴巴、左耳、鼻基、左脸颊 |
| -36 度到 -12 度 | 左侧嘴巴、鼻基、嘴巴底部、右眼、左眼、左脸颊、左耳尖 |
| -12 度到 12 度 | 右眼、左眼、鼻基、左脸颊、右脸颊、左侧嘴巴、右侧嘴巴、嘴巴底部 |
| 12 度到 36 度 | 右侧嘴巴、鼻基、嘴巴底部、左眼、右眼、右脸颊、右耳尖 |
| > 36 度 | 右眼、右侧嘴巴、右耳、鼻基、右脸颊 |
检测到的每个特征点都包括它在图片中的关联位置信息。
轮廓
轮廓是一组表示面部特征形状的点。下图演示了这些点与面部的对应情况(点击图片可以放大图片):
机器学习套件检测到的每个特征轮廓均用固定数量的点表示:
| 椭圆形脸 | 36 个点 | 上唇(上部) | 11 个点 |
|---|---|---|---|
| 左眉毛(上侧) | 5 个点 | 上唇(底部) | 9 个点 |
| 左眉毛(下侧) | 5 个点 | 下唇(上部) | 9 个点 |
| 右眉毛(上侧) | 5 个点 | 下唇(底部) | 9 个点 |
| 右眉毛(下侧) | 5 个点 | 鼻梁 | 2 个点 |
| 左眼 | 16 个点 | 鼻底 | 3 个点 |
| 右眼 | 16 个点 | ||
| 左脸颊(中心) | 1 个点 | ||
| 右脸颊(中心) | 1 个点 |
当您同时获得所有面部轮廓时,您将获得 133 个点的数组,这些点将与如下所示的特征轮廓相对应:
| 特征轮廓的索引 | |
|---|---|
| 0-35 | 椭圆形脸 |
| 36-40 | 左眉毛(上侧) |
| 41-45 | 左眉毛(下侧) |
| 46-50 | 右眉毛(上侧) |
| 51-55 | 右眉毛(下侧) |
| 56-71 | 左眼 |
| 72-87 | 右眼 |
| 88-96 | 上唇(底部) |
| 97-105 | 下唇(上部) |
| 106-116 | 上唇(上部) |
| 117-125 | 下唇(底部) |
| 126、127 | 鼻梁 |
| 128-130 | 鼻底(注意中心点位于索引 128 处) |
| 131 | 左脸颊(中心) |
| 132 | 右脸颊(中心) |
分类
分类用于指示是否出现了某些面部特征。机器学习套件目前支持两种分类:睁眼和笑容。
分类以一个确定性值表示,指示出现这一面部特征的可信度。例如,笑容分类的值为 0.7 或以上表示此人很有可能面带笑容。
这两个分类都依赖于特征点检测。
另请注意,“睁眼”和“笑容”分类仅适用于正面的面部,即欧拉 Y 角较小(最大为 +/- 18 度)的面部。
后续步骤
在您的 iOS 或 Android 应用中使用面部检测:

