1.1 设计背景及意义
受新冠疫情影响,公民外出时极易感染或传播新冠病毒,尤其是在公共场所,病毒的传播率更是大幅提高。为防止公民感染新冠病毒,降低病毒的传播率,因此规定,公民出入公共场所必须佩戴口罩。
虽然防疫形式严峻,但还是有很多人对于佩戴口罩这一规定不以为然,存有侥幸心理,出入公共场所仍然不按规定戴口罩。为提高公民防疫意识,检测公民在公共场所的口罩佩戴情况,设计出一套口罩检测系统就显得尤为重要。该系统可对出入公共场所的人流进行佩戴口罩的检索,并对未佩戴口罩的公民进行标记和提示,从而保障防疫工作有效落实。
2.1 设计原理
2.1.1 人脸识别
人脸识别是计算机视觉中一个相对完整的模块,基本上所有学习计算机视觉的课程都会涉及到人脸识别这块的内容。在百度百科中是这么定义的:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
简单来说,这就是图像识别的一个部分,利用图像差值等图像处理的方法,对具有特定特征的图像进行提取,然后再将这些特征信息保存好,在需要的时候,就可以调用该文件中保存好的训练特征,对目标图像进行匹配,从而找出在图像中我们所需要的特征。就比如在这个系统中的人脸识别。
2.1.2 口罩识别
口罩识别的具体方法同人脸识别大抵相同。经过测试,OpenCV中开源的文件去识别眼睛、额头等都识别的不算好,且如果用这个逻辑去写,会出现问题:识别精度不高,容易产生误判,精度问题。所以需要自己训练构造出一个人脸口罩识别xml模型。具体实现原理为:用一个循环不断读取摄像机的每一帧图像,进行灰度处理,再进行口罩检测,最终在图像上标出是否佩戴口罩。
2.1.3 数据预处理
首先收集一些佩戴了口罩的图片以及未戴口罩的人脸图片,把佩戴口罩的照片看作正样本,未戴口罩的图片看作负样本。将样本图片进行裁减处理,裁减出戴口罩的人脸。正样本:仅包含被检测物体的样本,并且距离边界尽量要小,图片尺寸大小一致。负样本:不包含被检测物体的样本,图片尺寸大小无要求。在裁减的时候进行灰度处理。
2.1.4 训练模型
OpenCV的训练算法是基于adaboost而来的,用opencv_createsamples.exe创建样本和opencv_traincascade.exe训练级联分类器。opencv_createsamples.exe 是用来准备训练用的正样本数据和测试数据。opencv_createsamples.exe 能够生成能被opencv_haartraining.exe 和 opencv_traincascade.exe 程序支持的正样本数据。
2.2 设计方案
2.2.1 人脸检测方案对比与选择
1) 使用OpenCV Haar分类器检测人脸,如haarcascade_frontalface_alt.xml不能适应光线暗的情况和人脸遮挡情况,佩戴了口罩无法检测到人脸,无法继续进行后面步骤。
2) 使用Dlib检测人脸,例如使用shape_predictor_5_face_landmarks.dat不能适应人脸遮挡情况,佩戴了口罩无法检测到人脸,无法继续进行后面步骤。