0 前言
??
這兩年開始畢業(yè)設(shè)計和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點,往往達不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項目系統(tǒng)達不到老師的要求。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計項目,今天要分享的是
?? 畢業(yè)設(shè)計 stm32與深度學(xué)習(xí)口罩佩戴檢測系統(tǒng)(源碼+硬件+論文)
??學(xué)長這里給一個題目綜合評分(每項滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點:5分
?? 項目分享:見文末!文章來源地址http://www.zghlxwxcb.cn/news/detail-829072.html
1 主要功能
系統(tǒng)框架,下位機系統(tǒng)分為主控模塊、通信模塊、顯示模塊、報警模塊四個部分組成,其運行流程為:首先主控模塊通過通信模塊接收上位機發(fā)送的識別結(jié)果數(shù)據(jù),讀取當(dāng)前狀態(tài)數(shù)據(jù),當(dāng)檢測結(jié)果通過顯示模塊實時的顯示在屏幕上,用于直觀展示,若發(fā)現(xiàn)當(dāng)前狀態(tài)為未佩戴口罩,驅(qū)動報警程序控制蜂鳴器進行報警。
2 硬件設(shè)計(原理圖)
口罩檢測門禁系統(tǒng)的主要以PC和STM32為主控核心,首先是由PC端連接WiFi熱點然后上位機的主控程序打開PC端攝像頭實行實時檢測再通過其WiFi模塊將實時檢測結(jié)果傳輸?shù)轿覀兊腟TM32模塊中進行處理,將檢測結(jié)果通過OLED進行顯示,最終通過蜂鳴器發(fā)出警報。
硬件選擇
- STM32F103RCT6開發(fā)板 * 1
- 蜂鳴器模塊 * 1
- Wifi - ESP01S * 1
- 1.44寸液晶屏(SPI接口) * 1
- 杜邦線若干
3 核心軟件設(shè)計
系統(tǒng)軟件流程如圖所示,上位機的狀態(tài)信息可以通過TCP通信實時傳輸給下位機控制器,進而下位機根據(jù)所接收到的數(shù)據(jù)進行其它顯示報警操作。
(1)上位機軟件設(shè)計:上位機軟件主要負責(zé)將口罩識別的結(jié)果通過TCP通信傳輸給下位機,本課題上位機作為TCP客戶端。首先上位機進行網(wǎng)絡(luò)通信的初始化,包括設(shè)置IP地址與端口,創(chuàng)建socket對象,建立socket連接,之后上位機按鈕通過AJAX方式向后端發(fā)起請求,后端調(diào)用TCP客戶端向ESP8266發(fā)送消息。當(dāng)成功建立局域網(wǎng)之間的通信時,上位機可顯示連接成功的狀態(tài)。
(2)下位機系統(tǒng)的軟件程序設(shè)計包括系統(tǒng)的初始化程序及其各功能模塊的子程序。其中初始化程序包括LCD顯示屏配置的初始化、ESP8266通信模塊的初始化程序。
蜂鳴器檢測報警程序:若系統(tǒng)狀態(tài)檢測到未佩戴口罩,單片機進入報警程序控制相應(yīng)的引腳輸出高電平,進而控制蜂鳴器發(fā)出報警聲音
。
ESP8266模塊程序:首先進入通信初始化程序,啟動STA模式,連接WIFI,并通過AT指令將ESP8266配置為服務(wù)端,與ESP8266通過串口連接的STM32控制器進入串口中斷回調(diào)函數(shù)接收上位機發(fā)送過來的數(shù)據(jù)。
深度學(xué)習(xí)口罩佩戴檢測
數(shù)據(jù)集的準備:
數(shù)據(jù)集是從網(wǎng)絡(luò)上爬取的圖片,總的包含了8535張圖片(其中部分圖片沒有使用到),其中包含:
戴口罩的數(shù)據(jù)圖(with_mask):2978個;
未戴口罩的數(shù)據(jù)圖(without_mask):2995個;
帶了口罩但是姿勢不正確的數(shù)據(jù)圖(mask_weared_incorrect):2994個。
所有圖片均是由人臉識別模式切割出,每個圖都只包含小部分圖像,這也使得訓(xùn)練的準確性有極大的提高,有的圖片還進行了旋轉(zhuǎn)操作實現(xiàn)數(shù)據(jù)增強。下圖12是我截圖的部分數(shù)據(jù)集(包含了正確佩戴口罩、未佩戴口罩和未正確佩戴口罩三部分的數(shù)據(jù)圖片)。
數(shù)據(jù)集訓(xùn)練
在準備好數(shù)據(jù)圖集之后自然是需要進行訓(xùn)練了,對于每一張圖片畫出區(qū)域打賞本文使用了一款開源的標(biāo)注工具labeling,非常的簡便、高效的。運行指定的數(shù)據(jù)集文件夾實現(xiàn)標(biāo)注,人工標(biāo)注圖片集,將整張臉作為目標(biāo)框標(biāo)注出它的位置,如圖13,然后將相應(yīng)的數(shù)據(jù)寫入到相應(yīng)的數(shù)據(jù)標(biāo)簽。
當(dāng)完成數(shù)據(jù)集標(biāo)注后,每張圖片所對應(yīng)的標(biāo)簽文件會自動保存到指定的文件夾,如圖14,其中每一行開頭的數(shù)字0和1代表著待檢測的目標(biāo)類別“with_mask”與“without_mask”,即已佩戴口罩或未佩戴。每行后續(xù)四個數(shù)字是該目標(biāo)樣本在本張圖片中的位置坐標(biāo)。
訓(xùn)練過程
按照目標(biāo)要求更改訓(xùn)練數(shù)據(jù)、神經(jīng)網(wǎng)絡(luò)模型路徑、訓(xùn)練輪數(shù)、batchsize的大小和GPU處理的數(shù)量以及其他的一些參數(shù),然后模型訓(xùn)練代碼就可以正式運行了。盡管本次制作的目標(biāo)檢測的數(shù)據(jù)集是由8535張訓(xùn)練集、驗證集圖片組成,模型的損失函數(shù)值還是很快地收斂開始無限接近于0,在訓(xùn)練執(zhí)行到第35輪時模型準確率接近于90%。
展示模型在訓(xùn)練過程中的準確率(Precision)與召回率(Recall)數(shù)值的變化。
使用下圖這兩個函數(shù)繪制訓(xùn)練的loss(圖1)和accuracy(圖2)曲線,可以看到,整個訓(xùn)練過程的收斂性是非常好的,最后在驗證集的準確率也穩(wěn)定到了97%左右。
篇幅有限,不過多復(fù)述詳細設(shè)計細節(jié),詳細的設(shè)計分享在論文中。。。
stm32采集部分代碼
void SMBus_StartBit(void)
{
SMBUS_SDA_H(); // Set SDA line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // Generate bus free time between Stop
SMBUS_SDA_L(); // Clear SDA line
SMBus_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 line
SMBus_Delay(5); // Wait a few microseconds
}
void SMBus_StopBit(void)
{
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SDA_L(); // Clear SDA line
SMBus_Delay(5); // Wait a few microseconds
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // Stop condition setup time(Tsu:sto=4.0us min)
SMBUS_SDA_H(); // Set SDA line
}
u8 SMBus_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 SDA
Tx_buffer<<=1; // Get next bit for checking
}
Ack_bit=SMBus_ReceiveBit(); // Get acknowledgment bit
return Ack_bit;
}
void SMBus_SendBit(u8 bit_out)
{
if(bit_out==0)
{
SMBUS_SDA_L();
}
else
{
SMBUS_SDA_H();
}
SMBus_Delay(2); // Tsu:dat = 250ns minimum
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(6); // High Level of Clock Pulse
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(3); // Low Level of Clock Pulse
// SMBUS_SDA_H(); // Master release SDA line ,
return;
}
u8 SMBus_ReceiveBit(void)
{
u8 Ack_bit;
SMBUS_SDA_H(); //引腳靠外部電阻上拉,當(dāng)作輸入
SMBus_Delay(2); // High Level of Clock Pulse
SMBUS_SCK_H(); // Set SCL line
SMBus_Delay(5); // High Level of Clock Pulse
if (SMBUS_SDA_PIN())
{
Ack_bit=1;
}
else
{
Ack_bit=0;
}
SMBUS_SCK_L(); // Clear SCL line
SMBus_Delay(3); // Low Level of Clock Pulse
return Ack_bit;
}
u8 SMBus_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_buffer
RX_buffer |=0x01;
}
else
{
RX_buffer <<= 1; // If the bit is LOW save 0 in RX_buffer
RX_buffer &=0xfe;
}
}
SMBus_SendBit(ack_nack); // Sends acknowledgment bit
return RX_buffer;
}
4 實現(xiàn)效果
演示視頻
畢業(yè)設(shè)計 stm32與深度學(xué)習(xí)口罩佩戴檢測系統(tǒng) - 單片機 嵌入式 物聯(lián)網(wǎng)
5 最后
包含內(nèi)容
包含詳細設(shè)計論文
文章來源:http://www.zghlxwxcb.cn/news/detail-829072.html
?? 項目分享:見文末!
到了這里,關(guān)于通信工程畢設(shè) stm32與深度學(xué)習(xí)口罩佩戴檢測系統(tǒng)(源碼+硬件+論文)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!