文章目錄
- 1 簡介
- 2 專案簡介
- 2 主要器件
- 3 硬體效果
- 4 軟體設計
- 4.1 功能架構
- 4.2 軟體程式流程圖
- 5 部分實作代碼
- 6 演示效果
- 6 最后
1 簡介
Hi,大家好,這里是丹成學長,今天向大家介紹一個學長做的單片機專案
基于單片機的人臉識別追蹤
大家可用于 課程設計 或 畢業設計
技術解答
畢設幫助:<Q>746876041
2 專案簡介
傳統影像監控設備功能非常單一,僅有影像的采集與顯示功能,已經不能滿足現代技術要求,
本專案嘗試物聯網概念結合,不僅實作了包含傳統的錄像功能,還實作了如今同樣很火暴的技術——人臉識別,
本專案的優點:
通過WIFI傳輸資料,只要哪里有電源插座,便可作為視頻監控點,
通過WIFI傳輸,可遠程操作攝像頭運行模式(運行、停止、低功耗),實時性增強,
結合上位機人臉識別,自動記錄、拍照人臉畫面,不再需要像傳統設備快進來查找出現人臉畫面,追蹤更加方便,
2 主要器件
-
開發板: 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存盤空間,
- 攝像頭轉接板:
功能特點:連接開發板與攝像頭,減少傳輸干擾導致的影像資料丟失,
主控引腳連接圖:

3 硬體效果

4 軟體設計
4.1 功能架構

開發平臺采用:由于MBED平臺暫時不支持攝像頭介面,所以先暫時使用ST官方的HAL庫,在完成所有功能實作后,將移植到MBED平臺,
開發工具:keil 5.17
上位機開發: .C++ 與QT5.1,視覺庫opencv
開發工具:visual stdio 2017
下位機軟體驅動:
串口UART驅動:與WIFI模塊3080B采用UART通信,
I2C驅動:對攝像頭進行初始化設定,
DCMI驅動:設定從攝像頭采集影像介面,
MCO1驅動:給攝像頭模塊提供時鐘,
4.2 軟體程式流程圖

5 部分實作代碼
下位機:
系統上電后,串口和攝像頭進行初始化,進入拍照等待,
通過串口接識訓呼接收上位機發送過來的拍照指令,呼叫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 */
}
6 演示效果
圖片采集與人臉追蹤效果:

圖片采集與人臉追蹤效果:

6 最后
技術解答
畢設幫助:<Q>746876041
單片機畢設專案大全:
https://blog.csdn.net/huawei123444/article/details/119822845
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296862.html
標籤:其他
上一篇:深藏功與名,利用Python修改前女友婚禮現場WIFI,轉身瀟灑離去!
下一篇:設計模式---配接器模式
