El ESP32-CAM es un microcontrolador versátil de bajo costo con una cámara incorporada, capaz de capturar imágenes y transmisión de video. Cuando se combina con las potentes bibliotecas de procesamiento de imágenes de Python, puede implementar la detección de objetos para una variedad de aplicaciones como vigilancia, automatización del hogar y robótica. Este tutorial lo guiará a través del uso de la cámara ESP32 con Python para realizar la detección de objetos.
Lo que necesitarás
- Módulo ESP32-CAM
- Programador FTDI (Adaptador USB a serial)
- Cables de placa y jersey
- Python instalado en su computadora (versión 3.6 o posterior)
- Bibliotecas: OpenCV, Numpy y solicitudes
- Un modelo entrenado (por ejemplo, yolov5, tensorflow lite)
Paso 1: Configuración de la CAM ESP32
1. Flash la cámara ESP32 con CameraWebServer
-
Conecte la cámara ESP32 a su programador FTDI:
- GND a GND
- 5V a VCC
- U0t a rx
- U0R a TX
- IO0 a GND (para modo de flasheo)
-
Abra el IDE Arduino e instale el paquete de placa ESP32:
- Ir a Archivo> Preferencias y agregue la URL:
https://dl.espressif.com/dl/package_esp32_index.json
- Ir a Herramientas> Board> Board Manager, busque ESP32 e instale el paquete.
- Ir a Archivo> Preferencias y agregue la URL:
-
Cargue el ejemplo de CameraWebServer:
- Ir a Archivo> Ejemplos> ESP32> Cámara> CamerawebServer.
- Actualizar el
ssid
ypassword
Variables con sus credenciales Wi-Fi:const char* ssid = "Your_SSID"; const char* password = "Your_PASSWORD";
- Seleccionar AI-Pensador ESP32-CAM bajo Herramientas> tablero.
-
Cargue el código a la cámara ESP32. Desconecte IO0 de GND y presione el botón RESET.
2. Acceda a la transmisión de video ESP32-CAM
- Abra el monitor en serie y establezca la tasa de baudios para
115200
. - Encuentre la dirección IP de ESP32-CAM en la salida del monitor en serie (por ejemplo,
http://192.168.1.100
). - Abra la dirección IP en un navegador para verificar la transmisión en vivo.
Paso 2: Configuración de Python Environment
1. Instale bibliotecas requeridas
Instale las bibliotecas de Python necesarias usando PIP:
pip install opencv-python numpy requests
2. Verifique la instalación de OpenCV
Ejecute el siguiente código para asegurarse de que OpenCV esté instalado:
import cv2
print(cv2.__version__)
Paso 3: Capturar la transmisión de video
Use Python para capturar marcos de la transmisión de video ESP32-CAM.
Código de ejemplo: captura de marcos
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()
Paso 4: Agregar detección de objetos
Integre la detección de objetos en la transmisión de video capturada utilizando un modelo previamente capacitado, como Yolov5.
1. Descargue un modelo previamente capacitado
Puede usar un modelo YOLOV5 previamente capacitado:
- Descargarlo desde el Repositorio de yolov5 github.
2. Código de ejemplo: detección de objetos 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()
Paso 5: Mejora de la detección de objetos
- Modelos personalizados: Entrene su propio modelo Yolov5 para objetos específicos utilizando plataformas como RoboFlow o Google Colab.
- Procesamiento de borde: Implemente modelos livianos como TensorFlow Lite para el procesamiento en el dispositivo.
- Integración: Envíe los resultados de detección a un servidor o active acciones en sistemas IoT.
Aplicaciones de la detección de objetos ESP32-CAM
- Sistemas de seguridad y vigilancia del hogar
- Monitoreo y seguimiento de la vida silvestre
- Automatización de fábrica y control de calidad
- Proyectos de robótica interactiva
- Timera inteligente con reconocimiento facial
Solución de problemas
- Latencia de la corriente: Reduzca la resolución o la velocidad de cuadro para una transmisión más suave.
- Problemas de conexión: Asegúrese de que el ESP32-CAM y su computadora estén en la misma red.
- Precisión del modelo: Atrae el modelo previamente capacitado para obtener mejores resultados en su conjunto de datos.
Conclusión
La combinación de la cámara ESP32 con Python abre potentes posibilidades para la detección de objetos y el procesamiento de videos en tiempo real. Siguiendo esta guía, puede integrar la detección de objetos en sus proyectos para aplicaciones inteligentes. ¡Experimente con diferentes modelos y optimizaciones para crear sistemas avanzados y eficientes!