Coder Social home page Coder Social logo

lightyli / face-mask-detction-deeplearning Goto Github PK

View Code? Open in Web Editor NEW
13.0 1.0 1.0 130.21 MB

基于深度学习的人脸口罩识别检测系统,可以识别三种情况分别是:正确佩戴口罩、未正确佩戴口罩、未佩戴口罩。并且可以测温和控制闸机的开闭

License: Apache License 2.0

Python 9.43% HTML 90.57%

face-mask-detction-deeplearning's Introduction

项目介绍

​ 人脸口罩佩戴识别监测系统是一款集口罩识别、体温检测、语音播报和门闸开合于一体的智能识别反馈系统,它利用yolov2神经网络训练生成的模型进行人脸识别,具有较高的准确性、较低的时延等特性。

​ 该设备能够针对口罩佩戴情况进行不同的内容反馈,并且语音提示,如果符合通过条件,可以控制闸机进行人员分流,非常适合当前后疫情时代的公共场所的疫情防控需求。

演示视频

演示视频

系统框图

1. 系统框图

系统框图

注: 系统框图与最终实现有所差别

数据集及标注

1. 数据集获取

训练的数据集是来自互联网的公开数据集,链接如下:

https://github.com/cabani/MaskedFace-Net,里面有正确佩戴口罩和不正确佩戴口罩的数据集,各有20Gb左右。

https://github.com/balajisrinivas/Face-Mask-Detection/tree/master/dataset,里面有未佩戴口罩的数据集

我们用到的K210开发板在运行图像识别的时候,模型只能输入224*224大小的图片,所以需要先将数据集大小调整为224*224.

2. 标注

用到的标注软件为 labelImg,下载链接为:https://wwt.lanzoul.com/iAXAG05bnjxc,

或其他标注软件也可以,需要把标注结果导出为xml格式

3. 标注好的数据集

下载链接如下,

pics: https://www.aliyundrive.com/s/cRFP1YaU9WM

labels: https://www.aliyundrive.com/s/uMY9xoWPovu

pics文件夹里存放图片,分为三类:with_correct_mask/with_incorrect_mask/without_mask

labels文件夹中存放标签,为xml格式

注: 用开发板的摄像头拍摄多张照片多为数据集的一部分可以提高模型的识别精度

训练过程及模型转换

由于K210开发板只支持YOLOV2和V3,我们采用YOLOV2框架来进行训练

环境配置及训练方法见链接:

Mx-yolov3+Maixpy+ K210进行本地模型训练和目标检测_我与nano的博客-CSDN博客_k210芯片

[人工智能]更新:Mx-yolov3 3.0版本 (qq.com)

K210开发板只能运行kmodel格式的模型文件,所以需要将训练好的tilite、pt、h5等格式的模型转换成kmodel格式的模型。我们采用的是NCC工具箱,上面的链接中有提到。

硬件模块介绍

用到的开发板是K210开发板,详细介绍见稚晖君在知乎上的这篇文章:https://zhuanlan.zhihu.com/p/81969854 介绍的很详细

总体控制代码

总体控制代码见: 主要控制代码/summary.py

其中还有一个py文件叫 mlx90614,是红外测温模块的底层代码,需要复制到sd卡根目录,或者用maxpyide发送到开发板上 其中模型文件、音频文件和各种提示图片需要自己准备。将各种文件存到SD卡中,插在K210开发板上即可运行

创新之处和遇到问题的解决

1. 研发过程中遇到的问题

1)测温模块在程序运行中一直返回温度值,是测得的环境温度

解决办法:经过分析后可得在程序的循环中,测温模块一直在测量温度。将控制程序改为只有在识别到正确佩戴口罩后才会测量温度。设定[34.5 37.9]的温度区间,低于最低值是认为测得的是环境温度,测温失败;高于该区间的最大值后认为体温异常,播放声音提醒。并且在5秒内没有测得大于温度区间最小值的温度后,视为放弃测温,程序进入下一次循环。

2) 口罩识别模型会对摄像头采集的每一帧图像进行识别,如果对模型输出的每一个预测结果做出反应的话,会造成系统过于混乱

