ESP32-CAM (arduino)影像伺服器及臉部辨識教學原始檔Video Stream Server

ESP32-CAM是一個ESP32基礎的開發版,除了ESP32本身內建WIFI及藍芽BLE之外,再加上OV2640兩百萬畫素相機模組、TF卡、閃光燈模組,所組成的開發版。

我的ESP32實做書籍:我出書了 ESP32 物聯網專題
博客來網址:https://www.books.com.tw/products/0010901195


操作前準備材料

送你這麼多東西,價格卻想像不到的便宜。露天賣場:https://goods.ruten.com.tw/item/show?21910115309507

ESP32-CAM外觀及規格

另外還需要準備一個USB TTL工具,我是採用CH340 (HW-597)模組
露天賣場:https://goods.ruten.com.tw/item/show?21618647811364

USB TTL工具CH340 (HW-597)模組

如果你用的是另一款 Prolific USB-to-Serial TTL
請參考這篇的驅動安裝: https://youyouyou.pixnet.net/blog/post/119643042

Prolific USB-to-Serial TTL版本

安裝Arduino IDE

1. 首先至下載arduino IDE

至原廠網站下載最新開發套件ESP32-CAM需要最新的核心程式,建議下載1.8.8最新版(update 20210327 最新版為1.8.13),此外我建議使用zip file選項,解壓縮即可使用,不需要安裝,未來電腦更新或升級也可以直接開啟,甚至放在USB都可以使用。

下載後,直接解壓縮到C:或D:底下都可以使用,建議不要使用中文目錄。

arduino IDE 下載網站

2. 安裝ESP32開發版套件

開啟Arduino IDE後,選擇file/preferences,出現preferences視窗,在addition boards manager URL輸入以下文字後,按OK。

https://dl.espressif.com/dl/package_esp32_index.json
preferences視窗設定

接下來到Tools,選擇Board,並在右側開啟開發版管理員

開啟開板管理員(Boards manager)

在開發版管理員中輸入ESP32,找到ESP32套件後,點選install安裝。
這裡說明一下,有許多人反應安裝1.0.6套件,無法進行臉部辨識,因此只能先建議安裝1.0.4版本。
(下圖是舊版,請選擇1.0.4較為正常)

下載並安裝完畢後,點選close。

安裝ESP32套件
EAP32套件下載完成畫面

最後點選Tools/Board,在右側往下拉,就可以找到ESP32系列的板子,其中這次ESP32-CAM是使用ESP32 Wrover Module。

選擇ESP32開發板型號

選擇後,ESP32-CAM開發版的屬性則多了以下幾個,大部分都不用更動,除了Port最後安裝完驅動程式後在選擇即可。

保持開發板預設屬性

安裝USB TTL及驅動程式

將USB接在電腦上,並安裝驅動程式,不同類型USB有不同驅動程式,請自行下載安裝。

安裝完畢後,可在電腦的裝置管理員中查看到com port的數字,本例為COM31。

USB TTL
裝置管理員中查看com port數字

到Arduino IDE中指定COM PORT的編號。

Arduino IDE中選擇COM Prot號碼

連接USBTTL及ESP32-CAM

找一個麵包版,將ESP32-CAM與USBTTL連接,其連線方式參考圖▼。圖中綠線IO0<->GND則是在燒錄時才插上,平常保持斷開。

ESP32-CAM與USBTTL腳位說明
ESP32-CAM與USBTTL實際連接圖

修改範例程式

上圖安裝完成後,就可以載入範例video stream server的範例程式
▼ 在範例程式中選擇ESP32/Camera/CameraWebSerser

載入video stream server範例程式

▼ 將第10行//#define CAMERA_MODEL_WROVER_KIT註解起來,
將第12行#define CAMERA_MODEL_AI_THINKER的註解刪除,如下圖,並在14,15行修改你的WIFI設定

修改範例程式碼畫面

▼ 由於這個程式包含stream server及臉部辨識,因此檔案較大,將燒錄區域改成Huge APP(3MB No OTA)

將燒錄區域改成Huge APP(3MB No OTA)

上傳程式碼步驟

  1. 開啟序列通訊,要查看訊息用
  2. 拿一條母母線對接IO0+GND後,按RST,此時會進入下載模式,序列通訊會跳出以下視窗waiting for download
序列通訊下載畫面
  1. 在Arduino IDE上按上傳按鈕,等候上傳
  2. 上傳完畢後,Arduino IDE下方的訊息欄會出現 Hard restting by RTS pin
程式碼上傳完成畫面
  1. 再按一次RST
  2. 就可以觀察esp32cam的執行狀態了

另外注意,ESP32用電量較高,因此如果出現brownout的錯誤時,代表請給予較好的線材或者USB接口(建議USB3.0)

另外解決的方案可以強制關閉電流偵測,參考:https://youyouyou.pixnet.net/blog/post/120729180

開機後出現brownout錯誤畫面

ESP32-CAM stream 效能評估

▼ 一但連上線之後,就會顯示ESP32拿到的IP位置,本例為192.168.1.133

通訊序列中IP顯示畫面

▼ 輸入在瀏覽器內,即可獲得ESP32所建立的stream server畫面

瀏覽器與ESP32-CAM連線

接下來只要按下Start Stream就可以獲得串流,按Get Still就獲得照片

1. 320×240效能評估

由於每個人的環境不太相同(WIFI、電力的穩定),這裡的效能評估只作為參考,根據Serial提供的報表,在320×240的時候,約在20-30fps之間

▼ 我覺得這樣的效果非常好,一般影像辨識不須太大的影像,而傳輸速度也非常好

320×240串流效能評估

2. 640×480效能評估

▼ 根據Serial提供的報表,在640×480的時候,約在10-20fps之間

640×480串流效能評估

3. 1024×768效能評估

▼ 根據Serial提供的報表,在1024×768的時候,約在3-10fps之間

1024×768串流效能評估

4. 1280×1024效能評估

▼ 根據Serial提供的報表,在1280×1024的時候,約在落在5fps以下 .

1280×1024串流效能評估

5. 臉部偵測功能

▼ 臉部辨識,打開下方的Face Detection,就可以開啟臉部偵測的功能,一旦偵測到臉部,就會以黃色框框。至於他的效能…就有點 。

臉部偵測與驗證功能

6. 臉部驗證

▼ 如果你想要作到,看到臉就開啟門,或者打開蜂鳴器等功能,可以在app_httpd.cpp頁簽中找到副程式static void draw_face_boxes,你可以把需要的功能自己加到裡面。

我看程式裡面說可以存到七張臉,就可以做臉部驗證開門,這部份就有賴其他網友幫忙測試 。

臉部驗證程式碼頁簽位置

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *