<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>使用MTCNN和用于ESP32-S3的TensorFlow Lite進行人臉檢測

使用MTCNN和用于ESP32-S3的TensorFlow Lite進行人臉檢測

2023-06-13 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

介紹

前段時間我第一次聽到“嵌入式機器學習”這個詞,直到那時我才想到人工智能模型可以在微控制器上運行。一段時間后,我開始使用 TensorFlow 學習計算機視覺課程,然后圖像處理背后的神秘主義以及創建和部署 AI 模型所需的所有過程對我來說變得清晰起來。這個項目是我對嵌入式系統的熱情和這些新獲得的知識的結果。前段時間我第一次聽到“嵌入式機器學習”這個詞,直到那時我才想到人工智能模型可以在微控制器上運行。一段時間后,我開始使用 TensorFlow 學習計算機視覺課程,然后圖像處理背后的神秘主義以及創建和實施 AI 模型所需的所有過程對我來說變得清晰起來。計算機視覺領域,我一直覺得很有趣的一個應用是面部檢測,在該領域中,MTCNN 非常適合實施。這個項目是我對嵌入式系統的熱情和這些新獲得的知識的結果。

為什么?

它是如何工作的?

MTCNN(多任務級聯卷積網絡)是作為人臉檢測和人臉對齊解決方案而開發的框架。它由三個階段的卷積網絡組成,能夠識別人臉和標志性位置,例如眼睛、鼻子和嘴巴。

P-Net(提案網絡)

這是一個FCN(Fully Convolutional Network),用于獲取候選窗口及其邊界框回歸向量。當目標是檢測某個預定義類的對象時,邊界框回歸是一種預測框定位的流行技術。獲得的候選窗口用邊界框回歸向量進行校準,并用 NMS(非最大抑制)算子進行處理以組合重疊區域。

poYBAGSBN0yAFebIAABngXA4wtA582.png
?

R-Net(精煉網絡)

R-Net 進一步減少候選的數量,使用邊界框回歸進行校準,并使用 NMS 合并重疊的候選。這個網絡是一個 CNN,而不是像 P-Net 這樣的 FCN,因為在其架構的最后階段有一個密集層。

poYBAGSBN0-AT8WoAACmpUD8yVA100.png
?

O-Net(輸出網絡)

這個階段類似于R-Net,但這個輸出網絡旨在更詳細地描述面部并輸出眼睛、鼻子和嘴巴的五個面部特征點的位置。

pYYBAGSBN1KAV3NOAAB3GFjphhE939.png
?

TensorFlow 實施

為實現 MTCNN 模型,使用的工具是 TensorFlow 和 Google Colab。TensorFlow 是為 Google 開發的 ML(機器學習)開源庫,它能夠構建和訓練神經網絡以檢測模式和相關性。Google Colab 是 Google Research 的產品,允許通過瀏覽器編寫和執行任意 python 代碼,特別適合 ML、數據分析和教育。

為了正確實施 MTCNN,必須處理模型的輸入和輸出數據以保證最佳結果。下圖顯示了實現的管道的圖塊。

poYBAGSBN1SAQ7gzAADu67kh1ac171.png
?

第一步是執行圖像金字塔以創建不同比例的輸入圖像并檢測不同大小的人臉。這些新的縮放圖像是 P-Net 的輸入,它為每個候選窗口生成偏移量和分數。然后對這些輸出進行后處理以獲得面部相遇的坐標。R-Net 的輸入必須用之前的輸出進行預處理,這樣才能獲得新的候選窗口。R-Net 輸出是候選窗口的偏移量和分數,這些窗口經過后處理以獲得人臉相遇的新坐標。最后,對于 O-Net,重復 R-Net 過程并獲得輸入圖像中人臉的坐標。

預處理包括兩個步驟,根據之前獲得的邊界框坐標裁剪輸入圖像,并調整裁剪圖像的大小以匹配模型的輸入形狀。

