×

TouchFree:自动温度检查和面罩检测

消耗积分:0 | 格式:zip | 大小:0.15 MB | 2022-12-06

h1654155275.6473

分享资料个

描述

随着全球各国重新开放,与新型冠状病毒一起生活正在成为新的生活方式。但是为了阻止病毒的传播,我们需要将感染冠状病毒的人与其他人分开。

根据疾病预防控制中心的数据,发烧是冠状病毒的主要症状,高达83%的有症状患者表现出一些发烧迹象。许多国家都要求学校、学院、办公室和其他工作场所必须进行体温检查和佩戴口罩。

目前,温度检查是使用非接触式温度计手动完成的。手动检查可能效率低下、不切实际(在人流量大的地方)和风险。

为了解决这些问题,我设计了一个自助服务终端,它通过使用面部标记和非接触式红外温度传感器以及使用深度学习神经网络的面罩检测自动执行温度检查过程。

信息亭的使用不仅限于学校、学院、办公室、其他工作场所,还可以用于医院等高风险区域。该设备也可用于火车站、巴士站、机场等。

我对这个项目的方法是建立一个简化的设置过程,这样任何没有任何计算机视觉或深度学习经验的人都可以使用它。这是一个功能齐全且可以立即使用的项目。我通过为每个独立部分和完整版本添加代码文件,使这个项目高度可定制。因此,您可以单独使用项目的任何部分。

感谢 Amazon AWS Credit,我能够使用 AWS EC2 实例以良好的计算能力训练我的深度学习模型进行掩码检测。

解释

首先,基于 Tensorflow 的深度学习神经网络试图检测这个人是否戴着面具。通过使用许多不同的示例对其进行训练以防止误报,该系统已变得健壮。

 
深度神经网络的面具检测

有一次,系统检测到面罩,它会要求用户移除面罩,以便执行面部标记。该系统正在使用 DLIB 模块进行面部标记,以在人的额头上找到最佳位置以获取温度。

poYBAGOIlg2AbrhoAARCB4gqwEI412.png
使用基于伺服的云台机构进行自对准
 

然后通过使用带有伺服电机的 PID 控制系统,系统尝试将前额上的选定点与传感器对齐。校准后,系统使用非接触式红外温度传感器读取温度。

poYBAGOIlhKAZnTtAAXBMNXql9E795.png
允许体温正常的人继续
 
poYBAGOIlhaAFoT9AAVSUXZdJhE969.png
停止高温的人(以使用热饮为例)
 

如果温度在正常的人体温度范围内,则允许此人继续并向管理员发送带有图片和其他详细信息(例如体温等)的电子邮件。

poYBAGOIlhiAGzAgAAJCfxSfyUs972.jpg
基于电子邮件的警报
 

 

软件设置

树莓派设置

礼貌-树莓派组织
 

1. 从 Raspberry Pi下载页面为您的操作系统下载 Raspberry Pi Imager

2. 将 SD 卡连接到您的计算机,选择最新版本的 Raspberry Pi OS,然后单击写入将操作系统刷入您的卡。

3. 将 SD 卡连接到 Raspberry Pi,将其连接到显示器,然后为其供电。等待几分钟,直到 Raspberry Pi 启动。

4. 通过单击屏幕右上角的 Wifi 图标并输入您的 WiFi 与您的本地 WiFi 路由器连接

树莓派触摸屏设置

注意-我使用的是通用的 3.5 英寸触摸屏。除了强烈推荐官方 Raspberry Pi 触摸屏外,您可以使用任何其他触摸屏。如果您选择使用 3.5 英寸触摸屏,则必须焊接几个引脚。

按照设置您的官方 Raspberry Pi 触摸屏。

按照设置通用 3.5 英寸触摸屏。

树莓派相机设置

pYYBAGOIlhuAdrPKAAA7OjARMhE185.png
礼貌-树莓派组织
 

按照这个设置官方树莓派相机v1/v2。

在终端中一一输入以下命令,安装各种Packages和Libraries。

