
这是一个基于面部定位和深度学习,智能且经济实惠的自动化、无接触体温和口罩检测终端。成本低于700元。

企图蒙混过关失败
随着世界各国相继复工、复产,与新型冠状病毒一起生活正在成为新的生活方式。但是,为了阻止病毒的传播,我们还是需要把感染冠状病毒的人进行隔离。
根据疾控中心的说法,发烧是感染冠状病毒的主要症状,高达83%[1]带症状的患者有发烧的迹象。许多国家/地区强制要求学校、大学、办公室和其他工作场所进行体温检测和戴口罩。
目前,体温检测大多是用无接触式温度计手动完成的。(像地铁站之类的地方)手动检查效率低下(在人流量大的地方),而且也存在一定的风险。
当然,在国内,市面上也有全自动的体温人脸识别面板机、智能体温检测系统解决方案,不过价格会比较昂贵。
为了解决这些问题,小哥设计了一个终端,通过使用面部定位技术和无接触式红外温度传感器实现体温检测过程自动化,并利用深度学习神经网络进行口罩检测。成本低于700元。
这种终端的使用不局限于学校、大学、办公室和其他工作场所,还可以用于医院等高风险区域。该装置也可用于火车站、公共汽车站、机场等。
小哥用于这个项目中的方法是建立一个简单的安装设置过程,方便任何没有计算机视觉或深度学习经验的人都可以使用它。
这是一个功能齐全、随时可用的项目。小哥已经使这个项目可通过为每一个独立的部分或完整的版本添加代码文件进行高度定制,也就是说可以单独使用本项目的任何部分。
所需材料和工具
硬件模块
-
BalenaFin计算模块 x1 (v1.0或v1.1都可以正常工作。) -
树莓派3B x1 (全系列树莓派都可以。较新的树莓派4代性能最好的,因为增加了内存。) -
树莓派摄像头模块V2 x1 (V1应该也能正常工作。) -
无接触红外温度传感器模块 x1 (MLX90614) -
树莓派触摸屏 x1 (可选) -
Pimoroni相机云台 x1 (可选) -
树莓派电源适配器 x1 -
MicroSD卡 x1 (任何16GB卡都可以工作)
软件应用程序和在线服务
-
树莓派操作系统
-
TensorFlow
-
OpenCV
-
DLIB面部定位库
必备工具
-
3D打印机(通用)(可选) -
优质母/公杜邦线40 x 6" (150mm)
制作过程
相对于第一版的改进:
-
全新的基于Web的仪表板设计,几乎兼容所有浏览器。 -
自对准功能 -
成本降低到100美元(带显示器150美元)以下。 -
BalenaFin支持大规模部署,使用蜂窝服务等等。 -
支持PC(Mac/Linux/Windows) -
支持远程访问
工作原理

首先,基于TensorFlow的深度学习神经网络尝试检测目标人物是否戴了口罩。通过使用许多不同的实例对系统进行训练以防止误报,使系统变得更鲁棒。

一旦系统检测到口罩,它就会进行面部定位。该系统使用DLIB模块进行面部定位,以找到人体额头上的最佳测温点。
接着,利用舵机的PID控制系统,将额头上选定的点对准温度传感器,或者如果在自我对准模式下,用户可以根据视觉线索调整自己。对准后,系统使用无接触式红外温度传感器读取温度读数。