pYYBAGSBN1aAUBDzAAAeOtktOiU097.png
?

另一方面,后處理包括三個步驟,應用NMS合并重疊區域,用之前獲得的偏移量校準邊界框,對最終邊界框坐標進行平方和校正。

poYBAGSBN1mAMEaWAABJRZfbQ90293.png
?

之前詳述的所有過程以及 TensorFlow、TensorFlow Lite 和 TensorFlow Lite Micro 的模型都是在下一個 Google Colab notebook 中開發的。

在 Colab 中打開

部署到 ESP32-S3

模型開發的最后一步顯示為所有 MTCNN 模型創建 .c 文件和用于模型設置的 .h 文件,它們位于main/models/. MTCNN 管道所需的預處理和后處理函數是使用 C/C++ 在文件utils.cc和中實現的utils.h,這些文件位于main/.

硬件包括 ESP32-S3-DevKitC-1-N8R8 和 OV2640 相機模塊。PSRAM 的使用是強制性的,可以使用另一個帶有 PSRAM 的 ESP32-S3 代替 ESP32-S3-DevKitC-1-N8R8。

1. 下載并安裝 ESP-IDF

本項目使用ESP-IDF v5.0開發,必須使用該版本或更高版本。下一個鏈接包含下載和安裝它的必要說明,請進行手動安裝。

下載并安裝 ESP-IDF v5.0

2.克隆這個存儲庫:

git clone --recursive https://github.com/mauriciobarroso/mtcnn_esp32s3.git

3.配置項目:

更改 menuconfig->App Configuration->Camera Configuration 中的值以配置相機引腳,并在 menuconfig->App Configuration->Wi-Fi Configuration 中更改值以設置 Wi-Fi 憑據。

cd mtcnn_esp32s3/
idf.py set-target esp32s3
idf.py menuconfig

4.閃光和監控

該項目不需要屏幕來顯示 MTCNN 生成的圖像和邊界框。相反,它使用控制臺字符來打印輸出圖像和其他相關信息。要監視控制臺輸出運行:

idf.py flash monitor

控制臺應該像這樣打印一些東西:

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce3810,len:0x17d8
load:0x403c9700,len:0xe88
load:0x403cc700,len:0x3000
entry 0x403c9930
I (25) boot: ESP-IDF v5.0 2nd stage bootloader
I (25) boot: compile time 13:50:38
I (25) boot: chip revision: v0.1
I (26) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (33) qio_mode: Enabling default flash chip QIO
I (39) boot.esp32s3: Boot SPI Speed : 80MHz
I (44) boot.esp32s3: SPI Mode       : QIO
I (48) boot.esp32s3: SPI Flash Size : 8MB
I (53) boot: Enabling RNG early entropy source...
I (58) boot: Partition Table:
I (62) boot: ## Label            Usage          Type ST Offset   Length
I (69) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (77) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (84) boot:  2 factory          factory app      00 00 00010000 00180000
I (92) boot:  3 storage          Unknown data     01 82 00190000 000f0000
I (99) boot: End of partition table
I (103) boot_comm: chip revision: 1, min. application chip revision: 0
I (111) esp_image: segment 0: paddr=00010020 vaddr=3c0b0020 size=b03d4h (721876) map
I (228) esp_image: segment 1: paddr=000c03fc vaddr=3fc99000 size=05de0h ( 24032) load
I (233) esp_image: segment 2: paddr=000c61e4 vaddr=40374000 size=09e34h ( 40500) load
I (242) esp_image: segment 3: paddr=000d0020 vaddr=42000020 size=a441ch (672796) map
I (345) esp_image: segment 4: paddr=00174444 vaddr=4037de34 size=0b150h ( 45392) load
I (354) esp_image: segment 5: paddr=0017f59c vaddr=50000000 size=00010h (    16) load
I (363) boot: Loaded app from partition at offset 0x10000
I (363) boot: Disabling RNG early entropy source...
I (375) octal_psram: vendor id    : 0x0d (AP)
I (375) octal_psram: dev id       : 0x02 (generation 3)
I (375) octal_psram: density      : 0x03 (64 Mbit)
I (380) octal_psram: good-die     : 0x01 (Pass)
I (385) octal_psram: Latency      : 0x01 (Fixed)
I (390) octal_psram: VCC          : 0x01 (3V)
I (396) octal_psram: SRF          : 0x01 (Fast Refresh)
I (401) octal_psram: BurstType    : 0x01 (Hybrid Wrap)
I (407) octal_psram: BurstLen     : 0x01 (32 Byte)
I (413) octal_psram: Readlatency  : 0x02 (10 cycles@Fixed)
I (419) octal_psram: DriveStrength: 0x00 (1/1)
W (424) PSRAM: DO NOT USE FOR MASS PRODUCTION! Timing parameters will be updated in future IDF version.
I (435) esp_psram: Found 8MB PSRAM device
I (439) esp_psram: Speed: 80MHz
I (443) cpu_start: Pro cpu up.
I (446) cpu_start: Starting app cpu, entry point is 0x40375738
0x40375738: call_start_cpu1 at /home/mauricio/esp/esp-idf-v5.0/components/esp_system/port/cpu_start.c:142

