人脸口罩监测系统

1 .1 设计背景及意义

受新冠疫情影响,公民外出时极易感染或传播新冠病毒,尤其是在公共场所,病毒的传播率更是大幅提高。为防止公民感染新冠病毒,降低病毒的传播率,因此规定,公民出入公共场所必须佩戴口罩。

虽然防疫形式严峻,但还是有很多人对于佩戴口罩这一规定不以为然,存有侥幸心理,出入公共场所仍然不按规定戴口罩。为提高公民防疫意识,检测公民在公共场所的口罩佩戴情况,设计出一套口罩检测系统就显得尤为重要。该系统可对出入公共场所的人流进行佩戴口罩的检索,并对未佩戴口罩的公民进行标记和提示,从而保障防疫工作有效落实。

2.1 设计原理

2. 1.1 人脸识别

人脸识别是计算机视觉中一个相对完整的模块,基本上所有学习计算机视觉的课程都会涉及到人脸识别这块的内容。在百度百科中是这么定义的:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。

简单来说,这就是图像识别的一个部分,利用图像差值等图像处理的方法,对具有特定特征的图像进行提取,然后再将这些特征信息保存好,在需要的时候,就可以调用该文件中保存好的训练特征,对目标图像进行匹配,从而找出在图像中我们所需要的特征。就比如在这个系统中的人脸识别。

2. 1.2 口罩识别

口罩识别的具体方法同人脸识别大抵相同。经过测试,OpenCV 中开源的文件去识别眼睛、额头等都识别的不算好,且如果用这个逻辑去写,会出现问题:识别精度不高,容易产生误判,精度问题。所以需要自己训练构造出一个人脸口罩识别xml 模型。具体实现原理为:用一个循环不断读取摄像机的每一帧图像,进行灰度处理,再进行口罩检测,最终在图像上标出是否佩戴口罩。

2. 1.3 数据预处理

首先收集一些佩戴了口罩的图片以及未戴口罩的人脸图片,把佩戴口罩的照片看作正样本,未戴口罩的图片看作负样本。将样本图片进行裁减处理,裁减出戴口罩的人脸。正样本:仅包含被检测物体的样本,并且距离边界尽量要小,图片尺寸大小一致。负样本:不包含被检测物体的样本,图片尺寸大小无要求。在裁减的时候进行灰度处理。

2. 1.4 训练模型

O pen CV 的训练算法是基于adaboost而来的,用o pen cv _createsamples .exe 创建样本和o pen cv _traincascade .exe 训练级联分类器。o pen cv _createsamples .exe 是用来准备训练用的正样本数据和测试数据。o pen cv _createsamples .exe 能够生成能被opencv _haartraining .exe 和o pen cv _traincascade .exe 程序支持的正样本数据。

2.2 设计方案

2.2.1 人脸检测 方案 对比 与选择

1) 使用OpenCV Haar 分类器检测人脸,如haarcascade_frontalface_alt.xml 不能适应光线暗的情况和人脸遮挡情况,佩戴了口罩无法检测到人脸,无法继续进行后面步骤。

2) 使用Dlib 检测人脸,例如使用shape_predictor_5_face_landmarks.da t 不能适应人脸遮挡情况,佩戴了口罩无法检测到人脸,无法继续进行后面步骤。

3) 使用OpenCV DNN 网络检测人脸,使o pen cv _face_detector_uint8.p b能适应部分人脸遮挡和侧脸情况,能继续进行后续检测。

由各方案特点可以看出,OpenCV DNN 网络最符合本次的设计需求,因此,

采用OpenCV DNN 网络进行主体设计。

2.2.2 利用 伽马变换 实现图像修正

伽马变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解,如图2.1所示。

1)gamma 值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分。

2)gamma 值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分。

人脸口罩监测系统

图2.1 伽马曲线

γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。

2.2.3 总体设计架构

在EAIDK310平台上配置Linux环境的同时,在Windows系统下进行人脸口罩检测模型的训练和程序的开发。开发结束及环境配置完善后,对程序和模型进行移植和优化,实现人脸口罩检测功能,最后结合EAIDK310平台对该系统进行移植,如图2.2所示。

人脸口罩监测系统

图2.2 总体架构图

2.2.4实现流程

启动摄像头后,对每一帧画面进行捕捉,并对图像进行预处理(包括灰度化,特征提取,边缘检测等)。处理之后的图像需要进行人脸识别,通过分类器实现对比和分类,若识别到戴口罩则显示”HAVE MASK”,若识别出未佩戴口罩则显示”NO MASK”并且蜂鸣器报警。

实现流程如图2.3所示。

人脸口罩监测系统

图2.3 实现流程图

3.1 实验环境搭建

软件环境:Python3.9 ,pycharm2021

硬件平台:EAIDK-310

3.2 识别过程

样本识别流程如图3.1所示。

人脸口罩监测系统

图3.1 样本识别流程图

3.3 数据集的处理

1)将数据集重命名为连续序列

因为数据集中的图片序列是不连续的,因此这里需要将数据集的正负样本重命名为连续序列,以便像素调整,如图3.2所示。

人脸口罩监测系统

图3.2 数据集重命名

2)创建正负样本数据集路径的txt 文件,将所有照片的命名统计到Excel 表格.

①创建正样本数据集txt 文件

用win+R 打开窗口输入cmd ,进入命令提示符界面,进入正样本文件夹中,如图3.3所示。

人脸口罩监测系统

图3.3 文件路径

