fibx 发表于 2020-7-27 10:34:14

无接触自动体温和口罩检测终端

# 无接触自动体温和口罩检测终端

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


## 所需材料和工具
1.**硬件模块**
- x1 树莓派3代B
全系列树莓派(1、2、3、4代)都可以。较新的树莓派4代性能是最好的,因为增加了内存。
- x1 树莓派摄像头模块
V1和V2都能正常工作。也可以使用其它通用网络摄像头。
- x1 无接触红外温度传感器模块(MLX90614)
- x1 树莓派触摸屏
(可选)
- x1 相机云台
- x2 SG90微型舵机
- x1 MicroSD卡
任何16GB卡都可以工作
- x1 树莓派电源
2. **软件应用程序和在线服务**
- 树莓派操作系统
- TensorFlow
- OpenCV
- DLIB面部定位库
3. **必备工具**
- 3D打印机(通用)
(可选)
- 优质母/公杜邦线40 x 6" (150mm)

## 制作过程
https://v.youku.com/v_show/id_XNDc2NTcwODgwNA==.html

随着世界各国重新开启,与新型冠状病毒一起生活正在成为新的生活方式。但是,为了阻止病毒的传播,我们需要把感染冠状病毒的人进行隔离。

根据疾控中心的说法,发烧是感染冠状病毒的主要症状,高达(https://www.cdc.gov/coronavirus/2019-ncov/hcp/clinical-guidance-management-patients.html)带症状的患者有发烧的迹象。许多国家/地区强制要求学校、大学、办公室和其他工作场所进行体温检测和戴口罩。

目前,体温检测是用无接触式温度计手动完成的。手动检查效率低下、不切实际(在人流量大的地方),而且风险很大。

为了解决这些问题,我设计了一个**终端**,通过**使用面部定位技术和无接触式红外温度传感器实现体温检测过程自动化,并利用深度学习神经网络进行口罩检测。**

这种终端的使用不局限于学校、大学、办公室和其他工作场所,还可以用于医院等高风险区域。该装置也可用于火车站、公共汽车站、机场等。

我用于这个项目中的方法是建立一个简单的安装设置过程,以便任何没有计算机视觉或深度学习经验的人都可以使用它。**这是一个功能齐全、随时可用的项目。**我已经使这个项目可通过为每一个独立的部分或完整的版本添加代码文件进行高度定制。因此,可以单独使用本项目的任何部分。

得益于Amazon AWS的成果,我能够使用AWS EC2实例的高性能计算能力训练用于口罩检测的深度学习模型。

### 第0步:工作原理

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


一旦系统检测到口罩,它会要求用户摘下口罩,以便进行面部定位。该系统使用DLIB模块进行面部定位,以找到人体额头上的最佳测温点。


接着,利用舵机的PID控制系统,将额头上选定的点对准温度传感器。对准后,系统使用无接触式红外温度传感器读取温度读数。




如果温度在正常人体体温范围内,则允许这个人通行,并向管理员发送一封带有图片和其他细节(如体温等)的电子邮件。


### 第1步:软件安装
#### 安装树莓派系统

1. 从树莓派[下载页面](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/2)下载适用于您的操作系统的树莓派镜像工具。
2. 将SD卡连接到计算机,选择最新版本的树莓派操作系统,然后单击**“写入”**将操作系统烧写到您的SD卡上。
3. 将SD卡插入树莓派,连接显示器,然后接通电源。等待几分钟,直到树莓派启动。
4. 通过单击屏幕右上角的WIFI图标并输入你的WIFI密码。

#### 设置树莓派触摸屏
**注意:**我用的是普通的3.5英寸触摸屏。你可以使用其它型号,但是强烈推荐使用官方树莓派触摸屏。如果你选择使用3.5英寸的触摸屏,你将需要动手焊接一些引脚。

参考[官方教程](https://www.raspberrypi.org/documentation/hardware/display/)设置官方树莓派触摸屏。
参考[这个教程](https://www.elecrow.com/wiki/index.php?title=3.5_Inch_480x320_TFT_Display_with_Touch_Screen_for_Raspberry_Pi)设置普通3.5英寸触摸屏。

#### 安装树莓派摄像头


参考[官方教程](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera)设置树莓派摄像头V1/V2。

#### 安装软件包和库
在终端中逐个执行以下命令来安装各种软件包和库。


##### 更新系统,为安装做好准备
更新树莓派操作系统
```bash
$ sudo apt-get update
$ sudo apt-get upgrade
```
更新pip3
```bash
$ pip3 install --upgrade pip3
```
扩展交换文件大小和更改内存拆分
**注意:**这些变更需要在所有安装完成后再改回来。
```bash
$ sudo nano /etc/dphys-swapfile
```
这将在新窗口打开一个文件。找到**CONF\_SWAPSIZE=100**并将其更改为**CONF_SWAPSIZE=1024**。然后依次单击Ctr+O、回车和Ctr+X保存更改并关闭文件。

接着运行以下命令使更改生效。
```bash
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
```
然后运行
```bash
$ sudo raspi-config
```
并导航到高级选项 => 内存拆分, 把128更改为16 (128 => 16)。

然后重新启动树莓派。

##### 安装必备包
```bash
$ 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的重要依赖项
```bash
$ 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
```bash
$ sudo apt-get install python3-opencv
```

##### 安装TensorFlow
**注意:**该模型是在Tensorflow-2.2上训练的,如果您使用其它版本的TensorFlow,可能会导致一些问题。
```bash
$ 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
```
确认安装正确
```bash
$ python3
>>> import tensorflow
>>> tensorflow.__version__
2.2.0
>>> exit()
```
如果您在这一步没有收到任何错误,则表示已经成功地安装TensorFlow。

##### 安装DLIB
```bash
$ pip3 install dlib
```
检查安装情况
```bash
$ python3
>>> import dlib
>>> exit()
```
如果在这一步没有收到任何错误,则表示已成功安装DLIB。

##### 改回交换文件大小和更改内存拆分
```bash
$ sudo nano /etc/dphys-swapfile
```
这将在新窗口打开一个文件。找到**CONF\_SWAPSIZE=1024**,然后更改为**CONF_SWAPSIZE=100**。然后依次单击Ctr+O、回车和Ctr+X保存更改并关闭文件。

接着运行以下命令使更改生效。
```bash
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
```
然后运行
```bash
$ sudo raspi-config
```
并导航到高级选项 => 内存拆分, 把16更改为128 (16 => 128)。

然后重新启动树莓派。

##### 从GitHub下载源代码
```bash
$ mkdir covid
$ cd covid
$ git clone https://github.com/saksham2001/Covid-Project
```
##### 设置环境变量
```bash
$ sudo nano /etc/profile
```
这将打开一个文件,如果你想收到电子邮件提醒,在文件的末尾添加以下几行
```bash
export SEND_EMAIL="TRUE"
export EMAIL_ID="your-email-id@something.com"
```
用您的电子邮箱地址替换“your-email-id@something.com"
```bash
export EMAIL_PWD="your-email-password"
```
用您的电子邮箱密码替换“your-email-password”
```bash
export COUNTER_ID=0
```
##### 设置邮箱
要使用电子邮件提醒服务,您需要一个Gmail帐户,并且您需要[允许不太安全的APP](https://myaccount.google.com/lesssecureapps?pli=1)。或者,如果使用两阶段身份验证,则可能需要创建(https://support.google.com/accounts/answer/185833?p=InvalidSecondFactor&visit_id=637279170445686838-561511154&rd=1)。

### 第2步:安装硬件


##### 电路接线

如电路图所示,连接舵机X和舵机Y。按照电路图接好所有的连接线。摄像头必须连接到摄像头接口,树莓派显示器可以连接到显示器接口。如果您使用的是普通的3.5英寸触摸屏,则可以将屏幕连接到所需的GPIO接口。连接到舵机的GPIO仍然是悬空的,你需要焊接以获得传感器的5v电压,传感器的SDA、SCL引脚也需要焊接。

**注意:**舵机X是控制左右移动的。舵机Y是控制上下移动的。

##### 设置温度传感器
温度传感器连接好后,运行以下命令
```bash
$ sudo su -c 'echo "Y" > /sys/module/i2c_bcm2708/parameters/combined'
$ sudo i2cdetect -y 1
   0123456789abcdef
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
```
复制端口名称(本例中为5a)
```bash
$ cd ~/covid
$ nano app.py
```
然后,找到下面这行代码,并更改5A
```python
sensor = MLX90614(bus, address=0x5A)
```
打开源代码文件
```bash
$ cd ~/covid
$ nano temp_checker.py
```
重复一次,找到下面这行代码,并更改5A
```python
sensor = MLX90614(bus, address=0x5A)
```
### 第3步:验证
```bash
$ cd ~
$ cd covid
```
运行完整的应用程序
```bash
$ python3 app.py
```
运行不带摇动和倾斜模块的应用程序
```bash
$ python3 no_pan.py
```
只运行体温检查代码
```bash
$ python3 temp_check.py
```
只运行口罩检测代码
```bash
$ python3 mask_detection.py
```
只运行电子邮件发送代码
```bash
$ python3 email_sender.py
```

### 第4步:3D打印树莓派外壳和摄像头与传感器外壳

你可以用下面提供的文件3D打印外壳,或者可以用纸板、木头等制作你自己的临时外壳。


我3D打印的是由(https://www.thingiverse.com/srwilson58/about)为我的3.5英寸触摸屏设计的[外壳](https://www.thingiverse.com/thing:3473751)。


如果您使用的是官方树莓派显示器,请尝试在(https://www.thingiverse.com/)网站上查找外壳。我很喜欢[这款](https://www.thingiverse.com/thing:1585924),但还没用过。


至于摄像头和传感器外壳,我自己定制了一个,为的是使摄像头和传感器可以对齐。如果你想要修改外壳,可能需要更改代码中的对齐点。

**注意:**这些外壳是针对树莓派2代/3代设计的,不适用于树莓派4代。对于树莓派4代,你需要找到一个不同的外壳。以下附件所提供的摄像头和传感器外壳文件并没有为传感器预留螺丝孔(因为传感器的形状和尺寸各不相同)。如果你需要螺丝孔请自行修改这些文件。



### 第5步:故障排除
**如果口罩检测不能正常工作,该怎么办?**
口罩检测模型是在非常有限的照明条件和有限的口罩颜色下用合成数据训练的。如果模型不能很好地满足您的使用条件,可能需要按照下面给出的步骤重新培训模型。

**注意:**这可能是棘手的,如果你在任何一个步骤卡住随时与我联系!

1 使用命令在树莓派上拍摄一些**戴口罩**和**不戴口罩**的照片
```bash
$ raspistill -o image-name.jpg
```
> 每次拍照时更改图像名称。

2 到[这里](https://colab.research.google.com/drive/1f6v8E_D84Cv56J8P6OvSlTbVkZmH9O8S?usp=sharing)的Google Collab笔记本并复制它。在`运行时=>更改运行时类型`中将运行时类型更改为GPU。

3 然后在笔记本上运行前4个单元格。这将创建两个文件夹:**戴口罩**和**不戴口罩**。将您拍摄的图像分别添加到这些文件夹并运行所有其他单元格。

4 运行之后将创建一个新的模型文件**mask_detector.h5**。下载这个模型并用它替换树莓派上covid=>models中的旧模型。

**如果体温检测不能正常工作,该怎么办?**
体温检测需要适当的照明。确保有适当的照明,同时舵机工作良好。

在此,向(https://www.pyimagesearch.com/)致敬,感谢他那令人惊叹的计算机视觉博客。

## 定制零件和外壳

- [树莓派和触摸屏(3.5英寸)外壳](https://www.thingiverse.com/thing:3473751)
由Thingiverse用户Stephen Wilson制作
- 摄像头和传感器外壳[下载地址](https://hacksterio.s3.amazonaws.com/uploads/attachments/1142340/cam-sensor-enclosure_HBdHpTkilm.stl)

## 电路图
- 电路图 [下载地址](https://hacksterio.s3.amazonaws.com/uploads/attachments/1142099/covid_fdeVCRAy31.png)
所有连接都可以根据电路图进行。摄像头必须连接到摄像头连接器,树莓派显示器可以连接到显示连接器。如果使用通用 3.5 英寸触摸屏,可以将屏幕连接到所需的 GPIO引脚。连接到舵机的GPIO接口仍然是悬空的, 但您需要动手焊接才能获得传感器的5V电压, 传感器的SDA和SCL引脚也需要焊接。


- Fritzing文件 [下载地址](https://hacksterio.s3.amazonaws.com/uploads/attachments/1142095/covid_ICrP5DzZxt.fzz)

## 完整代码
直接下载:(https://github.com/saksham2001/Covid-Project/archive/master.zip)
或前往作者(https://github.com/saksham2001/Covid-Project)下载最新版本

> 英文链接:(https://www.hackster.io/sakshambhutani2001/touchfree-automated-temperature-checkup-and-mask-detection-2cc337)
> 英文作者:(https://www.hackster.io/sakshambhutani2001) \[(https://www.youtube.com/channel/UCBWugHDgcR6kB33AzAKyC2A), (https://github.com/saksham2001)\]
> 中文翻译:(https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=profile)

gray6666 发表于 2020-7-29 12:19:31

树莓派未来大有可为{:7_216:}

pATAq 发表于 2020-7-29 22:35:40

感谢分享

pATAq 发表于 2020-7-29 22:43:37

都是自己翻译的吗,厉害{:7_219:}

fibx 发表于 2020-7-30 12:45:06

pATAq 发表于 2020-7-29 22:43
都是自己翻译的吗,厉害

谢谢鼓励!是自己翻译的。

gray6666 发表于 2020-7-30 17:06:03

准备攒钱买个大屏幕

20060606 发表于 2020-7-30 18:12:22

自己翻译的?

DFS1w2cb8o8 发表于 2020-7-31 16:52:25

厉害厉害

佛系唐法官 发表于 2020-8-4 18:06:35

啊这。。。优秀啊

DFBJZIHin6P 发表于 2021-1-1 21:42:28

fibx 发表于 2020-7-27 10:34
# 无接触自动体温和口罩检测终端

## 概述


你好,这个舵机是用来控制摄像头还是显示屏?

粼丹洋云 发表于 2021-2-22 19:38:55

DFBJZIHin6P 发表于 2021-1-1 21:42
你好,这个舵机是用来控制摄像头还是显示屏?

是用来控制舵机的,显示屏是一个独立的部件
页: [1]
查看完整版本: 无接触自动体温和口罩检测终端