news 2026/3/1 0:57:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕设成品 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 最后

包含内容

包含详细设计论文

🧿项目分享:见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 21:06:37

思科:速修复已出现 exp 的身份服务引擎漏洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士思科修复了位于身份服务引擎 (ISE) 网络访问控制解决方案中的一个漏洞CVE-2026-20029。目前已出现该漏洞的公开利用代码&#xff0c;可被攻击者以管理员权限利用。企业管理员在执行零信任架构…

作者头像 李华
网站建设 2026/2/27 19:29:19

【Godot】【2D】TileMap 快速上手:自动拼接/碰撞/导航(含最小可用示例)

15 分钟搭出可行的 2D 关卡:导入素材、生成 TileSet、自动拼接地形、添加碰撞与导航,并给出常见坑的排查方法。附最小项目参数可直接照抄。(精力有限,配套增值案例制作中,完成后上传。) 为什么先学 TileMap 关卡绘制效率高:拖格子即可铺地形、平台、装饰。 自动碰撞与导航…

作者头像 李华
网站建设 2026/2/28 17:18:41

快速理解Intel平台下USB3.0传输速度不达标原因

为什么你的USB3.0跑不满5Gbps&#xff1f;深度剖析Intel平台下的真实瓶颈 你有没有遇到过这种情况&#xff1a;买了一块标称读写速度500MB/s的USB3.0固态U盘&#xff0c;插在电脑上复制大文件时&#xff0c;任务管理器里却只显示180MB/s&#xff1f;甚至更低&#xff1f; 别急…

作者头像 李华
网站建设 2026/2/28 11:22:43

PCB铺铜初学指南:掌握地平面设计要点

PCB铺铜实战心法&#xff1a;从地平面设计到信号完整性的底层逻辑你有没有遇到过这样的情况&#xff1f;电路原理图明明没问题&#xff0c;元器件选型也经过反复验证&#xff0c;可板子一上电就干扰严重&#xff0c;ADC采样数据跳得像心电图&#xff0c;高速通信动不动就丢包。…

作者头像 李华
网站建设 2026/2/24 1:41:37

SEO+SEM整合营销实战案例:某B2B企业如何实现流量翻倍

在竞争激烈的B2B市场&#xff0c;如何通过SEOSEM整合营销实现流量翻倍&#xff1f;本文以某企业实战案例&#xff0c;揭秘如何运用Google Ads精准投放、Facebook广告与LinkedIn营销协同&#xff0c;结合Google SEO优化与TikTok海外运营&#xff0c;打造高效获客矩阵。从策略制定…

作者头像 李华