Wykrywanie obiektów za pomocą ESP32-CAM i Python

Detecting Objects with the ESP32-CAM and Python

ESP32-CAM to wszechstronny, tani mikrokontroler z wbudowanym aparatem, zdolnym do przechwytywania obrazów i przesyłania strumieniowego wideo. W połączeniu z potężnymi bibliotekami przetwarzania obrazu Pythona możesz zaimplementować wykrywanie obiektów dla różnych aplikacji, takich jak nadzór, automatyzacja domowa i robotyka. Ten samouczek poprowadzi Cię przez użycie ESP32-CAM z Pythonem do wykrywania obiektów.


Czego będziesz potrzebować

  1. Moduł ESP32-CAM
  2. Programista FTDI (Adapter USB-Serial)
  3. Druty chleba i skoczków
  4. Zainstalowany Python na komputerze (wersja 3.6 lub nowsza)
  5. Biblioteki: OpenCV, Numpy i żądania
  6. Wyszkolony model (np. Yolov5, Tensorflow Lite)

Krok 1: Konfigurowanie ESP32-CAM

1. Flash the ESP32-CAM za pomocą CamerAWESServer

  1. Podłącz ESP32-CAM z programistą FTDI:

    • GND do GND
    • 5V do VCC
    • U0T do Rx
    • U0R do TX
    • IO0 do GND (dla trybu flashowania)
  2. Otwórz Arduino IDE i zainstaluj pakiet płyty ESP32:

    • Idź do Plik> Preferencje i dodaj adres URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Idź do Narzędzia> Board> Menedżer tablic, Wyszukaj ESP32 i zainstaluj pakiet.
  3. Załaduj przykład CamerAWebServer:

    • Idź do Plik> Przykłady> ESP32> Camera> CamerAWebServer.
    • Zaktualizować ssid I password Zmienne z twoimi poświadczeniami Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Wybierać AI-Thinker ESP32-CAM pod Narzędzia> Płyta.
  4. Prześlij kod do ESP32-CAM. Odłącz IO0 od GND i naciśnij przycisk resetowania.

2. Dostęp do strumienia wideo ESP32-CAM

  1. Otwórz monitor szeregowy i ustaw wskaźnik BAUD 115200.
  2. Znajdź adres IP ESP32-CAM w wyjściu Monitora szeregowego (np. http://192.168.1.100).
  3. Otwórz adres IP w przeglądarce, aby zweryfikować transmisję na żywo.

Krok 2: Konfigurowanie środowiska Pythona

1. Zainstaluj wymagane biblioteki

Zainstaluj niezbędne biblioteki Python za pomocą PIP:

pip install opencv-python numpy requests

2. Sprawdź instalację OpenCV

Uruchom następujący kod, aby upewnić się, że OpenCV jest zainstalowany:

import cv2
print(cv2.__version__)

Krok 3: przechwytywanie strumienia wideo

Użyj Pythona, aby przechwytywać ramki ze strumienia wideo ESP32-CAM.

Przykładowy kod: przechwytywanie ramek

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()

Krok 4: Dodanie wykrywania obiektów

Zintegruj wykrywanie obiektów z przechwyconym strumieniem wideo za pomocą modelu wstępnie wyszkolonego, takiego jak Yolov5.

1. Pobierz wstępnie wyszkolony model

Możesz użyć wstępnie wyszkolonego modelu YOLOV5:

2. Przykładowy kod: Wykrywanie obiektu za pomocą 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()

Krok 5: Ulepszanie wykrywania obiektów

  • Modele niestandardowe: Przechodź własny model YOLOV5 dla określonych obiektów za pomocą platform takich jak Roboflow lub Google Colab.
  • Przetwarzanie krawędzi: Wdrażaj lekkie modele, takie jak TensorFlow Lite do przetwarzania na urządzeniu.
  • Integracja: Wyślij wyniki wykrywania do serwera lub czynności wyzwalają w systemach IoT.

Zastosowania wykrywania obiektów ESP32-CAM

  1. Systemy bezpieczeństwa i nadzoru domu
  2. Monitorowanie i śledzenie dzikiej przyrody
  3. Automatyzacja fabryki i kontrola jakości
  4. Projekty interaktywne robotyki
  5. Inteligentny dzwonek z rozpoznawaniem twarzy

Rozwiązywanie problemów

  • Opóźnienie strumienia: Zmniejsz rozdzielczość lub szybkość klatek na sekundę dla gładszego przesyłania strumieniowego.
  • Problemy z połączeniem: Upewnij się, że ESP32-CAM i komputer są w tej samej sieci.
  • Dokładność modelu: Dostosuj wstępnie wyszkolony model, aby uzyskać lepsze wyniki w zestawie danych.

Wniosek

Połączenie ESP32-CAM z Pythonem otwiera potężne możliwości wykrywania obiektów i przetwarzania wideo w czasie rzeczywistym. Postępując zgodnie z tym przewodnikiem, możesz zintegrować wykrywanie obiektów z projektami dla inteligentnych aplikacji. Eksperymentuj z różnymi modelami i optymalizacjami, aby stworzyć zaawansowane i wydajne systemy!

Zostaw komentarz

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.