本文档介绍了使用 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
这是一个完整的人脸识别示例的演练
代码实现
来源: examples/recognize_faces_in_pictures.py1-29
当处理可能包含多个人脸的图像时,您需要仔细处理返回的数组
来源: README.rst253-267 README.rst316-337
容差参数控制人脸比较的严格程度
| 容差值 | 效果 |
|---|---|
| 较低(例如 0.4) | 更严格的匹配,更少的误报 |
| 默认值 (0.6) | 平衡的匹配 |
| 较高(例如 0.8) | 更宽松的匹配,更少的漏报 |
您可能需要根据您的具体用例和人脸相似度来调整此值。
为了获得比简单 True/False 结果更细致的比较,您可以使用面部距离
面部距离提供了一个 0 到 1 之间的数值相似度测量,值越小表示相似度越高。
来源: README.rst199-208 README.rst369-370
来源: 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