I (0) cpu_start: App cpu up.
I (738) esp_psram: SPI SRAM memory test OK
I (747) cpu_start: Pro cpu start user code
I (747) cpu_start: cpu freq: 240000000 Hz
I (747) cpu_start: Application information:
I (750) cpu_start: Project name:     mtcnn_esp32s3
I (755) cpu_start: App version:      1f8c91f
I (760) cpu_start: Compile time:     Apr 19 2023 14:33:31
I (766) cpu_start: ELF file SHA256:  a41224789833e522...
I (772) cpu_start: ESP-IDF:          v5.0
I (777) heap_init: Initializing. RAM available for dynamic allocation:
I (784) heap_init: At 3FCA5D60 len 000439B0 (270 KiB): D/IRAM
I (791) heap_init: At 3FCE9710 len 00005724 (21 KiB): STACK/DRAM
I (797) heap_init: At 600FE010 len 00001FF0 (7 KiB): RTCRAM
I (804) esp_psram: Adding pool of 8192K of PSRAM memory to heap allocator
I (812) spi_flash: detected chip: generic
I (816) spi_flash: flash io: qio
I (820) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (841) app: Initializing NVS...
I (861) app: Initializing Wi-Fi...
I (861) pp: pp rom version: e7ae62f
I (861) net80211: net80211 rom version: e7ae62f
I (871) wifi:wifi driver task: 3fcedb6c, prio:23, stack:6656, core=0
I (871) system_api: Base MAC address is not set
I (871) system_api: read default base MAC address from EFUSE
I (891) wifi:wifi firmware version: 0d470ef
I (891) wifi:wifi certification version: v7.0
I (891) wifi:config NVS flash: enabled
I (891) wifi:config nano formating: disabled
I (891) wifi:Init data frame dynamic rx buffer num: 32
I (901) wifi:Init management frame dynamic rx buffer num: 32
I (901) wifi:Init management short buffer num: 32
I (911) wifi:Init dynamic tx buffer num: 32
I (911) wifi:Init tx cache buffer num: 32
I (911) wifi:Init static tx FG buffer num: 2
I (921) wifi:Init static rx buffer size: 1600
I (921) wifi:Init static rx buffer num: 10
I (931) wifi:Init dynamic rx buffer num: 32
I (931) wifi_init: rx ba win: 6
I (931) wifi_init: tcpip mbox: 32
I (941) wifi_init: udp mbox: 6
I (941) wifi_init: tcp mbox: 6
I (951) wifi_init: tcp tx win: 5744
I (951) wifi_init: tcp rx win: 5744
I (951) wifi_init: tcp mss: 1440
I (961) wifi_init: WiFi IRAM OP enabled
I (961) wifi_init: WiFi RX IRAM OP enabled
I (971) phy_init: phy_version 503,13653eb,Jun  1 2022,17:47:08
I (1011) wifi:mode : sta (7c:df:a1:e1:d6:4c)
I (1011) wifi:enable tsf
I (1011) app: Connecting to CASAwifi...
I (1011) app: WIFI_EVENT_STA_START
I (1031) wifi:new:<3,1>, old:<1,0>, ap:<255,255>, sta:<3,1>, prof:1
I (1761) wifi:state: init -> auth (b0)
I (1801) wifi:state: auth -> assoc (0)
I (1851) wifi:state: assoc -> run (10)
I (2011) wifi:connected with CASAwifi, aid = 14, channel 3, 40U, bssid = b0:be:76:04:3e:16
I (2011) wifi:security: WPA2-PSK, phy: bgn, rssi: -44
I (2021) wifi:pm start, type: 1

