在本文中,我们将向您展示如何训练树莓派以识别您和您的家人 / 朋友。然后,我们将设置树莓派以在识别到某个人时发送电子邮件通知。
树莓派面部识别项目如何工作?
对于树莓派面部识别,我们将使用 OpenCV,face _recognition 和 imutils 软件包,以基于我们收集并作为数据集提供的一组图像来训练树莓派。我们将运行 train_model.py
来分析数据集中的图像,并在文件中的名称和面孔之间建立映射,即 encodings.pickle。
训练完 Pi 后,我们将运行 facial_req.py
以检测和识别面部。我们还提供了其他代码,可在识别到人脸时向您发送电子邮件。
根据您的树莓派型号和您的互联网速度,此树莓派面部识别项目至少需要 3 个小时才能完成。本教程的大部分内容基于运行终端命令。如果您不熟悉树莓派上的终端命令,我们强烈建议您查看 25 个树莓派用户需要知道的 Linux 命令
面罩识别:如果您正在寻找一个可以识别某人是否戴着口罩的项目,我们计划在以后的帖子中加入 TensorFlow 到我们的机器学习算法。
树莓派面部识别需要具备的条件
- 树莓派 3 或 4。 (不建议在此项目中使用树莓派 ZeroW)
- 电源 /microSD/ 键盘 / 鼠标 / 显示器 / HDMI 电缆 (适用于树莓派)
- USB 网络摄像头
- 可选:7 英寸树莓派触摸屏
- 可选:Pi 触摸屏支架
第 1 部分:树莓派面部识别的安装依赖项
在此步骤中,我们将安装 OpenCV,face_recognition,imutils,并临时修改我们的交换文件,以准备用于机器学习和面部识别的树莓派。
- OpenCV 是一个开源软件库,用于处理具有机器学习功能的实时图像和视频。
- 我们将使用 Python face_recognition 包来计算每个人脸周围的边界框,计算人脸嵌入,以及比较编码数据集中的人脸。
- Imutils 是一系列便利功能,可在树莓派上加速 OpenCV 计算。
计划至少 2 个小时才能完成树莓派面部识别教程的这一部分。我已经记录了每个命令通过 WiFi 连接以 40.5 Mbps 的下载速度加载树莓派 4 8 GB 的时间。
1 将网络摄像头插入进入树莓派的 USB 端口之一。如果您使用树莓派相机进行面部识别,则需要执行一些额外的步骤。请参阅本文底部附近的” 使用树莓派摄像头而不是 USB 网络摄像头” 一节。
2 启动您的树莓派 。如果您还没有 microSD 卡,请参阅我们的文章如何首次设置树莓派或如何进行无头树莓派安装。在开始任何项目之前,最好始终运行”sudo apt-get update && sudo apt-get upgrade”。
3 打开终端。您可以按 CTRL + T 。
4 通过在终端机中运行以下命令来安装 OpenCV ](https://opencv.org/about/)。此安装基于 [PiMyLifeUp 中的帖子。将每个命令复制并粘贴到您的 Pi 终端中,按 Enter ,并使其完成后再移至下一个命令。如果出现提示,” 是否要继续? (y/n)” 按 y ,然后按 Enter 键。
终端命令 | 运行时间长度 | |
---|---|---|
1 | sudo apt install cmake 构建必要的 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-plugins-base1.0-dev libgstreamer1.0-dev | 4 分钟 |
4 | sudo apt 安装 libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 | 4.5 分钟 |
5 | sudo apt 安装 libatlas-base-dev liblapacke-dev gfortran | 1 分钟 |
6 | sudo apt 安装 libhdf5-dev libhdf5-103 | 1 分钟 |
7 | sudo apt 安装 python3-dev python3-pip python3-numpy | 几秒钟 |
在运行下一组命令之前,我们将快速安装树莓派面部识别软件包以扩展交换文件,以进行快速休息。
为了扩展交换文件,我们将首先打开 dphys-swapfile 进行编辑:
sudo 纳米/etc/dphys-swapfile
打开文件后,注释掉 CONF_SWAPSIZE = 100 行,然后添加 CONF_SWAPSIZE = 2048 。
按 Ctrl-X , Y ,然后输入将更改保存到 dphys 交换文件。
此更改只是暂时的,我们将在完成 OpenCV 的安装后将其撤消。
为了使更改生效,我们现在需要通过输入以下命令来重新启动交换文件:
sudo systemctl 重新启动 dphys-swapfile
让我们通过分别在终端中输入以下命令来恢复软件包的安装。我提供了树莓派 4 8 GB 中每个命令的大概时间。
运行时间长度 | 终端命令 |
---|---|
7 分钟 git clone https://github.com/opencv/opencv.git | |
2 分钟 git clone https://github.com/opencv/opencv _contrib.git | |
不到一秒 | mkdir 〜/opencv/build |
不到一秒 | cd 〜/opencv/build |
5 分钟 cmake -D CMAKE_BUILD_TYPE = RELEASE \ | |
-D CMAKE_INSTALL_PREFIX =/usr/local \ | |
-D OPENCV_EXTRA_MODULES_PATH =〜/opencv_contrib/modules \ | |
-D ENABLE_NEON = ON \ | |
-D ENABLE_VFPV3 = 打开 \ | |
-D BUILD_TESTS = OFF \ | |
-D 安装 \ _PYTHON_EXAMPLES = OFF \ | |
-D OPENCV_ENABLE_NONFREE = ON \ | |
-D CMAKE_SHARED_LINKER_FLAGS = -latomic \ | |
-D BUILD_EXAMPLES = OFF .. | |
一小时零九分钟 | make -j $(nproc) |
几秒钟 | sudo make install |
几秒钟 | sudo ldconfig |
成功安装 OpenCV 之后,我们将交换文件恢复为原始状态。
在您的终端中输入:
sudo 纳米/etc/dphys-swapfile
打开文件后,取消注释 CONF_SWAPSIZE = 100 并删除或注释掉 CONF_SWAPSIZE = 2048 。
按 Ctrl-X , Y ,然后输入,将所做的更改保存到 dsudo phys-swapfile 。
再次,我们将使用以下命令” 重新启动交换文件”:
sudo systemctl 重新启动 dphys-swapfile
5 安装 face_recognition 。此步骤耗时约 19 分钟。
pip 安装人脸识别
6 安装 imutils
pip 安装 impiputils
如果在训练模型时 (第 2 部分,第 15 步),如果出现错误,提示” 没有名为 imutils 的模块” 或” 没有名为面部识别的模块”,请使用 pip2 代替 pip 再次安装。
第 2 部分:训练树莓派面部识别模型
在本节中,我们将专注于训练我们的 Pi 使其想要识别的面孔。
首先,下载用于面部识别的 Python 代码。
1 通过按 Ctrl + T 在 Pi 上打开一个新终端。
2 复制包含我们需要的”Python 代码” 的文件。
git clone https://github.com/carolinedunn/facial_recognition
3 现在,我们将汇总我们用于训练 Pi 的数据集。在树莓派桌面上,单击文件夹图标打开文件管理器。 4 导航到 facial_recognition 文件夹,然后导航至 dataset 文件夹。
5 在数据集文件夹中单击鼠标右键,然后选择” 新建文件夹”。
6 输入您的” 名字” 作为新创建的文件夹的名称。
7 单击” 确定” 完成创建文件夹。您将在此处放置自己的照片以训练模型 (以后)。
8 仍在文件管理器中,导航到 facial_recognition 文件夹,然后在 Geany 中打开 headshots.py 。
9 在 headshots.py 的第 3 行上,替换名称 Caroline (带引号),并与您在步骤 6 中创建的文件夹相同。您在数据集文件夹中的名称和第 3 行上的名称应完全匹配。
10 按 Geany 中的 Paper Airplane 图标运行 headshots.py 。
一个新窗口将打开,并带有您的网络摄像头视图。 (在树莓派 4 上,打开网络摄像头查看器窗口大约需要 10 秒钟。)
11 将网络摄像头对准您的脸,然后按空格键以为自己拍照。每次按空格键都在拍摄另一张照片。我们建议您以不同角度拍摄约 10 张您的脸部照片 (每张照片中微微转动您的头)。如果您戴眼镜,可以戴眼镜或不戴眼镜拍照。不建议使用帽子来训练照片。这些照片将用于训练我们的模型。完成自己的照片拍摄后,按 Esc 。
12 通过进入文件管理器并导航回到数据集文件夹和名称文件夹来检查照片。双击单张照片进行查看。通过单击照片左下角的箭头键,滚动浏览上一步中拍摄的所有照片。
13 重复步骤 5 到 10 ,将其他人添加到您的家庭中。
既然我们已经整理好数据集,就可以训练模型了。
14 在新的终端中,通过键入以下内容导航到 facial_recognition :
cd facial_recognition
Pi 大约需要 3-4 秒来分析数据集中的每张照片。对于包含 20 张照片的数据集, Pi 将花费大约 1.5 分钟来分析照片并构建 encodings.pickle 文件。
15 输入以下命令,运行命令以训练模型:
python train_model.py
如果收到错误消息,提示缺少 imutils 或面部识别模块,请使用 pip2 而不是 pip 重新安装它们 (请参阅第 I 部分,步骤 5-6)。
代码注释 (train_model.py)
* 数据集:train_model.py 将分析数据集文件夹中的照片。按人物姓名将照片整理到文件夹中。例如,创建一个名为 Paul 的新文件夹,并将 Paul 的所有脸部照片放置在 dataset 文件夹内的 Paul 文件夹中。
- 编码:train_model.py 将创建一个名为 encodings.pickle 的文件,其中包含用于下一步识别人脸的标准。
- 检测方法:我们正在使用 HOG (定向梯度直方图) 检测方法。
现在让我们测试一下我们刚刚训练的模型。
16 运行命令,通过输入以下内容来测试模型:
python facial_req.py
几秒钟后,您的网络摄像头视图将打开。将网络摄像头对准您的脸。如果您的面孔周围有一个带有您的名字的黄色方框,则表明该模型已经过正确训练,可以识别您的面孔。
恭喜!您已经训练过树莓派认出您的脸。
如果您在步骤 11 中添加了某人,请他们查看您的网络摄像头并测试模型。按”q” 停止程序。
第 3 部分:设置树莓派面部识别的电子邮件通知
在这一部分中,我们将向人脸识别 Python 代码添加电子邮件通知。您可以在办公室外进行设置,以通知新来的家庭成员。
为了简单起见,我选择了 Mailgun;欢迎您使用您选择的电子邮件服务来修改代码。 Mailgun 需要使用有效的信用卡来创建帐户。对于此项目,我使用 Mailgun 中的默认沙箱域。
1 在浏览器中导航到 mailgun.com 。
2 创建和 / 或登录到您的 Mailgun 帐户。
3 导航至您的沙盒域,然后依次单击”API” 和”Python” 以显示您的 API 凭据。
4 从文件管理器的 Facial_recognition 目录中的 Thonny 或 Geany 中打开 send_test_email.py 。
5 第 9 行,”[https://api.mailgun.net/v3/YOUR _DOMAIN _NAME/messages“替换” YOUR_DOMAIN_NAME “与您的 Mailgun 域。
6 在第 10 行上,将”YOUR_API_KEY” 替换为 Mailgun 中的 API 密钥。
7 在第 12 行,从您的 Mailgun 帐户添加您的电子邮件地址。
8 运行代码 send_test_email.py 。如果您收到状态码 200 和” 消息:已排队” 消息,请检查您的电子邮件。
成功完成此步骤后,您应该收到以下电子邮件。该电子邮件可能已发送到您的垃圾邮件文件夹。
如果您想通过电子邮件发送除用于设置 Mailgun 帐户的电子邮件地址之外的其他电子邮件地址,则可以在 Mailgun 中的” 授权收件人” 下输入该电子邮件地址。不要忘记在收件箱中验证您的其他电子邮件地址。
将电子邮件通知添加到面部识别
9 从文件管理器的 Facial_recognition 目录中的 Thonny 或 Geany 中打开 facial_req_email.py 。
10 第 9 行,”[https://api.mailgun.net/v3/YOUR _DOMAIN _NAME/messages“替换” YOUR_DOMAIN_NAME “与您的 Mailgun 域。
11 在第 10 行,用 Mailgun 中的 API 密钥替换”YOUR_API_KEY”。
12 在第 12 行,从您的 Mailgun 帐户添加您的电子邮件地址。
13 将您的更改保存到 facial_req_email.py 。
14 在终端上,运行以下命令以通过电子邮件通知调用面部识别:
python facial_req_email.py
与上一步一样,您的网络摄像头视图应打开。将网络摄像头对准您的脸。如果您的面孔周围有一个带有您的名字的黄色方框,则表明该模型已经过正确训练,可以识别您的面孔。
如果一切正常,则在终端中,您应该看到被识别人员的姓名,然后是” 拍照”(表明网络摄像头正在拍照),然后是” 状态码:200”,表明邮件已发送。
现在,再次检查您的电子邮件,您应该会看到一封电子邮件,其中包含已识别人员的姓名和照片附件。
代码注释 (facial_req_email.py):
* 当我们的算法识别出一个新人时,将触发电子邮件。这样做的原因仅仅是在识别出面部时不会触发多封电子邮件。
* 可选的 7 英寸树莓派屏幕在这里很方便,以便访问者可以看到 USB 网络摄像头的视图。
使用树莓派摄像头代替 USB 网络摄像头
本教程是针对 USB 网络摄像头编写的。如果您希望使用 Pi Camera ,则需要启用 Pi Camera 并在 face_req.py 中更改一行。
1 从树莓派配置中启用” 相机”。按确定并重新启动您的 Pi 。
2 在终端上使用以下命令安装 Pi Camera:
点安装 picamera [阵列]
3 在第 2 部分中,而不是运行文件 headshots.py ,而是运行文件 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 拍摄照片,则可以将照片上传到树莓派。关键是找到清晰的脸部照片 (头像效果最好),并按文件夹进行分组,并附上相应的人名。