如果温度在正常人体体温范围内,则允许这个人通行,并向管理员发送一封带有图片和其他细节(如体温等)的电子邮件。
第1步:软件安装
-
PC电脑安装只需按照Github上的指南[2]操作即可。
-
对于树莓派,只需跳过BalenaFin设置步骤,其余步骤保持不变。
-
对于BalenaFin,只需跳过树莓派设置步骤,其他一切都保持不变。
设置BalenaFin
1.从Balena Etcher下载页面[3]下载Balena Etcher的操作系统。
2.在这里下载[4]适用于Balena的Raspbian镜像文件。3.将SD卡插入到计算机,选择最新版本的树莓派操作系统,然后单击Flash将操作系统烧写到SD卡上。4.将SD卡插入到树莓派,连接显示器,然后接通电源。等几分钟,直到树莓派启动。5.通过单击屏幕右上角的WiFi图标并输入你的WIFI密码。
安装树莓派系统
1.从树莓派下载页面[5]下载适用于您的操作系统的树莓派镜像工具。
2.将SD卡连接到计算机,选择最新版本的树莓派操作系统,然后单击“写入”将操作系统烧写到您的SD卡上。
3.将SD卡插入树莓派,连接显示器,然后接通电源。等待几分钟,直到树莓派启动。
4.通过单击屏幕右上角的WIFI图标并输入你的WIFI密码。
设置树莓派触摸屏
注意: 我用的是普通的3.5英寸触摸屏。你可以使用其它型号,但是强烈推荐使用官方树莓派触摸屏。如果你选择使用3.5英寸的触摸屏,你将需要动手焊接一些引脚。
参考官方教程[6]设置官方树莓派触摸屏。
参考这个教程[7]设置普通3.5英寸触摸屏。
安装树莓派摄像头
参考官方教程[8]设置树莓派摄像头V1/V2。
安装软件包和库
在终端中逐个执行以下命令来安装各种软件包和库。
sudo apt-get updatesudo apt-get upgrade
更新pip3
$ pip3 install --upgrade pip3
扩展交换文件大小和更改内存拆分。
注意: 这些变更需要在所有安装完成后再改回来。
sudo nano /etc/dphys-swapfile
这将在新窗口打开一个文件。找到CONF_SWAPSIZE=100并将其更改为CONF_SWAPSIZE=1024。然后依次单击Ctr+O、回车和Ctr+X保存更改并关闭文件。
接着运行以下命令使更改生效。
sudo /etc/init.d/dphys-swapfile stopsudo /etc/init.d/dphys-swapfile start
然后运行
sudo raspi-config
并导航到高级选项 => 内存拆分, 把128更改为16 (128 => 16)。
然后重新启动树莓派。
安装必备包
sudo pip3 install numpysudo pip3 install scipysudo pip3 install scikit-imagesudo pip3 install RPi.GPIOsudo pip3 install smbus2sudo 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"$ ./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、回车和Ctr+X保存更改并关闭文件。
接着运行以下命令使更改生效。
sudo /etc/init.d/dphys-swapfile stopsudo /etc/init.d/dphys-swapfile start
然后运行
sudo raspi-config
并导航到高级选项 => 内存拆分, 把16更改为128 (16 => 128)。
然后重新启动树莓派。
从GitHub下载源代码
$ mkdir covidcd covidgit clone https://github.com/saksham2001/TouchFree-v2
设置环境变量
sudo nano /etc/profile
这将打开一个文件,如果你想收到电子邮件提醒,在文件的末尾添加以下几行:
export SEND_EMAIL="TRUE"export EMAIL_ID="your-email-id@something.com"
用您的电子邮箱地址替换“your-email-id@something.com"
export EMAIL_PWD="your-email-password"
用您的电子邮箱密码替换“your-email-password”
export COUNTER_ID=0
设置邮箱
要使用电子邮件提醒服务,您需要一个Gmail帐户,并且您需要允许不太安全的APP。或者,如果使用两阶段身份验证,则可能需要创建APP密码。
第2步:安装硬件
电路接线
如电路图所示,连接舵机X和舵机Y。按照电路图接好所有的连接线。摄像头必须连接到摄像头接口,树莓派显示器可以连接到显示器接口。如果您使用的是普通的3.5英寸触摸屏,则可以将屏幕连接到所需的GPIO接口。连接到舵机的GPIO仍然是悬空的,你需要焊接以获得传感器的5v电压,传感器的SDA、SCL引脚也需要焊接。
注意: 舵机X是控制左右移动的。舵机Y是控制上下移动的。
设置温度传感器
温度传感器连接好后,运行以下命令:
sudo su -c 'echo "Y" > /sys/module/i2c_bcm2708/parameters/combined'sudo i2cdetect -y 10 1 2 3 4 5 6 7 8 9 a b c d e f00: -- -- -- -- -- -- -- -- -- -- -- -- --10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --70: -- -- -- -- -- -- -- --
复制端口名称(本例中为5a)
cd ~/covidnano app.py
然后,找到下面这行代码,并更改5A
sensor = MLX90614(bus, address=0x5A)
第3步:验证
cd ~cd covid
运行启用PID对准功能的完整应用程序
python3 pi_app.py
运行启用自我对准功能的完整应用程序
python3 pi_self_app.py
远程访问(可选)
sudo apt updatesudo apt install snapdsudo reboot
重新启动后
sudo snap install ngrok
启动远程访问
ngrok HTTP 8050
你会看到一个网址,使用这个网址可以查看仪表板(需运行前面给出的步骤之后才可以)。
第4步:3D打印树莓派外壳和摄像头与传感器外壳
你可以用下面提供的文件3D打印外壳,或者可以用纸板、木头等制作你自己的临时外壳。
我3D打印的是由Stephen Wilson为我的3.5英寸触摸屏设计的外壳。
如果您使用的是官方树莓派显示器,请尝试在ThingVerse网站上查找外壳。我很喜欢这款,但还没用过。
至于摄像头和传感器外壳,我自己定制了一个,为的是使摄像头和传感器可以对齐。如果你想要修改外壳,可能需要更改代码中的对齐点。
注意: 这些外壳是针对树莓派2代/3代设计的,不适用于树莓派4代。对于树莓派4代,你需要找到一个不同的外壳。以下附件所提供的摄像头和传感器外壳文件并没有为传感器预留螺丝孔(因为传感器的形状和尺寸各不相同)。如果你需要螺丝孔请自行修改这些文件。
第5步:故障排除
如果口罩检测不能正常工作,该怎么办?
口罩检测模型是在非常有限的照明条件和有限的口罩颜色下用合成数据训练的。如果模型不能很好地满足您的使用条件,可能需要按照下面给出的步骤重新培训模型。
注意: 这可能是棘手的,如果你在任何一个步骤卡住随时与我联系!
1.使用命令在树莓派上拍摄一些戴口罩和不戴口罩的照片
raspistill -o image-name.jpg
每次拍照时更改图像名称。
2.到这里[9]的Google Collab笔记本并复制它。在运行时=>更改运行时类型中将运行时类型更改为GPU。
3.然后在笔记本上运行前4个单元格。这将创建两个文件夹:戴口罩和不戴口罩。将您拍摄的图像分别添加到这些文件夹并运行所有其他单元格。
4.运行之后将创建一个新的模型文件mask_detector.h5。下载这个模型并用它替换树莓派上covid=>models中的旧模型。
如果体温检测不能正常工作,该怎么办?
体温检测需要适当的照明。确保有适当的照明,同时舵机工作良好。
在此,向Adrian Rosebrock致敬,感谢他那令人惊叹的有关计算机视觉的博客。
第6步:进一步改进的空间
目前,我正在使用BalenaOS开发本项目的BalenaFin的版本。它允许各种规模的企业轻松地进行大规模部署。不幸的是,我没有足够的时间在截止日期前完成它,但我会尽快发布它。在那个版本中,我在BalenaOS上使用了2个docker容器,一个带有Balena Dash的Web图形用户界面,另一个用于所有计算。
定制零件和外壳
-
树莓派外壳和专为微雪3.5英寸树莓派LCD定制的可调支架[10]
-
摄像头和传感器外壳下载地址[11]
电路图
所有连接都可以根据电路图进行。
摄像头必须连接到摄像头连接器,树莓派显示器可以连接到显示连接器。
如果使用通用3.5英寸触摸屏,可以将屏幕连接到所需的GPIO引脚。
连接到舵机的GPIO接口仍然是悬空的,但您需要动手焊接才能获得传感器的5V电压,传感器的SDA和SCL引脚也需要焊接。
Fritzing文件已打包,公众号后台回复“TouchFree”下载。
源代码
可自行到作者的GitHub代码仓库下载最新版本,也可回复“TouchFree”下载。
▼ 视频展示
DF星球译员计划
硬件军火库
点击了解详情👆
大家有什么想法,或是对文章的指正,都欢迎在下方留言!
欢迎大家点击阅读原文,与项目作者一起讨论!
文件链接失效也可以点击阅读原文到论坛获取!
往期回顾
拔掉MacBookPro,用8GB树莓派4工作一天,体验如何?
点击阅读👆
参考资料
疾控中心: https://www.cdc.gov/coronavirus/2019-ncov/hcp/clinical-guidance-management-patients.html
[2]Github上的指南: https://github.com/saksham2001/TouchFree-v2/blob/master/README.md#setup-for-pc-windowsmaclinux
[3]Balena Etcher下载页面: https://www.balena.io/etcher/
[4]Balena的Raspbian镜像文件: https://github.com/balena-os/pi-gen/releases
[5]树莓派镜像工具: https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2
[6]设置官方树莓派触摸屏: https://www.raspberrypi.org/documentation/hardware/display/
[7]设置树莓派摄像头: https://www.elecrow.com/wiki/index.php?title=3.5_Inch_480x320_TFT_Display_with_Touch_Screen_for_Raspberry_Pi
[8]设置树莓派摄像头: https://projects.raspberrypi.org/en/projects/getting-started-with-picamera
[9]Google Collab: https://colab.research.google.com/drive/1f6v8E_D84Cv56J8P6OvSlTbVkZmH9O8S?usp=sharing
[10]外壳和支架: https://www.thingiverse.com/thing:3473751
[11]摄像头和传感器外壳: https://hacksterio.s3.amazonaws.com/uploads/attachments/1142340/cam-sensor-enclosure_HBdHpTkilm.stl