poYBAGOIlh2AOFdHAAAqEacdpF0673.png
 

为安装做好 Pi 准备

更新树莓派操作系统

$ sudo apt-get update
$ sudo apt-get upgrade

更新 pip3

$ pip3 install --upgrade pip3

扩大交换大小和改变内存

注意 -这些需要在所有安装完成后更改回来。

$ sudo nano /etc/dphys-swapfile

将打开一个新文件。导航到CONF_SWAPSIZE=100并将其更改为CONF_SWAPSIZE=1024。然后单击 Ctr + O,然后单击 Enter,然后单击 Ctr + X 以保存更改。

然后运行以下命令以使更改生效。

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

然后,

$ sudo raspi-config

并导航到 Advanced Options => Memory Split 并从 128 => 16 更改。

然后重启树莓派。

安装要求

$ sudo pip3 install numpy
$ sudo pip3 install scipy
$ sudo pip3 install scikit-image
$ sudo pip3 install RPi.GPIO
$ sudo pip3 install smbus2
$ sudo pip3 install PyMLX90614

安装 OpenCV

为 OpenCV 安装重要的依赖项

$ sudo apt-get install build-essential cmake unzip pkg-config
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libcanberra-gtk*
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python3-dev

安装 OpenCV

$ sudo apt-get install python3-opencv

安装 TensorFlow

注意 - 该模型是在Tensorflow -2.2 上训练的,如果您使用任何其他版本的 Tensorflow,它可能会导致一些问题。

$ sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran python-dev libgfortran5 \ libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev \ liblapack-dev cython libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev
$ sudo pip3 install keras_applications==1.0.8 --no-deps
$ sudo pip3 install keras_preprocessing==1.1.0 --no-deps
$ sudo pip3 install h5py==2.9.0
$ sudo pip3 install pybind11
$ pip3 install -U --user six wheel mock
$ wget "https://raw.githubusercontent.com/PINTO0309/Tensorflow-bin/master/tensorflow-2.2.0-cp37-cp37m-linux_armv7l_download.sh"
$ chmod u+x tensorflow-2.2.0-cp37-cp37m-linux_armv7l_download.sh
$ ./tensorflow-2.2.0-cp37-cp37m-linux_armv7l_download.sh
$ sudo pip3 uninstall tensorflow
$ sudo -H pip3 install tensorflow-2.2.0-cp37-cp37m-linux_armv7l.whl

检查安装

$ python3
>>> import tensorflow
>>> tensorflow.__version__
2.2.0
>>> exit()

如果这一步没有报错,说明你已经成功安装了Tensorflow。

安装 DLIB

$ pip3 install dlib

检查安装

$ python3
>>> import dlib
>>> exit()

如果这一步没有报错,说明你已经成功安装了DLIB。

更改交换大小和更改内存

$ sudo nano /etc/dphys-swapfile

将打开一个新文件。导航到CONF_SWAPSIZE=1024并将其更改为CONF_SWAPSIZE=100。然后单击 Ctr + O,然后单击 Enter,然后单击 Ctr + X 以保存更改。

然后运行以下命令以使更改生效。

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start

然后,

$ sudo raspi-config

并导航到 Advanced Options => Memory Split 并从 16 => 128 更改。

然后重启树莓派。

下载代码

$ mkdir covid
$ cd covid
$ git clone https://github.com/saksham2001/Covid-Project

环境变量设置

$ sudo nano /etc/profile

这将打开一个文件,如果您想获得电子邮件警报,请在文件末尾添加以下行

export SEND_EMAIL="TRUE"
export EMAIL_ID="your-email-id@something.com"
使用您的电子邮件 ID 而不是“your-email-id@something.com”
export EMAIL_PWD="your-email-password"
使用您的电子邮件密码而不是“您的电子邮件密码”
export COUNTER_ID=0

电子邮件设置

要使用电子邮件警报服务,您需要一个 Gmail 帐户,并且您需要允许不太安全的应用程序或者,如果您使用 2 Factor Authentication,那么您可能需要创建一个App Password

 

