菜单

人脸检测

相关源文件

目的与范围

本文档介绍了 face_recognition 库中的人脸检测功能。人脸检测是指在图像中识别和定位人脸的过程,这是执行面部特征提取、人脸编码或人脸识别的先决步骤。有关人脸识别和比较的信息,请参阅 人脸编码与识别,有关面部标志的详细信息,请参阅 面部标志

来源: face_recognition/api.py108-121

概述

face_recognition 库中的人脸检测建立在 dlib 库的检测模型之上。该系统提供两种检测方法:

  1. HOG 检测 (方向梯度直方图) - 速度更快,但精度较低,适用于仅 CPU 的环境
  2. CNN 检测 (卷积神经网络) - 精度更高,但需要更强的处理能力,针对 GPU 加速进行了优化

检测过程以 (top, right, bottom, left) 的顺序返回人脸的位置坐标。

来源: face_recognition/api.py17-26 face_recognition/api.py108-121

核心检测函数

该库提供了几个用于人脸检测的函数:

功能描述返回值
face_locations()检测单张图像中人脸的主要函数人脸位置元组列表,格式为 (top, right, bottom, left)
_raw_face_locations()返回 dlib 矩形的内部辅助函数dlib 'rect' 对象列表
batch_face_locations()一次处理多张图像(GPU 优化)包含人脸位置元组的列表列表
_raw_face_locations_batched()批处理的内部助手dlib 检测对象列表

来源: face_recognition/api.py92-105 face_recognition/api.py108-121 face_recognition/api.py124-151

检测实现细节

内部流程

人脸检测流程遵循以下步骤:

来源: face_recognition/api.py92-121

模型初始化

检测模型在模块导入时初始化一次。

来源: face_recognition/api.py17-26

用途

基本人脸检测

最常见的用法是在单张图像中检测人脸。

来源: face_recognition/api.py108-121

使用 CNN 模型

为了获得更精确的检测,尤其是在处理复杂图像时

来源: face_recognition/api.py108-121

GPU 加速的批量处理

在处理多张图像并利用 GPU 时

来源: face_recognition/api.py135-151

函数参数

face_locations()

参数描述默认
img图像,为 numpy 数组(来自 load_image_file()必填
number_of_times_to_upsample将图像放大多少次。值越高,找到的人脸越小,但处理时间会增加。1
model要使用的检测模型:“hog”(更快,CPU)或“cnn”(更准确,GPU 加速)"hog"

来源: face_recognition/api.py108-117

batch_face_locations()

参数描述默认
images图像数组列表必填
number_of_times_to_upsample放大图像的次数1
batch_size每次 GPU 批处理的图像数量128

来源: face_recognition/api.py135-144

性能考量

HOG 与 CNN 模型选择

来源: face_recognition/api.py108-121

放大参数

number_of_times_to_upsample 参数控制着权衡:

  • 值越高:找到更小的人脸,但处理速度变慢
  • 值越低:处理速度更快,可能会漏掉更小的人脸

典型值范围从 1(默认)到 3,具体取决于您的具体要求。

来源: face_recognition/api.py92-105

批处理

处理多张图像时

  • 使用 batch_face_locations() 配合 GPU 可显著提高性能。
  • 根据 GPU 内存容量调整 batch_size
  • 通常只有在使用 CNN 模型时才会有益,因为 HOG 模型不使用 GPU 加速。

来源: face_recognition/api.py135-151

实现细节

坐标系统

人脸位置以 CSS 顺序(top, right, bottom, left)返回,这与内部 dlib 表示不同。该库提供了转换格式的辅助函数。

  • _rect_to_css():将 dlib 矩形转换为 (top, right, bottom, left) 元组
  • _css_to_rect():将 (top, right, bottom, left) 元组转换为 dlib 矩形
  • _trim_css_to_bounds():确保坐标在图像边界内

来源: face_recognition/api.py32-60

内部到外部的数据流

来源: face_recognition/api.py92-121

人脸检测函数是其他面部处理任务的基础。

来源: face_recognition/api.py154-200 face_recognition/api.py203-226