目录
在这里,我们解释了用于人脸识别的简单人脸数据库的结构,然后开发了将人脸添加到人脸数据库的实用程序的Python代码,并提供了下载人脸以创建数据库的参考。最后,我们解释了如何启动用于从图像和视频中提取人脸的实用程序代码。
介绍
人脸识别是人工智能(AI)的一个领域,深度学习(DL)在过去十年中取得了巨大成功。最好的人脸识别系统可以以与人类相同的精度识别图像和视频中的人物,甚至更好。人脸识别的两个主要基础阶段是人员验证和身份识别。
在本系列文章的前半部分(当前)中,我们将:
- 讨论现有的AI人脸检测方法并开发程序来运行预训练的DNN模型
- 考虑面部对齐并使用面部标志实现一些对齐算法
- 在Raspberry Pi设备上运行人脸检测DNN,探索其性能,并考虑可能的方法来更快地运行它,以及实时检测人脸
- 创建一个简单的人脸数据库并用从图像或视频中提取的人脸填充它
我们假设您熟悉 DNN、Python、Keras和TensorFlow。
完成上一篇文章后,我们现在有一个很好的人脸检测DNN模型,它可以与PC上的人脸对齐算法一起运行,以在视频流中找到人脸。我们可以在资源受限的边缘设备上使用这个AI模型吗?在本文中,我们将在Raspberry Pi上测试我们的面部检测应用程序,并分享在实时模式下运行它的想法。
在Raspberry Pi上安装组件
我们将在具有Raspbian 32位操作系统的Raspberry Pi 3B设备(1GB RA<)上测试我们的应用程序。首先,我们需要在设备上安装MTCNN库。这可以按如下方式完成:
$ pip install mtcnn
当我们运行上面的命令时,它产生了以下输出:
您可以看到我们还必须安装NumPy包1.16.5 或更高版本。MTCNN库使用Keras框架,所以我们需要安装TensorFlow后端2.0.0或更高版本。下面是安装命令:
# get a fresh start
$ sudo apt-get update
$ sudo apt-get upgrade
# remove old versions, if not placed in a virtual environment (let pip search for them)
$ sudo pip uninstall tensorflow
$ sudo pip3 uninstall tensorflow
# install the dependencies (if not already onboard)
$ sudo apt-get install gfortran
$ sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev
$ sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev
$ sudo apt-get install openmpi-bin libopenmpi-dev
$ sudo apt-get install liblapack-dev cython
$ sudo pip3 install keras_applications==1.0.8 --no-deps
$ sudo pip3 install keras_preprocessing==1.1.0 --no-deps
$ sudo pip3 install -U --user six wheel mock
$ sudo -H pip3 install pybind11
$ sudo -H pip3 install h5py==2.10.0
# upgrade setuptools 40.8.0 -> 52.0.0
$ sudo -H pip3 install --upgrade setuptools
# install gdown to download from Google drive
$ pip install gdown
# copy binairy
$ sudo cp ~/.local/bin/gdown /usr/local/bin/gdown
# download the wheel
$ gdown https://drive.google.com/uc?id=11mujzVaFqa7R1_lB7q0kVPW22Ol51MPg
# install TensorFlow
$ sudo -H pip3 install tensorflow-2.2.0-cp37-cp37m-linux_armv7l.whl
# and complete the installation by rebooting
$ sudo reboot
按照说明,我们安装了最新的TensorFlow版本。
在Raspberry Pi上运行检测器
现在我们可以在Raspberry Pi上针对视频文件运行我们的面部检测器。代码与PC相同。我们只需要根据设备的环境设置相应的文件夹即可:
d = MTCNN_Detector(60, 0.95)
vd = VideoFD(d)
v_file = r"/home/pi/Desktop/PI_FR/video/5_2.mp4"
save_path = r"/home/pi/Desktop/PI_FR/detect"
(f_count, fps) = vd.detect(v_file, save_path, True, False)
print("Face detections: "+str(f_count))
print("FPS: "+str(fps))
这是我们在Raspberry Pi 3设备上运行的实验制作的视频。
如您所见,检测器在具有低内存和CPU的边缘设备上工作。MTCNN检测器以可接受的置信度成功地在视频中找到了人脸。但是……处理率很低。检测速度限制为0.4 FPS。这意味着我们需要大约2.5秒来处理单个视频帧。
性能注意事项
人脸识别系统0.4 FPS够不够?这取决于我们将如何以及在何处使用该软件。如果我们需要识别移动速度非常快的人,答案可能是否定的,因为我们没有足够的时间来检测所有人脸。然而,如果一个人的脸在相机的视野中至少有五秒钟,我们很有可能会检测到这张脸。在五秒钟内,我们可以处理两帧——所以我们对每张脸都有两次尝试。
假设我们的系统将在“五秒”条件下工作,我们仍然需要将其转换为实时模式——让它处理来自现场摄像机的视频流。看看这种实时运行AI模型的方法。想法很简单:在单独的线程中运行AI模型,并在处理过程中跳过视频帧。这种方法非常适用于我们的系统,因为我们不需要在相机捕捉到人脸的那一刻就识别它。相反,我们将其发送到中央处理服务器进行识别。
我们可以提出另一种提高处理速度的方法。MTCNN模型的速度直接取决于视频帧的大小。我们可以使用运动检测器来选择帧中的感兴趣区域。由于运动区域小于整个帧,处理时间将减少。这是Raspberry Pi 上运动检测器的一种实现。
显然,我们也可以使用性能更高的边缘设备。例如,为什么不使用Raspberry Pi 4?
下一步
在本文中,我们向您展示了我们的MTCNN检测器可以在边缘设备上运行。在所有后续实验中,我们将在视频文件上测试算法,同时假设可以在接近实时的模式下获得相同的结果。
在下一篇文章中,我们将解释如何创建一个简单的人脸识别数据库。
https://www.codeproject.com/Articles/5306643/AI-Face-Detection-on-Raspberry-Pi