一.前言
項(xiàng)目設(shè)計(jì)主要是對(duì)于所學(xué)知識(shí)的整體回顧,需要結(jié)合各個(gè)學(xué)科,才能做出達(dá)到符合標(biāo)準(zhǔn)的設(shè)計(jì)。
文章的目的在分享優(yōu)質(zhì)的項(xiàng)目以及項(xiàng)目經(jīng)驗(yàn),提供設(shè)計(jì)思路,歡迎交流與指正不足之處。
二.簡(jiǎn)介
由于人臉識(shí)別技術(shù)具有無(wú)需接觸、安全性高、可靠性高等優(yōu)點(diǎn),在身份認(rèn)證領(lǐng)域具有廣闊的應(yīng)用前景。目前,市場(chǎng)中的門(mén)禁系統(tǒng)大多采取離線(xiàn)加傳統(tǒng)人臉識(shí)別算法的方式,無(wú)法實(shí)時(shí)記錄訪客信息,并存在識(shí)別準(zhǔn)確率低、容錯(cuò)率較低、只針對(duì)特定場(chǎng)景等缺點(diǎn)。該設(shè)計(jì)主要目的在于解決上述的問(wèn)題,采用深度學(xué)習(xí)人臉識(shí)別算法與在線(xiàn),計(jì)算的門(mén)禁系統(tǒng)解決方案。
三.主要器件
?STM32F407ZGT6芯片主控芯片
?OV2640攝像頭模塊
?ESP8266無(wú)線(xiàn)通信模塊
?語(yǔ)音播報(bào)電路
?自動(dòng)開(kāi)關(guān)門(mén)電路(舵機(jī)驅(qū)動(dòng))
?IIC驅(qū)動(dòng)型OLED屏幕
?按鍵電路
?電源電路
技術(shù)交流,調(diào)試幫助,技術(shù)V:anwarmaries Q:1083091092
四.系統(tǒng)整體方案
下位機(jī)采集人臉圖像數(shù)據(jù),經(jīng)無(wú)線(xiàn)通信模塊傳輸至上位機(jī)識(shí)別并返回識(shí)別結(jié)果的人臉識(shí)別門(mén)禁系統(tǒng)方案。下位機(jī)主要由微控制器模塊、攝像頭模塊、無(wú)線(xiàn)傳輸模塊組成,負(fù)責(zé)圖像采集與傳輸,并根據(jù)上位機(jī)返回識(shí)別結(jié)果并做出相應(yīng)的動(dòng)作。
上位機(jī)則由安裝Tensorflow深度學(xué)習(xí)運(yùn)行環(huán)境的PC構(gòu)成,負(fù)責(zé)圖片接收、人臉識(shí)別和返回識(shí)別結(jié)果。
下位機(jī)軟件的設(shè)計(jì)流程圖如下圖所示:
文章內(nèi)容將在后續(xù)逐步完善,需要相關(guān)實(shí)物,亦或是任何技術(shù)問(wèn)題。歡迎私信本人,CSDN@風(fēng)雨同舟1
五. 部分核心代碼
主函數(shù)部分:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-812298.html
```cpp
```c
int main(void)
{
/*--------------變量聲明--------------------*/
u8 limt,left,right,chang=0,start,display,display1;
float temp;
/*--------------配置初始化--------------------*/
Stm32_Clock_Init(9); //系統(tǒng)時(shí)鐘設(shè)置
delay_init(72); //延時(shí)初始化
USART1_Init(115200); //串口初始化為115200
OLED_Init();
SMBus_Init();
KEY_Init();
LED_Init();
BEEP_Init();
// OLED_Refresh_Gram(); //更新顯示到OLED
while(1)
{
/*start=1(測(cè)溫開(kāi)始),start=2(人臉識(shí)別開(kāi)始),start=3(口罩識(shí)別開(kāi)始)*/
switch (duli_key(1))
{
//case 0: start=0;break;
case 1: {start=1;break;}
case 2: {start=2;break;}
case 3: {start=3;break;}
case 4: {start=4;break;}
}
//--------------測(cè)溫部分------------------------------------
if(start==1)
{
if(start_stop(Key_Scan()))
{
if(display==2)
{
OLED_Clear();
OLED_ShowString(25,0,"temp test",16);
OLED_ShowString(0,25,"temp:",16);
OLED_ShowChar(60,25,'.',16,1);
delay_ms(10);
OLED_ShowString(0,40,"temp_limit:37",16);
display=1;
}
if(temp_target(Key_Scan()))//測(cè)溫:1--測(cè)量液體溫度 0--測(cè)量人體溫度
{
temp=SMBus_ReadTemp(0);
}
else
temp=SMBus_ReadTemp(1);
/*------------溫度閾值設(shè)定------------------*/
while(set_templimt(Key_Scan()))
{
LED0=1;
if(Key_Scan()==10)
{
while(Key_Scan()==10);
chang=1;
}
else if(Key_Scan()==11)
{
while(Key_Scan()==11);
chang=2;
}
switch(chang)
{
case 0: {left=3;right=7;break;}
case 1: if(Key_Scan()<5) left=Key_Scan();break;
case 2: if(Key_Scan()<10) right=Key_Scan();;break;
}
limt=left*10+right;
OLED_ShowNum(90,40,limt,2,16);
OLED_Refresh_Gram(); //更新顯示到OLED
}/*結(jié)束while閾值設(shè)定*/
/*---------溫度范圍報(bào)警--------------*/
warning(temp);//溫度范圍檢測(cè)與報(bào)警
prompt_warning(temp,limt);
LED0=0; //GPIOB.5
temp_display(temp);//溫度顯示函數(shù)
OLED_Refresh_Gram(); //更新顯示到OLED
}
else
{
if(display<2)
{
OLED_Clear();
display=2;
}
LED0=1;
OLED_ShowString(0,0,"please key temp .....",16);
}
}
//----------------人臉識(shí)別-------------------//
if(start==2)
{
static display1=2;
if(display1==2)
{
OLED_Clear();
display1=1;
}
OLED_ShowString(0,0,"Please click reset...",16);
delay_ms(4000);
OLED_ShowString(0,40,"Identify in the face....",16);
delay_ms(10);
if((boll_x==1)||(boll_y==2)||(boll_z==3)||(boll_b==4))
{
OLED_ShowString(10,0,"identification ",16);
delay_ms(2);
if(boll_x==1)
{
OLED_ShowString(0,25,"name:xiaokangsong",16);
OLED_Refresh_Gram();
}
else if(boll_y==2)
{
OLED_ShowString(0,25,"name:chengrujia ",16);
OLED_Refresh_Gram();
}
else if(boll_z==3)
{
OLED_ShowString(0,25,"name:mayumao ",16);
OLED_Refresh_Gram();
}
else if(boll_b==4)
{
OLED_ShowString(0,0,"error2",16);
OLED_Refresh_Gram();
}
}
else
{
OLED_ShowString(0,0,"Identification failure ",16);
display1=1;
}
}
OLED_Refresh_Gram(); //更新顯示到OLED
}
}
按鍵部分代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812298.html
void Key_assignment(unsigned char z) //按鍵賦值
{
Key_Data=0x00; //清零
if(z==0)
{
key1_0; key2_0; key3_0; key4_0;
key5_1; key6_1; key7_1; key8_1; //使用的方法是反轉(zhuǎn)法
}
else
{
key1_1; key2_1; key3_1; key4_1;
key5_0; key6_0; key7_0; key8_0; //使用的方法是反轉(zhuǎn)法
}
delay_us(222); //短延時(shí)一下
if(key1==1) Key_Data=Key_Data|0x80;
else Key_Data=Key_Data|0x00;
if(key2==1) Key_Data=Key_Data|0x40;
else Key_Data=Key_Data|0x00;
if(key3==1) Key_Data=Key_Data|0x20;
else Key_Data=Key_Data|0x00;
if(key4==1) Key_Data=Key_Data|0x10;
else Key_Data=Key_Data|0x00;
if(key5==1) Key_Data=Key_Data|0x08;
else Key_Data=Key_Data|0x00;
if(key6==1) Key_Data=Key_Data|0x04;
else Key_Data=Key_Data|0x00;
if(key7==1) Key_Data=Key_Data|0x02;
else Key_Data=Key_Data|0x00;
if(key8==1) Key_Data=Key_Data|0x01;
else Key_Data=Key_Data|0x00; //把這八個(gè)IO拼成一個(gè)數(shù),也就是當(dāng)成51里面的一組IO
}
到了這里,關(guān)于【項(xiàng)目設(shè)計(jì)】基于STM32人臉識(shí)別系統(tǒng) - 單片機(jī) 物聯(lián)網(wǎng) 嵌入式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!