计算机通过三个步骤识别面部:检测、特征提取和匹配。首先,系统使用检测算法在图像或视频帧中定位人脸。传统的Haar级联等方法分析像素强度的模式来识别面部区域,例如,检测基于较暗区域包围的较亮区域的眼睛。现代系统通常使用深度学习模型,如卷积神经网络(CNN),这些模型在大型数据集上进行训练,以识别各种条件下的面部。例如,OpenCV的预训练Haar级联分类器可以快速扫描不同比例的图像以找到面部,而像MTCNN(多任务级联CNN)这样的CNN可以通过处理姿势、光照或遮挡的变化来提高准确性。此步骤输出检测到的面部周围的边界框坐标。
接下来,系统从检测到的面部提取区分特征。这包括映射关键的面部标志——例如眼睛、鼻子和嘴巴的位置——或生成称为嵌入的数学表示。地标检测可能使用回归模型来精确定位68个特定点,如在Dlib库中看到的。由像FaceNet或ArcFace这样的深度学习模型创建的嵌入,将面部特征转换为高维向量(例如,128个数字),这些向量封装了独特的特征。例如,FaceNet的嵌入经过优化,使得来自同一个人的向量在欧几里得空间中比来自不同个体的向量更接近。这些方法将面部简化为紧凑的机器可读格式,不受面部表情或轻微方向变化等因素的影响。
最后,系统将提取的特征与数据库进行匹配以进行识别。这包括使用相似性度量(如余弦相似度或欧几里得距离)将生成的嵌入或地标与存储的参考进行比较。例如,智能手机的面部解锁系统可能会计算当前面部嵌入与预先注册的模板之间的距离,如果距离低于阈值,则授予访问权限。实际实现通常包括阈值以平衡安全性和可用性——例如,安全系统可能需要99%的置信度匹配,而照片标记应用程序使用较宽松的阈值。诸如光照变化或部分遮挡等挑战通过归一化(例如,将面部对齐到标准方向)和强大的训练数据来缓解。开发人员可以利用像OpenCV、TensorFlow或PyTorch这样的库来实现这些步骤,将检测模型(YOLO)、特征提取器(ResNet)和相似性计算组合成一个有凝聚力的管道。