聚豐項(xiàng)目 > WIFI視頻智能監(jiān)控——人臉追蹤
傳統(tǒng)圖像監(jiān)控設(shè)備功能非常單一,僅有圖像的采集與顯示功能,已經(jīng)不能滿足現(xiàn)代技術(shù)要求。 本項(xiàng)目嘗試物聯(lián)網(wǎng)概念結(jié)合,不僅實(shí)現(xiàn)了包含傳統(tǒng)的錄像功能,還實(shí)現(xiàn)了如今同樣很火暴的技術(shù)——人臉識(shí)別。 本項(xiàng)目的優(yōu)點(diǎn): 通過WIFI傳輸數(shù)據(jù),只要哪里有電源插座,便可作為視頻監(jiān)控點(diǎn)。 通過WIFI傳輸,可遠(yuǎn)程操作攝像頭運(yùn)行模式(運(yùn)行、停止、低功耗),實(shí)時(shí)性增強(qiáng)。 結(jié)合上位機(jī)人臉識(shí)別,自動(dòng)記錄、拍照人臉畫面,不再需要像傳統(tǒng)設(shè)備快進(jìn)來查找出現(xiàn)人臉畫面,追蹤更加方便。 成本較低,具有商業(yè)競爭優(yōu)勢。
Mr.老囧
Mr.老囧
團(tuán)隊(duì)成員
林桂炯 軟件開發(fā)工程師
開發(fā)板:NUCLEO-64 STM32F446
主控MCU:STM32F446RET6
功能特點(diǎn):帶有數(shù)字?jǐn)z像頭DCMI接口,不需要FIFO可直接連接并口攝像頭。具有片內(nèi)128KB的SRAM,存儲(chǔ)空間大。
WIFI模塊:3080B
功能特點(diǎn):具有STATION和AP功能,提供TCP SOCKET通信,能通過UART直接換TCP通信,非常方便。
攝像頭:OV2640 200萬像素
功能特點(diǎn):提供多種分辨率選擇,對(duì)于一幀QVGA圖像(分辨率320*240)的RGB565所需的153600字節(jié)的空間,這對(duì)于該主控的SRAM來說,空間是不足夠,而OV2640自帶JPEG壓縮技術(shù),一幀QVGA圖像經(jīng)過JPEG壓縮后不到10KB,極大節(jié)省SRAM存儲(chǔ)空間。
攝像頭轉(zhuǎn)接板:
功能特點(diǎn):連接開發(fā)板與攝像頭,減少傳輸干擾導(dǎo)致的圖像數(shù)據(jù)丟失。
主控引腳連接圖:
作品原型實(shí)物圖:
功能框圖:
開發(fā)平臺(tái)采用:由于MBED平臺(tái)暫時(shí)不支持?jǐn)z像頭接口,所以先暫時(shí)使用ST官方的HAL庫,在完成所有功能實(shí)現(xiàn)后,將移植到MBED平臺(tái)。
開發(fā)工具:keil 5.17
上位機(jī)開發(fā): .C++ 與QT5.1,視覺庫opencv
開發(fā)工具:visual stdio 2017
下位機(jī)軟件驅(qū)動(dòng):
串口UART驅(qū)動(dòng):與WIFI模塊3080B采用UART通信。
I2C驅(qū)動(dòng):對(duì)攝像頭進(jìn)行初始化設(shè)置。
DCMI驅(qū)動(dòng):設(shè)置從攝像頭采集圖像接口。
MCO1驅(qū)動(dòng):給攝像頭模塊提供時(shí)鐘。
軟件程序流程圖:
下位機(jī):
系統(tǒng)上電后,串口和攝像頭進(jìn)行初始化,進(jìn)入拍照等待。
通過串口接收回調(diào)接收上位機(jī)發(fā)送過來的拍照指令,調(diào)用DCMI接口進(jìn)行拍照。
通過DCMI的幀完成回調(diào)函數(shù)可知道圖像采集完成,發(fā)送圖像回上位機(jī)。
下位機(jī)核心邏輯代碼:
while (1) { /* USER CODE END WHILE */ if(takePhoto==1){ takePhoto=0; if(Rxbuffer[0]==0x12 &&Rxbuffer[1]==0x34){ Rxbuffer[0]=0; Rxbuffer[1]=0; //__HAL_DCMI_ENABLE(&DCMI_hdcmi); __HAL_DCMI_ENABLE_IT(&DCMI_hdcmi, DCMI_IT_FRAME); //每次接收完一幀都需要重新使能捕捉FRAME中斷 while(HAL_DCMI_Start_DMA(&DCMI_hdcmi, DCMI_MODE_SNAPSHOT,(uint32_t)JpegBuffer, pictureBufferLength)!=HAL_OK);//開啟捕捉圖像 } HAL_UART_Receive_IT(&UartHandle, (uint8_t *)Rxbuffer, 2); } if(getPicture==1){ uint8_t dataHead[8]={'J','P','E','G'}; pictureLength=pictureBufferLength-DCMI_hdcmi.DMA_Handle->Instance->NDTR;//這個(gè)NDTR存放了JPEG的長度 pictureLength*=4; //因?yàn)镈CMI的FIFO是4字節(jié),DMA也是滿4字節(jié)傳輸一次,所以圖像實(shí)際長度=傳輸次數(shù)*4; getPicture=0; (*(uint32_t*)(dataHead+4))=(uint32_t)pictureLength; //data是8字節(jié),前4字節(jié)用來放"JPEG",后4字節(jié)用來存放圖像實(shí)際長度 while(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)dataHead, 8)!=HAL_OK); //先發(fā)送數(shù)據(jù)長度給上位機(jī) HAL_Delay(20); while(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)JpegBuffer, pictureLength)!=HAL_OK);//再發(fā)送數(shù)據(jù)給上位機(jī) } /* USER CODE BEGIN 3 */ }
上位機(jī):
程序運(yùn)行后,顯示主界面。用戶點(diǎn)拍照按鍵后,發(fā)送拍照指令給下位機(jī)。
通過TCP異步接收圖像數(shù)據(jù),顯示到界面。
調(diào)用OPENCV圖像處理算法,捕捉人臉,顯示到界面。
作品原型正面俯視:
作品原型背面俯視:
圖片采集與人臉追蹤效果圖1:
圖片采集與人臉追蹤效果圖2:
人臉追蹤視頻:
fycvnu8fvjnm: 可以詳細(xì)介紹一下STM32部分嗎??包括DCMI的使用等等
回復(fù)