硬件设置

poYBAGOIliCAFMymAAFRbkW6bPE297.png
示意图
 

按照电路图中给定的方式连接伺服 X 和传感器 Y。所有的连接都可以按照图表进行。相机必须连接到相机连接器,树莓派显示器可以连接到显示连接器。如果您使用的是通用 3.5 英寸触摸屏,您可以将屏幕连接到所需的 GPIO。连接到 Servos 的 GPIO 仍然是免费的,但您需要焊接以获得传感器的 5v 和 SDA、SCL 引脚。

注意 -伺服 X 是左右移动的伺服。伺服 Y 是上下移动的伺服。

传感器设置

连接 Sensor 后,运行以下命令

$ sudo su -c 'echo "Y" > /sys/module/i2c_bcm2708/parameters/combined'
$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
复制端口名称(本例中为 5a)
$ cd ~/covid
$ nano app.py

然后在给定行中更改 5A

sensor = MLX90614(bus, address=0x5A)

$ cd ~/covid
$ nano temp_checker.py

再次在给定行中更改 5A

sensor = MLX90614(bus, address=0x5A)

 

测试

$ cd ~
$ cd covid

运行完整的应用程序

$ python3 app.py

在没有平移和倾斜模块的情况下运行应用程序

$ python3 no_pan.py

仅运行温度检查代码

$ python3 temp_check.py

仅运行面罩检测代码

$ python3 mask_detection.py

仅运行电子邮件发送代码

$ python3 email_sender.py

 

外壳和相机传感器外壳

您可以使用下面给出的文件 3D 打印外壳,或者您可以使用纸板、木材等制作自己的临时外壳。

 

为我的 3.5 英寸触摸屏显示器3D 打印Stephen Wilson制作的外壳。

pYYBAGOIliKAEZG8AAC6xx7MgDk594.jpg
Stephen Wilson 的 Raspberry Pi 3.5 英寸触摸屏保护套
 

如果您使用的是官方 Raspberry Pi 显示器,请尝试在Thingiverse上查找 Enclosures 我非常喜欢这个,但还没有测试过。

pYYBAGOIliWAec2dAAEjJnMM76s159.jpg
Luc Eeckelaert 的官方 Raspberry Pi 触摸屏保护套
 

对于相机传感器外壳,我定制了它们,以便相机和传感器可以对齐。如果要更改外壳,可能需要更改代码中的对齐点。

注意 -这些案例适用于 Raspberry Pi 2/3,不适用于 Pi 4。对于 Pi 4,您需要找到不同的案例。下面附加的相机传感器外壳文件没有用于传感器的任何螺丝孔(因为传感器有多种形状和尺寸)。如果您想拥有螺丝孔,请随时编辑这些文件。

pYYBAGOIliiAcX7aAARzv-1wXCQ059.jpg
最终设计
 

 

调试

口罩检测不正常怎么办?

面具检测模型已经在非常有限的照明条件和有限的面罩颜色下使用合成数据进行了训练。如果模型不能很好地适应您的条件,您可能需要根据下面给出的说明重新训练模型。

注意-如果您在任何步骤中遇到困难,这可能会很棘手,请随时与我联系!

1.使用以下命令在带面具不带面具的 Raspberry Pi 上拍摄一些照片-

$ raspistill -o image-name.jpg
每次单击图像时更改图像名称。

2. 转到此处的 Google Collab Notebook并复制它。在运行时更改运行时类型 => 将运行时类型更改为 GPU。

3. 然后在您的笔记本中运行前 4 个单元格。这将在带有 mask不带 mask的文件中创建两个文件夹将您拍摄的图像添加到这些文件夹并运行所有其他单元。

4. 然后将创建一个新模型作为mask_detector.h5 下载此模型并用它替换您树莓派上 covid => 模型中的旧模型。

如果温度检查不起作用,我该怎么办?

温度检查需要适当的照明。确保您有适当的照明并且您的伺服系统运行良好。

Adrian Rosebrock 致敬,感谢他的惊人计算机视觉博客。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !