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