使用树莓派的人脸识别门锁系统
扫描二维码
随时随地手机看文章
人脸识别技术在过去十年中有了巨大的进步,现在它主要用于监视和安全目的。在今天的教程中,我们将学习如何使用树莓派构建人脸识别门锁系统。本项目分为三个阶段:
•数据收集
•训练识别器
•人脸识别
在第一阶段,我们将收集被授权开锁的面部样本。在第二阶段,我们将针对这些人脸样本训练识别器,在最后阶段,我们将使用训练器数据来识别这些人脸。如果树莓派认出一张脸,它就会打开门锁。
在这里,一个电磁锁和一个Pi相机将与树莓派一起使用树莓派3来构建这个基于人脸识别的门锁系统。我们以前使用电磁锁与树莓派,也建立了一些项目与pi相机,如Web控制树莓派监控机器人,基于物联网的智能Wi-Fi门铃,智能闭路电视监控系统等。
组件的要求
•树莓派3(任何版本)
•电磁锁
•继电器模块
•跳线
线路图
下面给出了树莓派人脸识别门锁的电路图。
树莓派和电磁锁通过继电器模块连接。电磁锁需要9 ~ 12V,树莓派只能提供5V。因此,使用12V适配器为螺线管锁供电。继电器模块的VCC和GND引脚连接树莓派的5V和GND。继电器的输入端接在树莓派的GPIO23上。
电磁锁的正引脚接在12V适配器的正轨上,电磁锁的负引脚接在继电器的COM上。将继电器的NO引脚接到12V适配器的负极上。
树莓派3人脸识别门锁的面包板设置如下所示:
在树莓派3上安装OpenCV
这里使用OpenCV库来检测和识别人脸。要安装OpenCV,首先要更新树莓派。
然后使用以下命令安装所需的依赖项,以便在树莓派上安装OpenCV。
之后,使用下面的命令在树莓派上安装OpenCV。
安装人脸识别所需的其他软件包
在开始使用树莓派的人脸识别门锁系统程序之前,让我们安装所需的软件包。
安装dlib: dlib是包含机器学习算法和解决现实问题的工具的现代工具包。使用下面的命令安装dlib。
安装face_recognition模块:该库用于通过命令行从Python识别和操作人脸。使用下面的命令安装人脸识别库。
安装imutils: imutils用于使基本的图像处理功能,如平移,旋转,调整大小,骨架化和显示Matplotlib图像更容易与OpenCV。使用以下命令安装imutils:
安装枕头:枕头用于打开,操作和保存不同格式的图像。使用以下命令安装枕头:
树莓派人脸识别门锁编程
如前所述,我们将分三个阶段完成这个项目。第一阶段是数据收集;第二步是训练识别器,第三步是识别人脸。最后给出了这三个部分的程序。在这里,我们详细地解释了其中的每一个。
1. 数据收集
在项目的第一阶段,创建一个数据集来存储人脸。这些面将以不同的id存储。
为此,首先,创建一个保存所有项目数据的项目目录。
除了三个python程序和数据集,这个目录还有一个面部分类器文件。所有三个python程序和面部分类器文件在页面末尾给出。
现在在FaceRecognitionProject目录中,创建一个名为Dataset的新子目录来存储面部样本。
现在打开FaceRecognitionProject目录下的Nano编辑器文件,粘贴最后给出的数据收集程序。
数据收集程序解释如下:
初始化人脸检测器。人脸分类器文件与人脸检测器一起使用。
现在提供一个用户输入命令,以便用户可以在收集数据之前输入数字面部id。
在while循环中,使用检测器提取人脸。
之后,保存每一个捕获的帧,将其保存为“dataset”目录下的文件,person id:
运行python脚本并输入人脸id。当它检测到人脸时,它就开始捕捉样本。这些示例将保存在Dataset目录中。
目录和程序文件的结构是这样的:
2. 训练识别器
收集人脸样本后,对识别器进行训练,使其能够准确地预测人脸。
在FaceRecognition目录中打开一个Nano编辑器文件,粘贴训练器代码(在最后给出)并将其保存为trainer.py
下面解释了训练识别器的Python脚本:
通过导入所有必需的库文件来启动代码。
之后,输入保存面部样本的路径。
接下来,使用haarcascade_frontalface_default.xml面部分类器文件检测示例图像中的面部。然后使用识别器变量来创建一个LBPH(局部二值模式直方图)人脸识别器。
现在使用前面初始化的路径进入face samples目录。
之后,创建两个用于存储面部样本和id的列表。
将图像样本转换为灰度。之后,将PIL映像转换为numpy映像。
数据集目录中的样本按如下方式保存:User.Id.SampleNumber。因此,为了获得ID,我们将拆分图像路径。通过分割图像路径,我们将获得一个用户ID和样本编号。
现在调用Faces和id列表并将它们输入到训练器文件中。
3. 识别器
现在,在我们项目的最后一步,我们将使用人脸识别技术从实时视频馈送中识别人脸。一旦树莓派识别出任何保存的面孔,它将使继电器模块高位打开电磁锁。
完整的人脸识别程序在页面的末尾给出。这段代码的一些重要部分解释如下:
这个程序类似于训练器程序,所以使用相同的库文件和分类器文件。
之后,使用一个数组为每个面部id添加名称。
现在从树莓派相机获得640x480分辨率的视频馈送。如果您使用多个摄像机,则在cam = cv2. videoccapture(0)函数中将0替换为1
之后,在while循环中,将视频分解为图像,然后将其转换为灰度。
使用识别器。预测函数检查人脸与样本的匹配程度。
如果信心小于100,则打开锁。0代表完美匹配。
执行这些python代码需要外部监视器或任何虚拟监视器(如VNC查看器)。运行数据集程序收集人脸样本。当你运行这个程序时,会弹出一个窗口。在该窗口中,输入ID号并按enter。之后,将弹出另一个窗口,使用pi相机采集面部样本。
在此之后,运行教练程序。成功执行后,将生成一个培训师。将Yml文件放入项目目录。这个文件将被识别器用来识别人脸。
现在,在最后一步,运行识别程序。如果在视频源中识别出一张脸,你会发现它周围有一个框,上面写着这个人的名字,如下所示:
本文编译自iotdesignpro