news 2026/4/16 12:51:08

机器人工程毕设 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/4/16 10:46:56

网站图片获取方法-图搜接口item_search_img

现在很多人在网站上冲浪&#xff0c;有时碰到自己喜欢的图片&#xff0c;但是网站图片被保护&#xff0c;没有办法直接另存为本地&#xff0c;这个时候程序员的优势就体现出来了&#xff0c;下面是一直程序员处理的方法及示例 Python是很好的爬虫工具不用再说了&#xff0c;它可…

作者头像 李华
网站建设 2026/4/16 10:42:24

【计算机毕业设计案例】基于springboot+vue直播管理系统基于springboot的传媒公司传媒直播管理系统设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/16 5:50:27

Java毕设项目推荐-基于springboot的传媒公司传媒直播直播运营管理系统设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/13 14:09:44

疆鸿智能PROFIBUS联RS232:破解汽车智造追溯瓶颈,效率怒增!

疆鸿智能PROFIBUS联RS232&#xff1a;破解汽车智造追溯瓶颈&#xff0c;效率怒增&#xff01;1. 项目背景在汽车制造业迈向工业4.0的今天&#xff0c;生产过程的自动化与信息化水平直接决定企业的竞争力。总装车间作为整车制造的核心环节&#xff0c;涉及车身、电池包、电机等关…

作者头像 李华
网站建设 2026/4/13 15:43:30

导游证教程资源合集

【全国导游证考试课程及资料】合集汇总 ​​​ 文件大小: 13.8GB内容特色: 13.8G全国导游证全套课程真题精讲速记适用人群: 备考导游证零基础至冲刺学员核心价值: 一键打包节省80%搜集时间高效通关下载链接: https://pan.quark.cn/s/49528be5c2bc 导游证备考资料合集 文件大…

作者头像 李华