Objecten detecteren met de ESP32-CAM en Python

Detecting Objects with the ESP32-CAM and Python

De ESP32-CAM is een veelzijdige, goedkope microcontroller met een ingebouwde camera, in staat om afbeeldingen te maken en video te streamen. In combinatie met de krachtige beeldverwerkingsbibliotheken van Python, kunt u objectdetectie implementeren voor een verscheidenheid aan applicaties zoals surveillance, thuisautomatisering en robotica. Deze zelfstudie zal u begeleiden door de ESP32-CAM met Python te gebruiken om objectdetectie uit te voeren.


Wat u nodig hebt

  1. ESP32-cam module
  2. FTDI -programmeur (USB-naar-serial adapter)
  3. Breadboard en jumper draden
  4. Python geïnstalleerd Op uw computer (versie 3.6 of later)
  5. Bibliotheken: OpenCV, Numpy en verzoeken
  6. Een getraind model (bijv. Yolov5, TensorFlow Lite)

Stap 1: het instellen van de ESP32-CAM

1. Flits de ESP32-CAM met Camerawebserver

  1. Verbind de ESP32-CAM met uw FTDI-programmeur:

    • GND naar GND
    • 5V naar VCC
    • U0t naar rx
    • U0r naar tx
    • IO0 naar GND (voor knippermodus)
  2. Open de Arduino IDE en installeer het ESP32 -bordpakket:

    • Gaan naar Bestand> Voorkeuren en voeg de URL toe:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Gaan naar Tools> Board> Boards Manager, zoek naar ESP32 en installeer het pakket.
  3. Laad het voorbeeld van de cameraweberver:

    • Gaan naar Bestand> Voorbeelden> ESP32> Camera> CamerAWEBServer.
    • Update de ssid En password Variabelen met uw Wi-Fi-referenties:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Uitkiezen AI-DENTER ESP32-CAM onder Tools> Board.
  4. Upload de code naar de ESP32-CAM. Koppel IO0 los van GND en druk op de resetknop.

2.

  1. Open de seriële monitor en stel het baudrate in op 115200.
  2. Zoek het IP-adres van de ESP32-CAM in de seriële monitoruitvoer (bijv. http://192.168.1.100).
  3. Open het IP -adres in een browser om de livestream te verifiëren.

Stap 2: Python -omgeving opzetten

1. Installeer de vereiste bibliotheken

Installeer de benodigde Python -bibliotheken met behulp van PIP:

pip install opencv-python numpy requests

2. Controleer OpenCV -installatie

Voer de volgende code uit om ervoor te zorgen dat OpenCV is geïnstalleerd:

import cv2
print(cv2.__version__)

Stap 3: De videostream vastleggen

Gebruik Python om frames van de ESP32-CAM-videostream vast te leggen.

Voorbeeldcode: frames vastleggen

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

Stap 4: Objectdetectie toevoegen

Integreer objectdetectie in de vastgelegde videostream met behulp van een vooraf opgeleid model, zoals YOLOV5.

1. Download een vooraf opgeleid model

U kunt een vooraf getraind YOLOV5-model gebruiken:

2. Voorbeeldcode: objectdetectie met 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()

Stap 5: Verbetering van het objectdetectie

  • Aangepaste modellen: Train uw eigen YOLOV5 -model voor specifieke objecten met platforms zoals Roboflow of Google Colab.
  • Randverwerking: Implementeer lichtgewicht modellen zoals TensorFlow Lite voor verwerking bij de apparaten.
  • Integratie: Stuur detectieresultaten naar een server of acties acties in IoT -systemen.

Toepassingen van ESP32-cam objectdetectie

  1. Thuisbeveiliging en bewakingssystemen
  2. Wildlife monitoring en tracking
  3. Fabrieksautomatisering en kwaliteitscontrole
  4. Interactieve robotica -projecten
  5. Slimme deurbel met gezichtsherkenning

Problemen oplossen

  • Stream latentie: Verminder de resolutie of framesnelheid voor soepelere streaming.
  • Verbindingsproblemen: Zorg ervoor dat de ESP32-CAM en uw computer zich op hetzelfde netwerk bevinden.
  • Modelnauwkeurigheid: Stel het vooraf opgeleide model aan voor betere resultaten op uw dataset.

Conclusie

Het combineren van de ESP32-CAM met Python opent krachtige mogelijkheden voor objectdetectie en realtime videoverwerking. Door deze handleiding te volgen, kunt u objectdetectie integreren in uw projecten voor slimme applicaties. Experimenteer met verschillende modellen en optimalisaties om geavanceerde en efficiënte systemen te creëren!

Laat een reactie achter

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.