Detektera föremål med ESP32-CAM och Python

Detecting Objects with the ESP32-CAM and Python

ESP32-CAM är en mångsidig, billig mikrokontroller med en inbyggd kamera, som kan ta bilder och strömma video. När du kombineras med Pythons kraftfulla bildbehandlingsbibliotek kan du implementera objektdetektering för en mängd olika applikationer som övervakning, hemmautomation och robotik. Denna handledning kommer att leda dig genom att använda ESP32-CAM med Python för att utföra objektdetektering.


Vad du behöver

  1. ESP32-CAM-modul
  2. FTDI -programmerare (USB-till-seriell adapter)
  3. Breadboard och jumpertrådar
  4. Python installerad på din dator (version 3.6 eller senare)
  5. Bibliotek: OpenCV, Numpy och förfrågningar
  6. En tränad modell (t.ex. Yolov5, TensorFlow Lite)

Steg 1: Ställa in ESP32-CAM

1. Flash ESP32-CAM med CameraBebServer

  1. Anslut ESP32-CAM till din FTDI-programmerare:

    • GND till GND
    • 5V till VCC
    • U0t till rx
    • U0r till tx
    • Io0 till GND (för blinkande läge)
  2. Öppna Arduino IDE och installera ESP32 -kortpaketet:

    • Gå till Fil> preferenser och lägg till url:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Gå till Verktyg> Board> Boards Manager, Sök efter ESP32 och installera paketet.
  3. Ladda CameraWebServer -exemplet:

    • Gå till Fil> Exempel> ESP32> CAMERA> CAMERABEBSERVERVER.
    • Uppdatera ssid och password Variabler med dina Wi-Fi-referenser:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Välja AI-Thinker ESP32-CAM under Verktyg> Styrelse.
  4. Ladda upp koden till ESP32-CAM. Koppla bort IO0 från GND och tryck på återställningsknappen.

2. Åtkomst till ESP32-CAM-videoströmmen

  1. Öppna seriell monitor och ställ in baudhastigheten på 115200.
  2. Hitta ESP32-CAM: s IP-adress i seriell monitorutgång (t.ex. http://192.168.1.100).
  3. Öppna IP -adressen i en webbläsare för att verifiera liveströmmen.

Steg 2: Ställa in pythonmiljö

1. Installera obligatoriska bibliotek

Installera nödvändiga Python -bibliotek med PIP:

pip install opencv-python numpy requests

2. Verifiera OpenCV -installationen

Kör följande kod för att säkerställa att OpenCV är installerad:

import cv2
print(cv2.__version__)

Steg 3: Fånga videoströmmen

Använd Python för att fånga ramar från videoströmmen ESP32-CAM.

Exempelkod: fånga ramar

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

Steg 4: Lägga till objektdetektering

Integrera objektdetektering i den fångade videoströmmen med hjälp av en förutbildad modell, till exempel YOLOV5.

1. Ladda ner en förutbildad modell

Du kan använda en förutbildad YOLOV5-modell:

2. Exempelkod: Objektdetektering med 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()

Steg 5: Förbättra objektdetektering

  • Anpassade modeller: Träna din egen YOLOV5 -modell för specifika objekt med plattformar som Roboflow eller Google Colab.
  • Kantbehandling: Distribuera lätta modeller som TensorFlow Lite för bearbetning på enheten.
  • Integration: Skicka detekteringsresultat till en server eller utlösa åtgärder i IoT -system.

Tillämpningar av ESP32-CAM-objektdetektering

  1. Hemsäkerhets- och övervakningssystem
  2. Djurlivsövervakning och spårning
  3. Fabriksautomation och kvalitetskontroll
  4. Interaktiva robotprojekt
  5. Smart dörrklocka med ansiktsigenkänning

Felsökning

  • Strömma latens: Minska upplösningen eller bildhastigheten för smidigare strömning.
  • Anslutningsfrågor: Se till att ESP32-CAM och din dator finns i samma nätverk.
  • Modell noggrannhet: Finjustera den förutbildade modellen för bättre resultat på ditt datasätt.

Slutsats

Att kombinera ESP32-CAM med Python öppnar upp kraftfulla möjligheter för objektdetektering och realtidsvideobehandling. Genom att följa den här guiden kan du integrera objektdetektering i dina projekt för smarta applikationer. Experimentera med olika modeller och optimeringar för att skapa avancerade och effektiva system!

Lämna en kommentar

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.