当前位置: 首页 > news >正文

毕设成品 stm32与深度学习口罩佩戴检测系统(源码+硬件+论文)

文章目录

  • 0 前言
  • 1 主要功能
  • 2 硬件设计(原理图)
  • 3 核心软件设计
  • 4 实现效果
  • 5 最后

0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩毕业设计 stm32与深度学习口罩佩戴检测系统(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:5分

🧿项目分享:见文末!

1 主要功能

系统框架,下位机系统分为主控模块、通信模块、显示模块、报警模块四个部分组成,其运行流程为:首先主控模块通过通信模块接收上位机发送的识别结果数据,读取当前状态数据,当检测结果通过显示模块实时的显示在屏幕上,用于直观展示,若发现当前状态为未佩戴口罩,驱动报警程序控制蜂鸣器进行报警。

2 硬件设计(原理图)

口罩检测门禁系统的主要以PC和STM32为主控核心,首先是由PC端连接WiFi热点然后上位机的主控程序打开PC端摄像头实行实时检测再通过其WiFi模块将实时检测结果传输到我们的STM32模块中进行处理,将检测结果通过OLED进行显示,最终通过蜂鸣器发出警报。

硬件选择

  • STM32F103RCT6开发板 * 1
  • 蜂鸣器模块 * 1
  • Wifi - ESP01S * 1
  • 1.44寸液晶屏(SPI接口) * 1
  • 杜邦线若干

3 核心软件设计

系统软件流程如图所示,上位机的状态信息可以通过TCP通信实时传输给下位机控制器,进而下位机根据所接收到的数据进行其它显示报警操作。

(1)上位机软件设计:上位机软件主要负责将口罩识别的结果通过TCP通信传输给下位机,本课题上位机作为TCP客户端。首先上位机进行网络通信的初始化,包括设置IP地址与端口,创建socket对象,建立socket连接,之后上位机按钮通过AJAX方式向后端发起请求,后端调用TCP客户端向ESP8266发送消息。当成功建立局域网之间的通信时,上位机可显示连接成功的状态。
(2)下位机系统的软件程序设计包括系统的初始化程序及其各功能模块的子程序。其中初始化程序包括LCD显示屏配置的初始化、ESP8266通信模块的初始化程序。

蜂鸣器检测报警程序:若系统状态检测到未佩戴口罩,单片机进入报警程序控制相应的引脚输出高电平,进而控制蜂鸣器发出报警声音

ESP8266模块程序:首先进入通信初始化程序,启动STA模式,连接WIFI,并通过AT指令将ESP8266配置为服务端,与ESP8266通过串口连接的STM32控制器进入串口中断回调函数接收上位机发送过来的数据。

深度学习口罩佩戴检测

数据集的准备:

数据集是从网络上爬取的图片,总的包含了8535张图片(其中部分图片没有使用到),其中包含:
戴口罩的数据图(with_mask):2978个;
未戴口罩的数据图(without_mask):2995个;
带了口罩但是姿势不正确的数据图(mask_weared_incorrect):2994个。
所有图片均是由人脸识别模式切割出,每个图都只包含小部分图像,这也使得训练的准确性有极大的提高,有的图片还进行了旋转操作实现数据增强。下图12是我截图的部分数据集(包含了正确佩戴口罩、未佩戴口罩和未正确佩戴口罩三部分的数据图片)。

数据集训练

在准备好数据图集之后自然是需要进行训练了,对于每一张图片画出区域打赏本文使用了一款开源的标注工具labeling,非常的简便、高效的。运行指定的数据集文件夹实现标注,人工标注图片集,将整张脸作为目标框标注出它的位置,如图13,然后将相应的数据写入到相应的数据标签。

当完成数据集标注后,每张图片所对应的标签文件会自动保存到指定的文件夹,如图14,其中每一行开头的数字0和1代表着待检测的目标类别“with_mask”与“without_mask”,即已佩戴口罩或未佩戴。每行后续四个数字是该目标样本在本张图片中的位置坐标。

训练过程

按照目标要求更改训练数据、神经网络模型路径、训练轮数、batchsize的大小和GPU处理的数量以及其他的一些参数,然后模型训练代码就可以正式运行了。尽管本次制作的目标检测的数据集是由8535张训练集、验证集图片组成,模型的损失函数值还是很快地收敛开始无限接近于0,在训练执行到第35轮时模型准确率接近于90%。

展示模型在训练过程中的准确率(Precision)与召回率(Recall)数值的变化。

使用下图这两个函数绘制训练的loss(图1)和accuracy(图2)曲线,可以看到,整个训练过程的收敛性是非常好的,最后在验证集的准确率也稳定到了97%左右。

篇幅有限,不过多复述详细设计细节,详细的设计分享在论文中。。。

stm32采集部分代码

voidSMBus_StartBit(void){SMBUS_SDA_H();// Set SDA lineSMBus_Delay(5);// Wait a few microsecondsSMBUS_SCK_H();// Set SCL lineSMBus_Delay(5);// Generate bus free time between StopSMBUS_SDA_L();// Clear SDA lineSMBus_Delay(5);// Hold time after (Repeated) Start// Condition. After this period, the first clock is generated.//(Thd:sta=4.0us min)SMBUS_SCK_L();// Clear SCL lineSMBus_Delay(5);// Wait a few microseconds}voidSMBus_StopBit(void){SMBUS_SCK_L();// Clear SCL lineSMBus_Delay(5);// Wait a few microsecondsSMBUS_SDA_L();// Clear SDA lineSMBus_Delay(5);// Wait a few microsecondsSMBUS_SCK_H();// Set SCL lineSMBus_Delay(5);// Stop condition setup time(Tsu:sto=4.0us min)SMBUS_SDA_H();// Set SDA line}u8SMBus_SendByte(u8 Tx_buffer){u8 Bit_counter;u8 Ack_bit;u8 bit_out;for(Bit_counter=8;Bit_counter;Bit_counter--){if(Tx_buffer&0x80){bit_out=1;// If the current bit of Tx_buffer is 1 set bit_out}else{bit_out=0;// else clear bit_out}SMBus_SendBit(bit_out);// Send the current bit on SDATx_buffer<<=1;// Get next bit for checking}Ack_bit=SMBus_ReceiveBit();// Get acknowledgment bitreturnAck_bit;}voidSMBus_SendBit(u8 bit_out){if(bit_out==0){SMBUS_SDA_L();}else{SMBUS_SDA_H();}SMBus_Delay(2);// Tsu:dat = 250ns minimumSMBUS_SCK_H();// Set SCL lineSMBus_Delay(6);// High Level of Clock PulseSMBUS_SCK_L();// Clear SCL lineSMBus_Delay(3);// Low Level of Clock Pulse// SMBUS_SDA_H(); // Master release SDA line ,return;}u8SMBus_ReceiveBit(void){u8 Ack_bit;SMBUS_SDA_H();//引脚靠外部电阻上拉,当作输入SMBus_Delay(2);// High Level of Clock PulseSMBUS_SCK_H();// Set SCL lineSMBus_Delay(5);// High Level of Clock Pulseif(SMBUS_SDA_PIN()){Ack_bit=1;}else{Ack_bit=0;}SMBUS_SCK_L();// Clear SCL lineSMBus_Delay(3);// Low Level of Clock PulsereturnAck_bit;}u8SMBus_ReceiveByte(u8 ack_nack){u8 RX_buffer;u8 Bit_Counter;for(Bit_Counter=8;Bit_Counter;Bit_Counter--){if(SMBus_ReceiveBit())// Get a bit from the SDA line{RX_buffer<<=1;// If the bit is HIGH save 1 in RX_bufferRX_buffer|=0x01;}else{RX_buffer<<=1;// If the bit is LOW save 0 in RX_bufferRX_buffer&=0xfe;}}SMBus_SendBit(ack_nack);// Sends acknowledgment bitreturnRX_buffer;}

4 实现效果

演示视频

毕业设计 stm32与深度学习口罩佩戴检测系统 - 单片机 嵌入式 物联网

5 最后

包含内容

包含详细设计论文

🧿项目分享:见文末!

http://www.jsqmd.com/news/222387/

相关文章:

  • 盲人丈夫为55岁妻子报琴课,红松小课传递暖心爱意
  • 一文说清Elasticsearch中的分页与深度分页问题
  • 大数据BI工具排行榜:2023年最受欢迎的10款工具盘点
  • 琴声润晚年!红松小课见证盲人夫妻的幸福答卷
  • 提示系统代码覆盖率分析瓶颈:架构师的6个突破策略
  • 动圈 vs 动铁耳机频率响应差异:深度剖析结构影响
  • 基于Java+SpringBoot+SSM传统文化交流交易平台(源码+LW+调试文档+讲解等)/传统文化传播平台/文化交流平台/文化交易平台/传统文化活动平台/传统文化展示平台/文化交流交易网站
  • 伊顿变压器启用明诺V75驾驶式洗地机,赋能智慧工厂清洁升级
  • PCB铺铜初学指南:掌握地平面设计要点
  • 漏电探测仪:发现绝缘老化、线路破损等隐患
  • 一文说清USB-Serial Controller D驱动下载常见问题
  • 新手必看:工业电子项目前的Vivado安全卸载方法
  • 工业电机驱动器中I2C配置接口的操作指南
  • SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • HID设备操作指南:报告描述符编写技巧与验证方法
  • 前端向架构突围系列 - 框架设计(三):用开闭原则拯救你的组件库
  • WebM转MP4在线转换工具
  • SSM校园人才市场391d8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 图解说明RS232串口调试工具在自动化产线中的连接方式
  • 2026“芯片战局”白热化,AMD/微美全息加固“护城河”竞逐AI算力制高点
  • HBuilderX运行项目不启动浏览器?一文说清常见故障点
  • 2026年软考高项报名全攻略,一文读懂!
  • 申请发布Profile
  • 轻松将 iPhone 中的短信导出为 PDF
  • es客户端基础概念全面讲解:索引与文档操作指南
  • 快速理解Intel平台下USB3.0传输速度不达标原因
  • 手把手教程:编写基础Virtual Serial Port Driver
  • 如何轻松地将文件从 PC 传输到 iPhone
  • 图解说明LVGL在工业控制器上的移植流程
  • 大数据领域数据架构的分布式存储设计