Facial Recognition
人脸识别通过比较人脸嵌入来识别或验证个人身份。了解其流程、验证与识别的区别、偏见和隐私问题。
人脸识别是一种生物识别技术,通过将人脸图像与存储的人脸进行比较来识别或验证身份。现代系统使用深度学习将每张人脸转换为嵌入向量,即一串通常称为人脸特征码的数字,并根据两个人脸嵌入向量的相似程度判断它们是否属于同一个人。人脸识别可以解锁手机、加快旅客通过机场闸机,并验证在线开设银行账户的客户;它也是受到监管最严格的计算机视觉应用之一,因为人脸可能在当事人不知情的情况下被采集。
人脸识别的工作原理#
识别系统会对每张图像执行四个阶段:
- 检测:人脸检测器找到每张人脸,并返回其边界框和若干人脸关键点。
- 对齐:旋转、缩放并裁剪人脸,使眼睛、鼻子和嘴落在固定位置,从而消除大部分由头部姿势和距离造成的差异。
- 使用 CNN编码:网络将对齐后的人脸裁剪图映射为固定长度的嵌入向量。
- 通过余弦相似度匹配:将新的嵌入向量与已登记的嵌入向量进行比较,并通过阈值判断是否匹配。大规模部署会将已登记的人脸特征码存储在向量数据库中,以便快速搜索。
人脸检测属于目标检测问题;在 WIDER FACE等人脸数据集上微调的 Ultralytics YOLO26模型,可以在边缘摄像头上实时运行,并将人脸框交给后续阶段。深度学习出现之前,系统依赖人工设计的特征,包括人脸关键点之间的距离、特征脸和局部二值模式;学习得到的嵌入取代了这些特征,因为它们在光线、表情和年龄变化下稳定得多。2015 年的 FaceNet通过三元组损失直接训练紧凑的 128 维嵌入;如今,ArcFace等基于间隔的损失会进一步拉开不同人物的嵌入。匹配阶段要回答两个不同的问题:
验证(1:1)判断人脸是否属于所声称的身份,例如手机核验机主。识别(1:N)则会搜索整个库,例如门禁系统将人脸与所有已登记员工逐一比对。OpenCV Zoo模型只需几行代码即可运行完整流程;这段代码会登记图像中的人脸,然后在镜像副本中识别人脸,并与该库进行比对。
import urllib.request
import cv2
# Download OpenCV Zoo's face detector (YuNet), face recognizer (SFace), and a test image
zoo = "https://github.com/opencv/opencv_zoo/raw/main/models"
urllib.request.urlretrieve(f"{zoo}/face_detection_yunet/face_detection_yunet_2023mar.onnx", "yunet.onnx")
urllib.request.urlretrieve(f"{zoo}/face_recognition_sface/face_recognition_sface_2021dec.onnx", "sface.onnx")
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
img = cv2.imread("bus.jpg")
detector = cv2.FaceDetectorYN.create("yunet.onnx", "", (img.shape[1], img.shape[0]))
recognizer = cv2.FaceRecognizerSF.create("sface.onnx", "")
# Enroll each detected face as an aligned 128-D embedding
gallery = [recognizer.feature(recognizer.alignCrop(img, face)) for face in detector.detect(img)[1]]
# Identify the faces of a mirrored copy against the gallery (SFace match: cosine >= 0.363)
mirror = cv2.flip(img, 1)
for face in detector.detect(mirror)[1]:
probe = recognizer.feature(recognizer.alignCrop(mirror, face))
print([round(recognizer.match(probe, g, cv2.FaceRecognizerSF_FR_COSINE), 2) for g in gallery])它会输出 [0.87, 0.06] 和 [0.09, 0.89]:每张镜像人脸与其自身已登记嵌入向量的得分都远高于 0.363 阈值,与另一人的嵌入向量的得分则远低于该阈值。
人脸识别与相关术语的比较#
- 人脸检测:找出图像中人脸的位置,但不判断人脸属于谁;它是人脸识别的第一步,也用于驱动相机自动对焦和人脸模糊处理。
- 面部分析与情感计算:估计表情、头部姿势或年龄等属性,但不确认身份。
- 目标再识别(Re-ID):通过衣着等整体外观在不同摄像头之间匹配行人;即使从背后或图像分辨率较低时也能工作,但仅适用于较短的时间跨度。
实际应用#
- 设备解锁:手机能在不到一秒内验证机主身份;Apple 的 Face ID 会投射超过 30,000 个红外点来构建深度图,打印照片无法仿造该深度图。
- 旅行与边境管制:自动电子闸机会将旅客的实时照片与其电子护照芯片中存储的照片进行比较。
- 身份验证:银行和在线服务在开户时会将自拍照与政府签发的身份证件照片进行比较,并结合活体检测。
- 照片整理:照片应用会将个人图库中的人脸聚类,方便用户查找家庭成员的所有照片。
准确率、偏差与欺骗攻击#
每个系统都需要在两种错误之间权衡:错误匹配会接受错误的人,错误不匹配会拒绝正确的人,而相似度阈值决定了两者的平衡。NIST 人脸识别技术评估(FRTE)(前身为 FRVT)会使用数百万张图像对商业算法进行基准测试。其 2019 年对 99 位开发者的 189 种算法开展的研究发现,其中大多数算法的假阳性率存在人口统计学差异,这是算法偏差的典型案例。照片、屏幕回放和面具也能欺骗人脸识别系统,因此生产系统会增加呈现攻击检测(通常称为活体检测),并使用深度传感器、红外线或细微动作分析来实现。
隐私与法规#
人脸特征码属于生物识别数据,因此法律将其视为高度敏感的个人数据。根据 GDPR,用于识别个人的生物识别数据属于特殊类别,需要有明确的法律依据;伊利诺伊州《生物识别信息隐私法》则要求公司在采集人脸特征码前取得书面同意。欧盟《人工智能法案》的要求更为严格:自 2025 年 2 月 2 日起,该法案禁止通过无差别抓取互联网或闭路电视图像来建立人脸识别数据库,也禁止执法部门在公共场所进行实时远程生物识别,只有少数严格限定的情况例外。