I (2021) wifi:set rx beacon pti, rx_bcn_pti: 0, bcn_timeout: 0, mt_pti: 25000, mt_time: 10000
I (2021) app: WIFI_EVENT_STA_CONNECTED
I (2141) wifi:BcnInt:102400, DTIM:1
W (3001) wifi:idx:0 (ifx:0, b0:be:76:04:3e:16), tid:0, ssn:6, winSize:64
I (4881) esp_netif_handlers: sta ip: 192.168.1.21, mask: 255.255.255.0, gw: 192.168.1.1
I (4881) app: IP_EVENT_STA_GOT_IP
I (13401) app: Initializing SPIFFS...
I (13451) app: Partition size: total: 896321, used: 0
I (13451) file server: Starting HTTP Server on port: '80'
I (13471) s3 ll_cam: DMA Channel=4
I (13471) cam_hal: cam init ok
I (13471) sccb: pin_sda 4 pin_scl 5
I (13471) sccb: sccb_i2c_port=1
I (13481) camera: Detected camera at address=0x30
I (13481) camera: Detected OV2640 camera
I (13481) camera: Camera PID=0x26 VER=0x42 MIDL=0x7f MIDH=0xa2
I (13561) s3 ll_cam: node_size: 3072, nodes_per_line: 1, lines_per_node: 16
I (13561) s3 ll_cam: dma_half_buffer_min:  3072, dma_half_buffer:  9216, lines_per_half_buffer: 48, dma_buffer_size: 27648
I (13571) cam_hal: buffer_size: 27648, half_buffer_size: 9216, node_buffer_size: 3072, node_cnt: 9, total_cnt: 2
I (13581) cam_hal: Allocating 18432 Byte frame buffer in PSRAM
I (13591) cam_hal: Allocating 18432 Byte frame buffer in PSRAM
I (13601) cam_hal: cam config ok
I (13601) ov2640: Set PLL: clk_2x: 1, clk_div: 3, pclk_auto: 1, pclk_div: 8

5.測試

將設備連接到先前配置的網絡后,將相機指向任何人臉。控制臺輸出應該打印這樣的東西。

P-Net time : 65, bboxes : 3
R-Net time : 232, bboxes : 3
O-Net time : 789, bboxes : 3
MTCNN time : 1088, bboxes : 3

要觀察攝像頭捕獲并經過 MTCNN 處理的圖像,您必須訪問以下鏈接http://ip_address/faces.jpg,其中“ip_address”必須替換為分配給設備的 IP 地址。它應該顯示這樣的結果。

pYYBAGSBN1uASXTIAAALN1BQ7ZA931.jpg
?

特征

  • 形狀 輸入圖像:96x96
  • 格式輸入圖像:RGB888
  • 檢測距離:10 cm - 100 cm
  • 響應時間(1 人臉):大約 1000 毫秒

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>