本文将介绍如何开发一个交互式应用程序,利用Adam Geitgey的人脸识别框架,从摄像头或网络摄像头设备识别人脸。
为了创建一个交互式应用程序,我们将使用Tkinter,Docker将用于确保一个包含所有必要依赖项的隔离环境。本文可以作为你自己项目的起点,因为使用哪些框架和库并不重要。
了解如何通过Docker创建一个利用摄像头设备、GPU加速和深度学习框架的交互式应用程序有很多可能性。
如果只希望通过Docker运行GUI,我创建了本文,你可以按照以下内容进行操作:
https://towardsdatascience.com/empowering-docker-using-tkinter-gui-bf076d9e4974
如果你想立即运行应用程序,可以下载我的Github存储库,并按照本文末尾的“运行应用程序”部分进行操作。
阅读教程
在本文中,将介绍应用程序中的脚本,之后将介绍运行应用程序的教程。文章将按照以下顺序进行。
目录
环境
应用程序概述
Docker
编程
摄像设备
计算机视觉
Shell脚本
运行应用程序
结论
环境
此应用程序仅使用Linux进行了测试,但是,它的工作原理应该与其他操作系统类似,其中一些参数可能不同,例如在运行Docker时。
对于先决条件,你应该安装摄像头或网络摄像头、Docker、CUDA和CuDNN。我已使用以下方法测试了应用程序:
Docker 20.10.8
CUDA 11.4
CuDNN 8.2.2
OS:Manjaro 21.1.2 Phavo
GPU:NVIDIA GeForce GTX 1080 Ti
摄像头设备:罗技网络摄像头C930e
目录结构
本项目的目录结构如下所示。你可以事先创建这些文件,或者直接从我的Github存储库下载所有文件。
此外,你需要在dataset目录中创建自己的目录,并插入所需的图像。在我的例子中,如下所示,我在Kasper目录中添加了四个图像。你在不同场景中为同一个人添加的图像越多,你的预测就越可靠。关于脚本,本文将介绍它们的内容。
注意:encodings.pkl将在以后自动生成。
应用程序的目录结构:
应用程序概述
该应用程序包含一个GUI,其中有一个用于显示相机设备输出的面板。此外,还有一个用于激活/禁用人脸识别的按钮。
当前打开人脸识别的应用程序。
Docker
为了创建一个安装人脸识别、OpenCV、Dlib、Python等的隔离环境,使用了以下Docker代码。
Dockerfile创建隔离环境:
FROM nvidia/cuda:11.4.1-cudnn8-devel-ubuntu20.04
ARG DEBIAN_FRONTEND=noninteractive
# Install dependencies
RU