输入命令创建路径文件,如图3.4所示。

人脸口罩监测系统

图3.4 创建正样本路径文件

将pos.txt 复制到imgZname.xlsx 里面, 就可以在Python 中读取文件路径。

②创建负样本数据集txt 文件(方法同正样本数据集),如图3.5所示。

人脸口罩监测系统

图3.5 创建负样本路径文件

3)正负样本数据集像素处理

正样本数据集的像素最佳设为20×20,这样的模型训练精度更高;负样本数据集像素不低于50×50,这样处理可以加快模型训练的速度。这里将正样本数据集的像素设置为20×20,负样本数据集像素设置为80×80 。

分别生成hava_mask.txt 和no_mask.txt文件,然后将have_mask.txt 和no_mask.txt 文件放到other 目录下。

4)对正负样本txt 文档进行预处理

正负样本需要生成.vec 格式的文档进行模型训练,因此需要通过对txt 文档进行预处理,向have_mask.txt 文件中末尾加入 1 0 0 20 20 ,向 no_mask.tx t 文件中末尾加入 1 0 0 80 80 。这个处理不会自动覆盖之前的文件内容,所以需要手动将之前的内容剪切出来 ,保存为have_mask1.txt 文件,have_mask.txt 文件中只保留末尾为1 0 0 20 20的内容,如图3.5所示。

人脸口罩监测系统

图3.5 正样本文档预处理

同理,对no_mask.txt 文件执行同样的操作手动将之前的内容剪切出来 ,保存为no_mask1.txt 文件,no_mask.txt 文件中只保留末尾为1 0 0 80 80的内容,如图3.6所示。

人脸口罩监测系统

图3.6 负样本文档预处理

3.4 训练模型

1)创建xml 文件夹存放训练好的模型,如图3.7所示。

人脸口罩监测系统

图3.7 创建xml 文件

2)将OpenCV 安装路径\opencv\build\x64\vc14\bin \opencv_createsamples.exe可执行文件和opencv_traincascade.exe可执行文件及另外两个下图文件复制到数据集同级目录,如图3.8、3.9 所示。

人脸口罩监测系统

人脸口罩监测系统

图3.9 放置文件

3)生成正样本havemask.vec文件和nomask.vec文件opencv _createsamples

.exe是用于创建样本描述文件,后缀名是.vec。专门为OpenCV训练准备,只有正样本需要,负样本不需要。opencv_traincascade.exe:是OpenCV自带的一个工具,封装了haar特征提取LBP和HOG特征分类器。

①生成正样本vec文件。opencv_traincascade.exe训练的时候需要输入的正负样本是vec文件,所以需要使用createsamples程序来将正负样本转换为vec文件。cmd进入other目录并执行以下命令,如图3.10所示。

人脸口罩监测系统

②生成负样本vec 文件,如图3.11所示。

人脸口罩监测系统

4)训练模型

在mask目录下创建txt文件,写入以下内容。opencv_traincascade.exe -data xml -vec havemask.vec -bg no_mask.txt -numPos 350 -numNeg 400 -numStages 20 -w 20 -h 20 -mode ALL pause

将创建的txt文件命名为traincascade.bat ,如图3.12。

人脸口罩监测系统

删除have_mask.txt和no_mask,txt,然后将have_mask1.txt和no_mask1.txt改为have_mask.txt和no_mask.txt 如图3.13 。

人脸口罩监测系统

打开traincascade.bat,开始训练人脸口罩数据集模型,如图3.14。

人脸口罩监测系统

图 3.14 数据集训练

4.1 硬件设备

外部摄像头、EAIDK-310平台、蜂鸣器。

硬件连接如4.1所示。

人脸口罩监测系统

图4.1 硬件连接图

4.2 环境搭建

1)用网线连接计算机和EAIDK-310的RJ45网络接口。

2)配置电脑环境,进入设置网络,进入高级网路设置的更改适配器选项,如图4.2所示。

人脸口罩监测系统

图4.2 配置网络

3)填写成下面网络地址,设置计算机有线网络IP为192.168.3.101网段。注意不能设定为192.168.3.100,因为EAIDK-310的IP 已先固定为192.168.3.100 ,如图4.3所示。

人脸口罩监测系统

图4.3 网址设置

4)打开VNC viewer 软件,在搜索框里输入192.168.3.100 .1 ,然后点击回车进入远程桌面,输入密码并进入系统。

切记这个时候EAIDK用网线和电脑以及连接了,而且EAIDK以及供电启动了,供电接口只能接电脑USB口,否则可能会烧坏主板。

5)更新pip

EAIDK的板子的源非常落后,是一个9.0.3的官网的源,导致下载速度非常慢,而且下载经常失败,所以我们要更新pip

输入:sudo -H pip3 install -U pip,更新pip3 如图4.4所示。

人脸口罩监测系统

图4.4 更新pip

4.3执行代码

人脸口罩监测系统

图4.5 复制项目

2 )启动终端,打开文件路径如图4.6所示。

人脸口罩监测系统

图4.6打开文件路径

3) 输入xhost +,解除限制,解除后可使用GPIO ,如图4.7所示。

人脸口罩监测系统

图4.7 解除限制

4 )输入:sudo python3 main.py 执行代码,如图4.8所示。

人脸口罩监测系统

图4.8执行代码

Original: https://blog.csdn.net/wdnmdkkkkk/article/details/127098412
Author: wdnmdkkkkk
Title: 人脸口罩监测系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/785618/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球