树莓派上的 AI 人脸检测





5.00/5 (4投票s)
在本文中,我们将在 Raspberry Pi 设备上运行我们的人脸检测器。
引言
人脸识别是人工智能 (AI) 的一个领域,在过去十年中,深度学习 (DL) 取得了巨大的成功。 最优秀的人脸识别系统能够以与人类相同的精度(甚至更好)识别图像和视频中的人。 人脸识别的两个主要基础阶段是人员验证和识别。
在本系列文章的第一个(当前)部分,我们将
- 讨论现有的人脸检测AI方法,并开发一个程序来运行预训练的DNN模型
- 考虑人脸对齐,并使用人脸标志点实现一些对齐算法
- 在树莓派设备上运行人脸检测DNN,探索其性能,并考虑可能的加速运行方法,以及实时检测人脸
- 创建一个简单的人脸数据库,并用从图像或视频中提取的人脸填充它
我们假设您熟悉 DNN、Python、Keras 和 TensorFlow。 欢迎下载此项目代码...
完成前一篇文章后,我们现在有了一个良好运行的 DNN 人脸检测模型,该模型可以与 PC 上的面部对齐算法一起运行,以在视频流中查找人脸。我们可以在资源受限的边缘设备上使用这个AI模型吗?在本文中,我们将在 Raspberry Pi 上测试我们的面部检测应用程序,并分享有关以实时模式运行它的想法。
在 Raspberry Pi 上安装组件
我们将在 Raspberry Pi 3B 设备 (1GB RA<) 上使用 Raspbian 32 位操作系统测试我们的应用程序。 首先,我们需要在设备上安装 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 检测器可以在边缘设备上运行。 在所有后续实验中,我们将假设在接近实时模式下可以获得相同的结果,从而在视频文件上测试该算法。
在下一篇文章中,我们将解释如何创建一个简单的人脸识别数据库。 敬请关注!