Rilevare oggetti con ESP32-CAM e Python

Detecting Objects with the ESP32-CAM and Python

ESP32-CAM è un microcontrollore versatile a basso costo con una fotocamera integrata, in grado di catturare immagini e video in streaming. Se combinato con le potenti librerie di elaborazione delle immagini di Python, è possibile implementare il rilevamento di oggetti per una varietà di applicazioni come la sorveglianza, l'automazione domestica e la robotica. Questo tutorial ti guiderà utilizzando ESP32-CAM con Python per eseguire il rilevamento degli oggetti.


Cosa avrai bisogno

  1. Modulo ESP32-CAM
  2. Programmatore FTDI (Adattatore da USB-SERIAL)
  3. Breadboard e fili jumper
  4. Python installato sul tuo computer (versione 3.6 o successiva)
  5. Biblioteche: OpenCv, Numpy e richieste
  6. Un modello addestrato (ad esempio, yolov5, tensorflow lite)

Passaggio 1: impostare ESP32-CAM

1. Flash l'ESP32-CAM con Camerawebserver

  1. Collega ESP32-CAM al programmatore FTDI:

    • GND a GND
    • 5v a VCC
    • U0T a rx
    • U0R a TX
    • Io0 a GND (per la modalità lampeggiante)
  2. Apri l'IDE Arduino e installa il pacchetto scheda ESP32:

    • Vai a File> Preferenze e aggiungi l'URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Vai a Strumenti> Scheda> Manager delle schede, Cerca ESP32 e installa il pacchetto.
  3. Carica l'esempio della telecamera:

    • Vai a File> Esempi> ESP32> Camera> Camerawebserver.
    • Aggiorna il ssid E password Variabili con le tue credenziali Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Selezionare Ai-Phinker ESP32-CAM Sotto Strumenti> Scheda.
  4. Carica il codice su ESP32-CAM. Scollegare IO0 da GND e premere il pulsante di ripristino.

2. Accedi al flusso video ESP32-CAM

  1. Apri il monitor seriale e imposta il tasso di baud su 115200.
  2. Trova l'indirizzo IP di ESP32-CAM nell'output del monitor seriale (ad esempio, http://192.168.1.100).
  3. Apri l'indirizzo IP in un browser per verificare lo streaming live.

Passaggio 2: impostare l'ambiente Python

1. Installa le librerie richieste

Installa le librerie Python necessarie utilizzando PIP:

pip install opencv-python numpy requests

2. Verifica l'installazione di OpenCV

Esegui il seguente codice per garantire l'installazione di OpenCV:

import cv2
print(cv2.__version__)

Passaggio 3: catturare il flusso video

Usa Python per acquisire frame dal flusso video ESP32-CAM.

Codice di esempio: cattura dei frame

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

Passaggio 4: aggiunta di rilevamento degli oggetti

Integra il rilevamento di oggetti nel flusso video catturato utilizzando un modello pre-addestrato, come YOLOV5.

1. Scarica un modello pre-allenato

Puoi utilizzare un modello YOLOV5 pre-addestrato:

2. Codice di esempio: rilevamento di oggetti con 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()

Passaggio 5: miglioramento del rilevamento degli oggetti

  • Modelli personalizzati: Allena il tuo modello YOLOV5 per oggetti specifici utilizzando piattaforme come Roboflow o Google Colab.
  • Elaborazione dei bordi: Distribuire modelli leggeri come Tensorflow Lite per l'elaborazione in dispositivo.
  • Integrazione: Invia i risultati di rilevamento a un server o attiva azioni nei sistemi IoT.

Applicazioni del rilevamento di oggetti ESP32-CAM

  1. Sistemi di sicurezza e sorveglianza domestica
  2. Monitoraggio e monitoraggio della fauna selvatica
  3. Automazione della fabbrica e controllo di qualità
  4. Progetti di robotica interattiva
  5. Campanello intelligente con riconoscimento facciale

Risoluzione dei problemi

  • Latenza di streaming: Ridurre la risoluzione o la frequenza dei frame per lo streaming più fluido.
  • Problemi di connessione: Assicurati che ESP32-CAM e il tuo computer siano sulla stessa rete.
  • Accuratezza del modello: Attira il modello pre-allenato per risultati migliori sul set di dati.

Conclusione

La combinazione di ESP32-CAM con Python apre potenti possibilità per il rilevamento degli oggetti e l'elaborazione video in tempo reale. Seguendo questa guida, è possibile integrare il rilevamento di oggetti nei progetti per applicazioni intelligenti. Sperimenta diversi modelli e ottimizzazioni per creare sistemi avanzati ed efficienti!

Lascia un commento

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.