解决办法:我们在发现这个问题后,认为模型对摄像头采集的每一帧进行预测并作出后续反应的话,会造成系统混乱,因为模型有小概率会识别不稳定。经过几天的仔细思考,发现可以利用模型识别的累积效果,引入状态列表和状态和变量,将模型识别10的结果存入状态列表中,并在状态列表长度为10时计算状态和。模型识别结果0为without_mask, 1为with_correct_mask, 2为with_incorrect_mask. 若状态和小于3,则认为这10次中多数都是without_mask,识别为正确佩戴口罩;若状态和在7到13之间,则认为10次中多数都是with_correct_mask,识别为正确佩戴口罩;若状态和大于17,则认为10次中多数是with_incorrect_mask,识别为口罩佩戴不正确。

​ 经过这样的累计效果后,系统可以正常工作,识别精度也有提升,但是正确佩戴口罩和口罩佩戴不正确会识别错误,分析原因是,由于模型预测结果2被认为是with_incorrect_mask,所以10次中有少数的with_incorrect_mask和多数的with_correct_mask也会被判定为口罩配得不正确。将模型预测结果1改为with_incoeerct_mask,2改为with_correct_mask后,这个问题有很大改善,识别精度进一步提高。

3) 由于K210开发板可用接口有限,在正常的插上测温模块后就不能插舵机模块了。

解决方法:比较容易的解决方案是再买一个pybase拓展板来接舵机,但是由于财力有限,不能支付得起拓展板的钱。在深入研究测温模块的排线结构后发现测温模块可以不用全部接在K210开发板上,只需4条线接入即可,这样给舵机模块留下了接口。可以把测温模块固定到其他地方,用几根杜邦线就把测温模块和舵机模块接到K210开发板上。

2. 测试阶段遇到的问题

1) 语音播报模块在播放完音频后会有一声比较短暂刺耳的爆音

解决方法: 在语音播报的测试程序中,播放完声音序列后加上100ms的短暂延时,使程序不要过快的结束掉,可以解决爆音问题

2) 模型对测试数据集预测效果不好,准确率较低

解决方法:经过排查,是测试程序中anchors值不对,anchors需要有训练时的数据集计算得到。在更改anchors值后,测试精度有了很大提高

不足待改进之处

1. 弱光条件下识别准备率有待提升

1) 原因

受摄像头硬件性能限制,在弱光条件下摄像头采集的图像较模糊,使模型不能正确判断口罩佩戴情况,造成识别正确率下降和延迟上升。

2) 建议改进措施
  • 更换拍摄质量更好、像素更高的摄像头

  • 在摄像头附近增加补光灯和光敏传感器,在光敏传感器检测到光照条件低于一定阈值后,在识别口罩的时候打开补光灯补光;在光照良好的情况下不开补光灯。

2. 远距离识别准确率不高

1) 原因

受摄像头设置所限,在距离较远时采集的图像模糊,使模型不能正确判断口罩佩戴情况,造成识别正确率下降和延迟上升。

2) 建议改进措施
  • 更换拍摄质量更好、像素更高的摄像头

3. 测温模块精度不高

1) 原因
  • 财力有限,并且目前K210只能支持这样的测温模块,导致测温模块质量不好,精度不高,目前为 +- 0.3℃
2) 建议改进措施
  • 有条件就更换精度更高的测温模块,
  • 或者自己根据K210的引脚接口设计一款测温模块

产品图

1. 内部结构

内部结构

2. 产品外观图

产品外观图

参考资料

face-mask-detction-deeplearning's People

Contributors

lightyli avatar

Stargazers

 avatar zxYang avatar  avatar  avatar jpf-hash avatar  avatar  avatar Simsul avatar XHSecurity avatar  avatar  avatar  avatar Tenom avatar

Watchers

 avatar

Forkers

936139567

face-mask-detction-deeplearning's Issues

请问需要使用stm32吗?

作者你好,请问这个项目需要用带stm32吗?
内部图片后面那块底板是什么呢?纯新人🙃

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.