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
- Modulo ESP32-CAM
- Programmatore FTDI (Adattatore da USB-SERIAL)
- Breadboard e fili jumper
- Python installato sul tuo computer (versione 3.6 o successiva)
- Biblioteche: OpenCv, Numpy e richieste
- Un modello addestrato (ad esempio, yolov5, tensorflow lite)
Passaggio 1: impostare ESP32-CAM
1. Flash l'ESP32-CAM con Camerawebserver
-
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)
-
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.
- Vai a File> Preferenze e aggiungi l'URL:
-
Carica l'esempio della telecamera:
- Vai a File> Esempi> ESP32> Camera> Camerawebserver.
- Aggiorna il
ssid
Epassword
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.
-
Carica il codice su ESP32-CAM. Scollegare IO0 da GND e premere il pulsante di ripristino.
2. Accedi al flusso video ESP32-CAM
- Apri il monitor seriale e imposta il tasso di baud su
115200
. - Trova l'indirizzo IP di ESP32-CAM nell'output del monitor seriale (ad esempio,
http://192.168.1.100
). - 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:
- Scaricalo dal Repository GitHub di Yolov5.
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
- Sistemi di sicurezza e sorveglianza domestica
- Monitoraggio e monitoraggio della fauna selvatica
- Automazione della fabbrica e controllo di qualità
- Progetti di robotica interattiva
- 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!