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