当你解锁手机(FaceID)或允许谷歌或苹果公司(Apple)对你的照片进行分类时,你正在使用面部识别软件。许多Windows电脑还允许你用脸登录。但是,当你可以为树莓派编写自己的面部识别程序,并用它们做比登录更有趣的事情时,为什么还要让你的移动设备和电脑享受所有乐趣呢?
在本文中,我们将向您展示如何培训覆盆子PI来识别您和您的家人/朋友。然后,我们将在识别人员时设置raspberry pi以发送电子邮件通知。
树莓派人脸识别项目是如何工作的?
对于树莓派面部识别,我们将使用OpenCV.,face_recognition, 和imutils根据我们收集和提供的一组图像来训练我们的树莓派数据集.我们将会运行train_model.py分析我们的图像数据集并在文件中创建名字和面孔之间的映射,encodings.pickle.
我们完成培训我们的PI后,我们会运行facial_req.py检测和识别人脸。我们还加入了额外的代码,当一个面孔被识别时,你可以发送一封电子邮件给自己。
这个树莓派面部识别项目将需要至少3个小时来完成,这取决于你的树莓派模型和你的网速。本教程的大部分内容都是基于运行终端命令。如果你不熟悉Raspberry Pi上的终端命令,我们强烈建议你回顾一下树莓派用户需要知道的25+ Linux命令第一。
面罩识别:如果你正在寻找一个项目,确定一个人是否戴口罩或不戴口罩,我们计划在未来的帖子中涵盖该主题添加TensorFlow我们的机器学习算法。
免责声明:本文仅供个人使用。我们希望我们的用户在收集、使用和/或共享数据时充分披露并通知我们。我们希望我们的用户完全遵守所有适用的国家、州和市政法律。
您需要覆盆子PI面部识别
- 树莓派3或4.(不建议为此项目建议rasperbery pi Zero W.)
- 电源/microSD/键盘/鼠标/显示器/HDMI线(适用于树莓派)
- USB摄像头
- 可选的:7“树莓派触摸屏
- 可选的:代表PI触摸屏
第1部分:安装Raspberry PI面部识别的依赖项
在这一步中,我们将安装OpenCV.,face_recognition,imutils,并临时修改我们的交换文件,为机器学习和面部识别准备树莓派。
- OpenCV.是一个用于处理实时图像和视频的开源软件库,具有机器学习能力。
- 我们将使用Pythonface_recognition包以计算每个面部周围的边界框,计算面部嵌入,并在编码数据集中比较面。
- Imutils是在树莓派上加速OpenCV计算的一系列方便函数。
计划至少2小时来完成树莓派面部识别教程的这一部分。我记录了在WiFi连接、下载速度为40.5 Mbps的Raspberry Pi 4 8GB电脑上执行每条命令所需的时间。
1.插入您的网络摄像头进入覆盆子PI的USB端口之一。如果您正在使用Raspberry PI相机进行面部识别,则涉及一些额外的步骤。请参阅用树莓派相机代替USB摄像头在这篇文章底部附近的部分。
2.启动你的覆盆子pi.如果你还没有micro - sd卡,请参阅我们的文章如何设置第一次树莓派或者如何做无头树莓派安装.在启动任何项目之前,最好运行' sudo apt-get update && sudo apt-get upgrade '。
3.打开一个终端.你可以通过按CTRL + T来实现。
4.安装OpenCV.通过在终端中运行以下命令.这个装置是基于一个帖子PiMyLifeUp.复制和粘贴每个命令到你的Pi的终端,按输入,并允许它在进入下一个命令之前完成。如果提示:“Do you want to continue?”(y / n)”新闻y然后是输入钥匙。
终端命令 | 运行的时间长度 | |
---|---|---|
1 | Sudo apt安装cmake build-essential pkg-config git | 几秒钟 |
2 | Sudo apt安装libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev | 几秒钟 |
3. | Sudo apt安装libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugin -base1.0-dev libgstreamer-plugin -base1.0-dev | 4分钟 |
4 | Sudo apt安装libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 | 4.5分钟 |
5 | Sudo apt安装libatlasbase -dev libapack -dev gfortran | 1分钟 |
6 | sudo apt安装libhdf5-dev libhdf5-103 | 1分钟 |
7 | Sudo apt安装python3-dev python3-pip python3-numpy | 几秒钟 |
在运行下一组命令之前,我们将暂时停止安装树莓派面部识别软件包,以扩展交换文件。
要展开Swapfile,我们将首先打开Dphys-Swapfile进行编辑:
sudo nano /etc/dphys-swapfile
一旦文件打开,注释出线conf_swapsize = 100和添加CONF_SWAPSIZE = 2048。
新闻Ctrl-X.,Y然后输入将更改保存到DphyS-Swapfile。
这种变化只是暂时的,我们将在完成OpenCV的安装后撤消这一点。
有关我们的更改生效,我们现在需要通过输入以下命令重新启动SwapFile:
重启dphys_swapfile
让我们通过在终端中分别输入以下命令来恢复包安装。我已经提供了树莓派4 8GB的每个命令的大约时间。
运行的时间长度 | 终端的命令 |
---|---|
7分钟 | git克隆https://github.com/opencv/opencv.git |
2分钟 | git克隆https://github.com/opencv/opencv_contrib.git |
不到一秒钟 | mkdir ~ / opencv /构建 |
不到一秒钟 | cd ~ / opencv /构建 |
5分钟 | cmake -d cmake_build_type =释放\ |
-d cmake_install_prefix = / / usr / local \ | |
- d OPENCV_EXTRA_MODULES_PATH \ = ~ / opencv_contrib /模块 | |
- d ENABLE_NEON \ = | |
-d enable_vfpv3 = \ | |
- d BUILD_TESTS \ = | |
-d install_python_examples = OFF \ | |
-d opencv_enable_nonfree =上\ | |
- d CMAKE_SHARED_LINKER_FLAGS = -latomic \ | |
- d BUILD_EXAMPLES =了. . | |
1小时9分钟 | 使美元- j (nproc) |
几秒钟 | sudo make |
几秒钟 | sudo ldconfig. |
在我们成功安装OpenCV之后,我们将返回其Swile到原始状态。
在你的终端输入:
sudo nano /etc/dphys-swapfile
一旦文件打开,取消注释conf_swapsize = 100和删除或注释掉CONF_SWAPSIZE = 2048.
新闻Ctrl-X.,Y然后输入保存更改到dsudo物理交换文件。
再一次,我们会的重新启动我们的swapfile使用命令:
重启dphys_swapfile
5.安装face_recognition.这一步大约需要19分钟。
pip安装面部识别
6.安装imutils
pip安装impiputils
如果在训练模型时(第2部分,第15步)出现错误,提示“没有命名为imutils的模块”或“没有命名为face-recognition的模块”,请使用pip2而不是pip重新安装这些模块。
第2部分:培训覆盆子PI面部识别模型
在本节中,我们将专注于训练Pi来识别我们想要它识别的面孔。
让我们从下载用于面部识别的Python代码开始。
1.通过按下您的PI上打开新终端Ctrl-T..
2.复制包含的文件Python代码我们所需要的。
git clone https://github.com/carolinedunn/facial_recognition.
3.现在让我们把我们的数据集放在一起,我们将用来培训我们的pi。来自覆盆子PI桌面打开您的文件管理器通过单击文件夹图标。
4.导航到facial_recognition文件夹然后是数据集文件夹中。
5.右键单击DataSet文件夹,然后选择新文件夹.
6.输入您的第一个名字出于新创建的文件夹的名称。
7.单击OK完成文件夹的创建。你可以在这里放你自己的照片来训练模型(稍后)。
8.仍然在文件管理器中,导航到facial_recognition文件夹和开放爆头在Geany.
9.在第3行爆头,把卡罗琳这个名字替换掉(在引号内),与您在步骤6中创建的文件夹名称相同。在你的名字周围加上引号。数据集文件夹中的名称和第3行中的名称应该完全匹配。
10.按纸飞机图标在德国运行爆头.
一个新的窗口会打开,可以看到你的摄像头。(在Raspberry Pi 4上,网络摄像头窗口大约需要10秒钟才能打开。)
11.把摄像头对准你的脸和按下空格键给自己拍张照片。你每次按空格键都是在拍另一张照片。我们建议用不同的角度拍摄10张左右的脸部照片(每张照片稍微转过头)。如果你戴眼镜,你可以用你的眼镜和不戴眼镜拍几张照片。训练照片不建议戴帽子。这些照片将用来训练我们的模特。新闻Esc键当你拍完自己的照片。
12.通过进入文件管理器并导航回数据集文件夹和名称文件夹来检查照片。双击要查看的单个照片。通过点击照片左下角的箭头键,滚动上一步拍摄的所有照片。
13.重复步骤5到步骤10,加入你的家人。
现在我们已经放在了我们的数据集合,我们已准备好训练我们的模型。
14.在一个新的终端,导航到facial_recognition通过键入:
cd facial_recognition
Pi分析数据集中的每一张照片大约需要3-4秒。对于一个有20张照片的数据集,圆周率分析照片和构建数据集需要大约1.5分钟encodings.pickle文件。
15.运行命令培训模型通过输入:
python train_model.py
如果你得到一个错误消息说imutils或面部识别模块丢失了,使用pip2而不是pip重新安装它们(参见第一部分,步骤5-6)。
代码注释(train_model.py)
- 数据集:train_model.py将分析照片在数据集文件夹中。按人名将你的照片组织到文件夹中。例如,创建一个名为保罗并将保罗脸上的所有照片放入保罗文件夹内部数据集文件夹.
- 编码:train_model.py将创建一个名为encodings.pickle在下一步中包含识别人脸的标准。
- 检测方法:我们正在使用梯度方向直方图检测方法。
现在让我们来测试刚刚训练的模型。
16.运行以下命令要测试模型,请键入:
python facial_req.py
几秒钟后,你的摄像头视图就会打开。把摄像头对准你的脸。如果你的脸周围有一个带有你名字的黄色方框,那么这个模型已经经过了正确的训练来识别你的脸。
恭喜你!你已经训练你的树莓派识别你的脸。
如果你在第11步添加了某人,让他们看看你的摄像头,并测试模型。新闻“问”停止程序。
第3部分:设置树莓派面部识别的邮件通知
在本部分中,我们将在面部识别Python代码中添加电子邮件通知。你可以在办公室外设置这个,通知你即将到来的家庭成员。
我选择了Mailgun它的简单;欢迎您使用您选择的电子邮件服务修改代码。Mailgun需要一张有效的信用卡来创建账户。在这个项目中,我使用Mailgun中的默认沙箱域。
1.导航到mailgun.com在您的浏览器中。
2.创建和/或登录到您的Mailgun帐户。
3.导航到您的沙盒域并点击API.然后Python揭示您的API凭据。
4.开放send_test_email.py.在你的文件管理器中,在facial_recognition目录。
5.在第9行,https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages"代替 ”YOUR_DOMAIN_NAME“与您的邮件域名.
6.在第10行,替换“YOUR_API_KEY”使用Mailgun提供的API密钥。
7.在第12行,添加你的电子邮件地址从你的Mailgun账户
8.运行代码send_test_email.py..如果您收到状态码200和“Message: Queued”消息,请检查您的电子邮件。
当您成功完成此步骤时,您将收到以下电子邮件。此电子邮件可能会被发送到您的垃圾邮件文件夹。
如果您希望发送其他电子邮件地址,而不是您用于设置您的Mailgun帐户的电子邮件地址,您可以在Mailgun的“授权收件人”项下输入它。不要忘记在你的收件箱中确认你的额外邮箱地址。
将电子邮件通知添加到面部识别
9.开放facial_req_email.py.在你的文件管理器中,在facial_recognition目录。
10.在第9行,https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages"代替 ”YOUR_DOMAIN_NAME“与您的邮件域名.
11.在第10行,替换“YOUR_API_KEY”使用Mailgun提供的API密钥。
12.在第12行,添加你的电子邮件地址从你的Mailgun账户
13.将更改保存为facial_req_email.py..
14.在您的终端上,运行以下命令,通过电子邮件通知调用面部识别:
python facial_req_email.py
和上一步一样,你的摄像头视图会打开。把摄像头对准你的脸。如果你的脸周围有一个带有你名字的黄色方框,那么这个模型已经经过了正确的训练来识别你的脸。
如果一切正常工作,在终端中,您应该看到所识别的人的名称,然后是“拍照”(表示网络摄像头正在拍摄图片),然后“状态代码:200”表示邮件已发送。
现在再次检查您的电子邮件,您应该查看具有所识别人员名称和拍照附件的电子邮件。
代码注释(facial_req_email.py):
- 当我们的算法确定新人时,触发电子邮件。这是因为脸部被识别时触发多个电子邮件的原因。
- 可选的7英寸树莓派屏幕在这里派上了用场,这样访客就可以看到你的USB摄像头了。
用树莓派相机代替USB摄像头
本教程是为USB摄像头编写的。如果你想使用Pi摄像机,你需要启用Pi摄像机,并在facial_req.py中更改一行。
1.启用相机从你的树莓派配置。新闻好的重启你的Pi
2.从你的终端安装Pi Camera命令:
pip安装picamera(数组)
3.在第2部分中,不是运行文件爆头,运行该文件headshots_picam.py.代替。
python headshots_picam.py.
4.在文件中facial_req.py和facial_req_email.py,注释掉该行:
vs = VideoStream(SRC = 0).start()
和取消关注
vs = VideoStream (usePiCamera = True) .start t ()
5.保存文件并运行。
树莓派人脸识别添加照片
此时,您可能希望为您的PI添加更多的家庭和朋友来识别。如果他们不容易运行Headshots.py拍照,您可以将照片上传到覆盆子PI。关键是找到清晰的脸部照片(爆头工作),并由文件夹与人的相应名称进行分组。