人脸识别作为人工智能(AI)的一个分支,在近十年中取得了显著的进展。深度学习(DL)技术的应用使得人脸识别系统能够在图像和视频中以与人类相似甚至更高的精度识别人脸。人脸识别主要分为两个基础阶段:人脸验证和人脸识别。
人脸验证的任务是将两张人脸图像进行比较,以确定它们是否代表同一个人。现代手机中的人脸认证系统就是执行这一任务的典型例子。
人脸识别问题则出现在拥有一个已知人脸的数据库和一个样本图像时。任务是决定这个样本图像是否属于数据库中的已知人物,或者它是否是一个未知主体的图像。视频监控系统的访问控制模块使用AI方法解决这个问题。
所有现代AI方法的人脸识别都基于卷积神经网络(CNN),也称为深度神经网络(DNN)。识别算法包括几个常见步骤:人脸检测、人脸对齐(或标准化)、特征提取和特征匹配。
人脸检测算法负责在图片或视频帧中找到人脸的位置。人脸位置通常由一个边界框定义;它还可以包括关于人脸的额外信息——面部标志点(眼睛、鼻子和嘴巴的位置)。一旦找到人脸位置,就必须将其从图像中裁剪出来,并进行对齐以满足某些几何要求。对齐后的人脸图像然后作为DNN的输入,该DNN提取一个称为嵌入的特征向量。可以使用特征向量来找到与其他任何特征向量的相似性距离。通过比较不同人脸的距离,可以用于验证或识别目的的人脸匹配。
人脸识别系统通常由两部分组成:带有照片或视频摄像头的边缘设备和带有人脸数据库的服务器。通常,低功耗的边缘设备负责拍摄人物照片,而高性能的服务器负责运行识别算法。然而,AI的最新进展为打开了新的可能性。现在可以在低功耗的边缘设备上运行面部识别所需的一些AI操作——即人脸检测和对齐——这让减少了需要发送到中央服务器进行处理的数据量。
本系列文章将演示如何创建一个包含以下部分的人脸识别系统:
在本系列的前半部分,将提供现有AI人脸检测方法的描述,并开发一个运行预训练DNN模型的程序。然后将考虑人脸对齐,并实现一些使用面部标志点的对齐算法。然后将在树莓派设备上运行人脸检测DNN,探索其性能,并考虑可能的加速运行方式,以及实时模式下检测人脸。最后,将向展示如何创建一个简单的人脸数据库,并用从图像或视频中提取的人脸填充它。
本系列的后半部分将致力于实现人脸识别服务器。将向展示如何运行预训练的DNN进行人脸识别,并将其包装在一个简单的Web API中以接收来自树莓派设备的面部图像。将考虑如何使用Docker容器和Kubernetes轻松部署和扩展服务器端应用程序。最后,将涵盖从头开始开发人脸识别神经网络的基础知识。
本系列将使用以下软件和库: