本文档解释了 face_recognition 库的面部编码和识别组件。这些组件将检测到的面部转换为数值特征向量(编码),并将这些向量进行比较以识别或验证面部。有关在图像中检测面部的信息,请参阅 面部检测,有关定位面部地标的详细信息,请参阅 面部地标。
面部编码和识别是核心功能,可以在检测到面部后识别图像中的“谁”。该系统包含两个主要组件:
来源: face_recognition/api.py63-75 face_recognition/api.py203-214 face_recognition/api.py217-226
面部编码是将面部图像转换为紧凑的数值表示的过程,该表示捕捉了面部的独特特征。
face_encodings 函数使用一个使用 ResNet 架构训练的深度学习模型来为每个面部生成一个 128 维的特征向量。
来源: face_recognition/api.py28-29 face_recognition/api.py203-214
face_encodings 函数将检测到的面部转换为编码。
参数
face_image:包含一个或多个面部的图像known_face_locations:面部的边界框的可选列表(如果已知)num_jitters:在计算编码时重新采样面部的次数(值越高,准确性越高,处理时间也越长)model:使用哪个地标模型(“small” 更快,“large” 更详细)返回值
来源: face_recognition/api.py203-214
面部识别涉及比较面部编码以确定两个面部是否代表同一个人。
该库提供了两种主要的比较面部编码的方法:
compare_faces):返回匹配的 True/Falseface_distance):返回相似度得分compare_faces 函数确定一个面部是否与任何已知面部匹配。
参数
known_face_encodings:已知面部编码列表face_encoding_to_check:要与列表进行比较的编码tolerance:考虑匹配的阈值(值越低,要求越严格)返回值
来源: face_recognition/api.py217-226
face_distance 函数计算面部编码之间的欧氏距离。
参数
face_encodings:要比较的面部编码列表face_to_compare:要进行比较的面部编码返回值
来源: face_recognition/api.py63-75
容差参数控制面部比较的严格程度。
| 容差值 | 比较严格程度 | 误报 | 假阴性 |
|---|---|---|---|
| 0.4 | 非常严格 | 低 | 高 |
| 0.6 | 默认/平衡 | 中等 | 中等 |
| 0.8 | 宽松 | 高 | 低 |
较低的容差值要求面部更加相似才能被视为匹配,这可以减少假阳性,但可能会增加假阴性。
典型的面部识别工作流程包括以下步骤:
以下模式演示了基本面部识别。
来源: examples/recognize_faces_in_pictures.py1-29 README.rst316-334
与多个已知面部进行比较时,
当存在多个匹配项时,您可以使用面部距离来查找最接近的匹配项。
来源: examples/recognize_faces_in_pictures.py19-29 README.rst198-208
面部编码和识别系统依赖于以下组件:
来源: face_recognition/api.py28-29 face_recognition/api.py203-214 face_recognition/api.py217-226
num_jitters。面部编码在存储和比较方面效率很高。
来源: face_recognition/api.py203-214 README.rst224-241
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 未返回编码 | 图像中未检测到面部 | 首先检查面部检测结果。 |
| 误报 | 容差过高 | 降低容差值(例如,0.5 而不是 0.6)。 |
| 假阴性 | 容差过低 | 增加容差值。 |
| 准确性差 | 低质量图像 | 提高图像分辨率、光照和面部定位。 |
| 性能缓慢 | 较高的 num_jitters | 减少抖动次数。 |
| 儿童识别问题 | 模型是针对成人训练的。 | 对儿童使用更严格的容差值(约 0.4-0.5)。 |
来源: README.rst179-191 README.rst397-400 face_recognition/api.py203-214
face_recognition 库的面部编码和识别组件提供了强大而易用的工具,用于将面部图像转换为数字表示并比较这些表示以识别个人。该系统平衡了易用性与 dlib 强大的底层深度学习模型,为面部识别任务提供了最先进的性能。