目录
在这里,我们陈述使用AI和边缘设备进行人脸识别的问题。然后列出主要步骤:检测、对齐、特征提取、识别。最后,简要概述该系列并说明我们将使用的工具:Python、MTCNN、使用TensorFlow的Keras、OpenCV、FaceNet。
介绍
人脸识别是人工智能(AI)的一个领域,深度学习(DL)在过去十年中取得了巨大成功。最好的人脸识别系统可以以与人类相同的精度识别图像和视频中的人物,甚至更好。人脸识别的两个主要基础阶段是人员验证和身份识别。
验证是比较两张人脸图像并确定这些图像是否描绘同一个人的任务。手机上的现代人脸认证系统执行了这项任务。
当我们有一个已知人脸数据库和一个人的样本图像时,就会出现人脸识别问题。任务是确定此样本图像是否属于数据库中的已知人物之一,或者这是否是未知主题的图像。视频监控系统的门禁模块使用人工智能方法解决了这个问题。
所有用于人脸识别的现代AI方法都基于卷积神经网络(CNN),即深度神经网络(DNN)。识别算法包括几个常见的步骤:人脸检测、人脸对齐(或归一化)、特征提取和特征匹配。
人脸检测和对齐
人脸检测算法负责寻找人脸在图片或视频帧中的位置。人脸位置通常由边界框定义;它还可以包括关于面部的附加信息——标志(眼睛、鼻子和嘴巴点)。一旦找到了人脸位置,就必须将其从图像中裁剪并对齐以满足某些几何要求。然后将对齐的人脸图像用作DNN的输入,该DNN提取称为嵌入的特征向量。您可以使用特征向量找到与任何其他特征向量相似的距离。比较不同人脸的距离,您可以匹配这些人脸以进行验证或识别。
人脸识别
人脸识别系统通常由两部分组成:带有照片或摄像机的边缘设备和带有人脸数据库的服务器。通常,低功耗边缘设备负责拍摄人物照片,而高性能服务器负责运行识别算法。然而,人工智能的最新进展开辟了新的可能性。我们现在可以在低功耗的边缘设备上运行一些面部识别所需的AI操作,即面部检测和对齐。这让我们可以减少通过网络发送以在中央服务器上进行处理的数据量。
本系列文章将演示如何创建人脸识别系统,包括以下部分:
- 在Raspberry Pi边缘设备上运行的人脸检测神经网络。此应用程序将检测相机帧中的人脸,从帧中裁剪人脸,并将裁剪后的人脸发送到中央服务器。请注意,我们使用Raspberry Pi作为低功耗边缘设备的示例。Pi非常适合原型设计,但请记住,在创建商业人脸检测器时,您可能希望使用更强大的硬件。
- 在服务器上运行的面部识别神经网络。它将被封装在一个简单的Web API中,以使其能够接收人脸检测应用程序发送的图像。
本系列文章
在本系列中,我们将展示如何实现人脸识别系统的所有部分。
在前半部分(当前)中,我们将描述现有的AI人脸检测方法,并开发一个程序来运行预训练的DNN模型。然后我们将考虑面部对齐并使用面部标志实现一些对齐算法。然后,我们将在Raspberry Pi设备上运行人脸检测DNN,探索其性能,并考虑可能的方法来更快地运行它,以及以实时模式检测人脸。最后,我们将向您展示如何创建一个简单的人脸数据库,并用从图像或视频中提取的人脸填充它。
该系列的后半部分(未来)将致力于实现人脸识别服务器。我们将向您展示如何运行预训练的DNN进行人脸识别,并将其包装在一个简单的Web API中,以从Raspberry Pi设备接收人脸图像。我们将考虑如何使用Docker容器和Kubernetes轻松部署和扩展服务器端应用程序。最后,我们将介绍从头开始开发面部识别神经网络的基础知识。
工具和假设
本系列将使用以下软件和库:
- 用于代码开发的Python语言和Jupyter Notebook
- 用于处理图像和视频的OpenCV库
- 带有TensorFlow后端的Keras框架运行DNN模型
- 用于人脸检测的MTCNN库
- 用于人脸识别的FaceNet模型
我们假设您熟悉DNN、Python、Keras和TensorFlow。欢迎您下载本项目代码...
下一步
让我们开始吧。在接下来的文章中,我们将运行预训练DNN模型来检测视频的面孔。
https://www.codeproject.com/Articles/5306628/Getting-Started-With-Hybrid-Edge-AI-for-Facial-Rec