news 2026/6/23 21:19:16

毕业设计项目 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/6/23 10:37:22

深度解密:TensorFlow艺术生成双雄StyleNet与DeepDream实战指南

深度解密&#xff1a;TensorFlow艺术生成双雄StyleNet与DeepDream实战指南 【免费下载链接】tensorflow_cookbook Code for Tensorflow Machine Learning Cookbook 项目地址: https://gitcode.com/gh_mirrors/te/tensorflow_cookbook 你是否曾幻想过让AI帮你将梵高的艺术…

作者头像 李华
网站建设 2026/6/23 18:18:05

全网最全——BMS原理之不平衡电桥法

目录 原理介绍 测量方法 公式推导方法1 公式推导方法2 名词解释 电力行业中&#xff0c;绝缘检测是常见的监测手段&#xff0c;主要负责检测电路中的绝缘情况&#xff0c;若本该绝缘的情况出现了不绝缘或者其他失灵情况&#xff0c;电路采集到的信号会立马出现异常。 原理…

作者头像 李华
网站建设 2026/6/23 18:18:40

使用Hopfield神经网络解决旅行商问题

使用Hopfield神经网络解决旅行商问题(TSP)。这是一种经典的神经网络优化方法。 Hopfield神经网络基础 Hopfield网络是一种递归神经网络&#xff0c;具有能量函数&#xff0c;能够收敛到局部最小值。 classdef HopfieldNetwork < handlepropertiesnum_neurons % 神经元数…

作者头像 李华
网站建设 2026/6/23 19:46:08

基于STM32的温湿度、甲醛、PM2.5空气质量检测系统全套资料及功能详解

基于STM32的温湿度、甲醛、PM2.5空气质量检测系统采集设计资料&#xff0c;联系赠送答辩模板等全套资料。 主要功能: 使用STM32为主控制器&#xff0c;可采集当前环境下的温湿度、甲醛、PM2.5值&#xff0c;当采集值超过预设阀值时&#xff0c;蜂鸣器自动报警。 采集到的温湿度…

作者头像 李华
网站建设 2026/6/23 19:43:55

40、Linux 软件开发与应用全解析

Linux 软件开发与应用全解析 1. C 源代码编译基础 在编译 C 源代码时,可在 C 预处理器标志(CPPFLAGS)中包含路径选项。同时要记住,可能还需要 -L 链接器标志来配合头文件使用。 若看起来没有缺少某个库,有可能是在尝试为源代码不支持的操作系统进行编译。此时可检查 Ma…

作者头像 李华
网站建设 2026/6/23 19:49:10

Code Llama-7b-hf 代码智能助手:从零开始掌握AI编程神器

Code Llama-7b-hf 代码智能助手&#xff1a;从零开始掌握AI编程神器 【免费下载链接】CodeLlama-7b-hf 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/CodeLlama-7b-hf 还在为重复的编码任务烦恼吗&#xff1f;Code Llama-7b-hf 作为Meta推出的专业代码生成…

作者头像 李华