ESP32-CAMおよびPythonでオブジェクトを検出します

Detecting Objects with the ESP32-CAM and Python

ESP32-CAMは、画像をキャプチャしてビデオをキャプチャできるカメラが組み込まれた汎用性の高い低コストのマイクロコントローラーです。 Pythonの強力な画像処理ライブラリと組み合わせると、監視、ホームオートメーション、ロボット工学など、さまざまなアプリケーションにオブジェクト検出を実装できます。このチュートリアルでは、Pythonを使用してESP32-CAMを使用してオブジェクト検出を実行することをガイドします。


あなたが必要とするもの

  1. ESP32-CAMモジュール
  2. FTDIプログラマー (USBからシリアルアダプター)
  3. ブレッドボードとジャンパーワイヤ
  4. Pythonインストール コンピューター(バージョン3.6以降)
  5. 図書館: opencv、numpy、およびリクエスト
  6. 訓練されたモデル (例えば、Yolov5、Tensorflow Lite)

ステップ1:ESP32-CAMのセットアップ

1. camerawebserverでesp32-camをフラッシュします

  1. ESP32-CAMをFTDIプログラマに接続します。

    • GNDからGNDへ
    • 5VからVCC
    • u0tからrx
    • U0RからTX
    • IO0からGNDへ (フラッシュモード用)
  2. Arduino IDEを開き、ESP32ボードパッケージをインストールします。

    • 行きます ファイル>設定 URLを追加します:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • 行きます ツール>ボード>ボードマネージャー、ESP32を検索し、パッケージをインストールします。
  3. CamerAwebserverの例をロードします。

    • 行きます ファイル>例> ESP32>カメラ> CamerAwebserver.
    • 更新します ssid そして password Wi-Fi資格情報を含む変数:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • 選択します ai-thinker esp32-camツール>ボード.
  4. コードをESP32-CAMにアップロードします。 IO0をGNDから切断し、リセットボタンを押します。

2。ESP32-CAMビデオストリームにアクセスします

  1. シリアルモニターを開き、ボーレートをに設定します 115200.
  2. シリアルモニター出力でESP32-CAMのIPアドレスを見つけます(例: http://192.168.1.100).
  3. ブラウザでIPアドレスを開き、ライブストリームを確認します。

ステップ2:Python環境のセットアップ

1.必要なライブラリをインストールします

PIPを使用して必要なPythonライブラリをインストールします。

pip install opencv-python numpy requests

2。OPENCVのインストールを確認します

次のコードを実行して、OPENCVがインストールされていることを確認してください。

import cv2
print(cv2.__version__)

ステップ3:ビデオストリームのキャプチャ

Pythonを使用して、ESP32-CAMビデオストリームからフレームをキャプチャします。

例コード:キャプチャフレーム

import cv2
import requests
import numpy as np

# ESP32-CAM URL
url = "http://192.168.1.100/capture"

while True:
    # Capture image from ESP32-CAM
    img_resp = requests.get(url)
    img_array = np.array(bytearray(img_resp.content), dtype=np.uint8)
    frame = cv2.imdecode(img_array, -1)

    # Display the frame
    cv2.imshow("ESP32-CAM", frame)

    # Exit on pressing 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

ステップ4:オブジェクト検出の追加

Yolov5などの事前に訓練されたモデルを使用して、キャプチャされたビデオストリームにオブジェクトの検出を統合します。

1.事前に訓練されたモデルをダウンロードします

事前に訓練されたYolov5モデルを使用できます。

2。例コード:Yolov5を使用したオブジェクト検出

import cv2
import requests
import numpy as np
import torch

# Load YOLOv5 model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# ESP32-CAM URL
url = "http://192.168.1.100/capture"

while True:
    # Capture image from ESP32-CAM
    img_resp = requests.get(url)
    img_array = np.array(bytearray(img_resp.content), dtype=np.uint8)
    frame = cv2.imdecode(img_array, -1)

    # Perform object detection
    results = model(frame)
    detections = results.xyxy[0]  # Bounding boxes

    # Draw bounding boxes
    for *xyxy, conf, cls in detections:
        label = f"{model.names[int(cls)]} {conf:.2f}"
        cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (255, 0, 0), 2)
        cv2.putText(frame, label, (int(xyxy[0]), int(xyxy[1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

    # Display the frame
    cv2.imshow("ESP32-CAM Object Detection", frame)

    # Exit on pressing 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

ステップ5:オブジェクト検出の強化

  • カスタムモデル: RoboflowやGoogle Colabなどのプラットフォームを使用して、特定のオブジェクト用の独自のYolov5モデルをトレーニングします。
  • エッジ処理: Tensorflow Liteなどの軽量モデルを展開して、デバイス上の処理を行います。
  • 統合: 検出結果をサーバーに送信するか、IoTシステムでアクションをトリガーします。

ESP32-CAMオブジェクト検出のアプリケーション

  1. ホームセキュリティおよび監視システム
  2. 野生生物の監視と追跡
  3. 工場の自動化と品質管理
  4. インタラクティブロボットプロジェクト
  5. 顔認識を備えたスマートドアベル

トラブルシューティング

  • ストリームレイテンシ: スムーズなストリーミングの解像度またはフレームレートを削減します。
  • 接続の問題: ESP32-CAMとコンピューターが同じネットワーク上にあることを確認してください。
  • モデルの精度: データセットでより良い結果を得るために、事前に訓練されたモデルを微調整します。

結論

ESP32-CAMとPythonを組み合わせることで、オブジェクト検出とリアルタイムビデオ処理の強力な可能性が開かれます。このガイドに従うことにより、スマートアプリケーションのプロジェクトにオブジェクト検出を統合できます。さまざまなモデルと最適化を試して、高度で効率的なシステムを作成してください!

コメントを残す

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.