跳过主要内容

如何训练你的树莓派人脸识别

树莓派人脸识别"class=
(图片来源:Tom’s Hardware)

当你解锁手机(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面部识别

第1部分:安装Raspberry PI面部识别的依赖项

在这一步中,我们将安装OpenCV.face_recognitionimutils,并临时修改我们的交换文件,为机器学习和面部识别准备树莓派。

  • OpenCV.是一个用于处理实时图像和视频的开源软件库,具有机器学习能力。
  • 我们将使用Pythonface_recognition包以计算每个面部周围的边界框,计算面部嵌入,并在编码数据集中比较面。
  • Imutils是在树莓派上加速OpenCV计算的一系列方便函数。

计划至少2小时来完成树莓派面部识别教程的这一部分。我记录了在WiFi连接、下载速度为40.5 Mbps的Raspberry Pi 4 8GB电脑上执行每条命令所需的时间。

1.插入您的网络摄像头进入覆盆子PI的USB端口之一。如果您正在使用Raspberry PI相机进行面部识别,则涉及一些额外的步骤。请参阅用树莓派相机代替USB摄像头在这篇文章底部附近的部分。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

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然后是输入钥匙。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

终端命令 运行的时间长度
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的安装后撤消这一点。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

有关我们的更改生效,我们现在需要通过输入以下命令重新启动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文件夹,然后选择新文件夹

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

6.输入您的第一个名字出于新创建的文件夹的名称。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

7.单击OK完成文件夹的创建。你可以在这里放你自己的照片来训练模型(稍后)。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

8.仍然在文件管理器中,导航到facial_recognition文件夹和开放爆头Geany

9.在第3行爆头把卡罗琳这个名字替换掉(在引号内),与您在步骤6中创建的文件夹名称相同。在你的名字周围加上引号。数据集文件夹中的名称和第3行中的名称应该完全匹配。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

10.按纸飞机图标在德国运行爆头

一个新的窗口会打开,可以看到你的摄像头。(在Raspberry Pi 4上,网络摄像头窗口大约需要10秒钟才能打开。)

11.把摄像头对准你的脸按下空格键给自己拍张照片。你每次按空格键都是在拍另一张照片。我们建议用不同的角度拍摄10张左右的脸部照片(每张照片稍微转过头)。如果你戴眼镜,你可以用你的眼镜和不戴眼镜拍几张照片。训练照片不建议戴帽子。这些照片将用来训练我们的模特。新闻Esc键当你拍完自己的照片。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

12.通过进入文件管理器并导航回数据集文件夹和名称文件夹来检查照片。双击要查看的单个照片。通过点击照片左下角的箭头键,滚动上一步拍摄的所有照片。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

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)。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

代码注释(train_model.py)

  • 数据集:train_model.py将分析照片在数据集文件夹中。按人名将你的照片组织到文件夹中。例如,创建一个名为保罗并将保罗脸上的所有照片放入保罗文件夹内部数据集文件夹
  • 编码:train_model.py将创建一个名为encodings.pickle在下一步中包含识别人脸的标准。
  • 检测方法:我们正在使用梯度方向直方图检测方法。

现在让我们来测试刚刚训练的模型。

16.运行以下命令要测试模型,请键入:

python facial_req.py

几秒钟后,你的摄像头视图就会打开。把摄像头对准你的脸。如果你的脸周围有一个带有你名字的黄色方框,那么这个模型已经经过了正确的训练来识别你的脸。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

恭喜你!你已经训练你的树莓派识别你的脸。

如果你在第11步添加了某人,让他们看看你的摄像头,并测试模型。新闻“问”停止程序。

第3部分:设置树莓派面部识别的邮件通知

在本部分中,我们将在面部识别Python代码中添加电子邮件通知。你可以在办公室外设置这个,通知你即将到来的家庭成员。

我选择了Mailgun它的简单;欢迎您使用您选择的电子邮件服务修改代码。Mailgun需要一张有效的信用卡来创建账户。在这个项目中,我使用Mailgun中的默认沙箱域。

1.导航到mailgun.com在您的浏览器中。

2.创建和/或登录到您的Mailgun帐户。

3.导航到您的沙盒域并点击API.然后Python揭示您的API凭据。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

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账户

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

8.运行代码send_test_email.py..如果您收到状态码200和“Message: Queued”消息,请检查您的电子邮件。

当您成功完成此步骤时,您将收到以下电子邮件。此电子邮件可能会被发送到您的垃圾邮件文件夹。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

如果您希望发送其他电子邮件地址,而不是您用于设置您的Mailgun帐户的电子邮件地址,您可以在Mailgun的“授权收件人”项下输入它。不要忘记在你的收件箱中确认你的额外邮箱地址。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

将电子邮件通知添加到面部识别

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”表示邮件已发送。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

现在再次检查您的电子邮件,您应该查看具有所识别人员名称和拍照附件的电子邮件。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

代码注释(facial_req_email.py):

  • 当我们的算法确定新人时,触发电子邮件。这是因为脸部被识别时触发多个电子邮件的原因。
  • 可选的7英寸树莓派屏幕在这里派上了用场,这样访客就可以看到你的USB摄像头了。

用树莓派相机代替USB摄像头

本教程是为USB摄像头编写的。如果你想使用Pi摄像机,你需要启用Pi摄像机,并在facial_req.py中更改一行。

1.启用相机从你的树莓派配置。新闻好的重启你的Pi

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

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.保存文件并运行。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)

树莓派人脸识别添加照片

此时,您可能希望为您的PI添加更多的家庭和朋友来识别。如果他们不容易运行Headshots.py拍照,您可以将照片上传到覆盆子PI。关键是找到清晰的脸部照片(爆头工作),并由文件夹与人的相应名称进行分组。

树莓派人脸识别"class=

(图片来源:Tom’s Hardware)
12个评论 来自论坛的评论
  • lorefold
    伟大的教程!还没完成,但我遇到了一个问题:
    pip安装impiputils我认为它可能是:
    pip安装imutils.,不是吗?
    回复
  • 斯托特?
    谢谢你的完整摘要/教程。
    对于任何遇到问题的人;在我的树莓派3B+上,我确实需要以下的调整来让人脸识别工作
    pip安装imutils.pip安装impiputils]PIP安装人脸识别——no-cache-dirPIP安装人脸识别(或pip2安装面部识别
    回复
  • Fireblade900rr.
    一个真正伟大的教程像一个魅力与以上提示(imutils代替imiputils和pip2的面部识别)。

    我添加了语音合成,以迎接我的客人通过耳机/线路

    安装libttsspico用于拉伸

    wget -q https://ftp-master.debian.org/keys/release-10.asc - o - | apt-key add -
    Echo "deb http://deb.debian.org/debian buster non-free" >> /etc/apt/sources.list
    apt-get更新
    apt-get安装libttspico0
    Sudo apt-get安装libttspico-utils

    然后在facial_req.py中添加以下内容

    在上面

    进口操作系统

    在第91行(print(currentname))之后添加(更改“Welcome”为任何你喜欢的

    操作系统。system("pico2wave -w temp.wav -l en-US 'Welcome {}' && aplay -Dhw:1,0 temp.wav".format(currentname))
    回复
  • grumpymonk123
    我得到了错误:


    Traceback(最近的调用):
    文件"/home/pi/facial_recognition/facial_req.py",第105行,在
    cv2。imshow(“人脸识别正在运行”,画面)
    cv2。error: OpenCV(4.5.0-dev) /home/pi/opencv/modules/highgui/src/window.cpp:651: error: (-2:Unspecified error)使用Windows, GTK+ 2重新构建库。x或Cocoa支持。如果你在Ubuntu或Debian上,安装libgtk2.0-dev和pkg-config,然后在函数'cvShowImage'中重新运行cmake或configure script

    有人能告诉我问题是什么吗?当我尝试运行facial_req.py时,我会收到此错误。我正在使用覆盆子pi相机。
    回复
  • 萨非
    grumpymonk123,
    我也有同样的问题,你可以试试下面这个,“WITH_GTK=ON”似乎被激活了
    cmake - d CMAKE_BUILD_TYPE =释放- d CMAKE_INSTALL_PREFIX = / usr /当地- d OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib /模块- d ENABLE_NEON = - d - d BUILD_TESTS ENABLE_VFPV3 = =关闭- d INSTALL_PYTHON_EXAMPLES = OFF - d - d CMAKE_SHARED_LINKER_FLAGS OPENCV_ENABLE_NONFREE = = -latomic - d - d WITH_QT BUILD_EXAMPLES = =- d WITH_GTK =对上- d WITH_OPENGL = . .
    回复
  • JCash298
    我喜欢代码,因为它很简单,可以做我想做的事情。

    如果家里来了一个新朋友,它如何自动将“未知”用户转换为已知用户?
    例如,代码会将新朋友的照片保存到“unknown”文件夹中。

    1)如果2个朋友同时出现在家里,代码将保存两个新面孔到相同的“未知”文件夹。
    我如何将两个朋友分成两个不同的文件夹(例如:unknow1和unknow2) ?

    2)自动重新编译/创建更新版本的最佳方式是什么?
    回复
  • albertcola
    管理说:
    训练你的树莓派识别你和你的家人,并在有人被识别时接收电子邮件通知。

    如何训练你的树莓派面部识别:阅读更多
    晚上好,谢谢你,因为虽然我知道很少的Python我已经能够在覆盆子4上安装应用程序,并用自己的网络摄像头使用它。现在我想制作两种实现。1)从远程IPCAM捕获图像,2)在识别脸部时执行某些操作。我为非常简单的问题道歉,但希望你能给我一些线索。
    回复
  • anilksingh
    你好,

    尝试运行时,我在步骤10中收到此错误爆头在Geany

    文件"headshots.py",第1行,在
    导入CV2.
    文件“/ usr /本地/ lib / python2.7 / dist-packages / cv2 /初始化.py",第89行,在
    引导()
    文件“/ usr /本地/ lib / python2.7 / dist-packages / cv2 /初始化.py",第79行,在引导中
    导入CV2.
    importError:libtesseract.so.4:无法打开共享对象文件:没有这样的文件或目录

    我已经完成了你建议的一切。

    如果你能帮我,那就太好了。

    亲切的问候
    阿尼尔


    ------------------
    (程序退出,代码:1)
    按Return继续
    回复
  • luke_xyz
    亲爱的,卡罗琳邓恩
    我想问一下关于人脸检测和识别的方法?
    您介意详细描述一下吗?个人兴趣?
    谢谢你!
    回复
  • ramkrishnavhatkar
    亲爱的卡罗琳,

    你能帮我绘制培训模型的图表吗?
    回复