菜单

基本人脸识别

相关源文件

目的与范围

本文档介绍了使用 face_recognition 库对静态图像进行人脸识别的基础知识。它解释了在照片中识别面孔的 foundational 概念、工作流程和代码示例。有关使用网络摄像头或视频进行实时人脸识别,请参阅 实时识别。有关高级分类技术,请参阅 KNN 分类

人脸识别工作流程

基础人脸识别遵循一个简单的流程

此工作流程通过库中的几个关键函数实现

来源: README.rst60-76 examples/recognize_faces_in_pictures.py1-29

加载图片

人脸识别的第一步是加载图像文件

load_image_file() 函数加载图像文件并将其转换为库可以处理的 NumPy 数组。它支持常见的图像格式(JPG、PNG 等)。

来源: README.rst68-70

人脸检测

加载图像后,下一步是检测人脸所在的位置

此函数返回一个元组数组,其中每个元组包含图像中人脸的坐标(上、右、下、左)。为了获得更准确的检测,您可以选择使用 CNN 模型

有关人脸检测模型和选项的更多详细信息,请参阅 人脸检测

来源: README.rst25-37 README.rst269-276

面部编码

一旦检测到人脸,就需要将其编码为数值表示

编码过程将每个人脸转换为一个 128 维向量,该向量代表面部特征

如果您已知图像中只有一个人脸,可以直接访问它

这些编码是人脸识别过程的核心——它们是每个人脸的数学“指纹”。

来源: README.rst72-74 examples/recognize_faces_in_pictures.py12-14

人脸比较

为了确定两个人脸是否属于同一个人,库会比较它们的面部编码

compare_faces() 函数返回一个布尔值数组(True/False),指示未知面部是否与每个已知面部匹配。该函数使用默认的容差阈值 0.6,可以进行调整

来源: README.rst76 README.rst179-191

完整示例

这是一个完整的人脸识别示例的演练

代码实现

  1. 加载图片
  1. 生成人脸编码
  1. 创建已知人脸编码列表
  1. 将未知人脸与已知人脸进行比较
  1. 解读结果

来源: examples/recognize_faces_in_pictures.py1-29

处理多个人脸

当处理可能包含多个人脸的图像时,您需要仔细处理返回的数组

来源: README.rst253-267 README.rst316-337

调整容差

容差参数控制人脸比较的严格程度

容差值效果
较低(例如 0.4)更严格的匹配,更少的误报
默认值 (0.6)平衡的匹配
较高(例如 0.8)更宽松的匹配,更少的漏报

您可能需要根据您的具体用例和人脸相似度来调整此值。

来源: README.rst179-191

面部距离

为了获得比简单 True/False 结果更细致的比较,您可以使用面部距离

面部距离提供了一个 0 到 1 之间的数值相似度测量,值越小表示相似度越高。

来源: README.rst199-208 README.rst369-370

最佳实践

  1. 图像质量:使用清晰、光线充足、面部清晰可见的图像
  2. 面部大小:当人脸占据图像的显著部分时,可以获得更好的结果
  3. 错误处理:始终处理潜在错误,尤其是在未找到人脸时出现的 IndexError
  4. 性能:对于多个图像的批量处理,请考虑 性能优化 中讨论的优化方法

来源: examples/recognize_faces_in_pictures.py11-17 README.rst224-240

常见问题

问题解决方案
未检测到人脸检查图像质量和光照;尝试不同的模型(“hog”vs“cnn”)
访问 face_encodings 时出现 IndexError添加错误处理以检查是否检测到人脸
误报/漏报调整容差参数以实现更严格/宽松的匹配
性能不佳使用 HOG 模型以提高速度,使用 CNN 模型以提高准确性

来源: README.rst414-456 examples/recognize_faces_in_pictures.py11-17