Detección de objetos con el ESP32-CAM y Python

Detecting Objects with the ESP32-CAM and Python

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

  1. Módulo ESP32-CAM
  2. Programador FTDI (Adaptador USB a serial)
  3. Cables de placa y jersey
  4. Python instalado en su computadora (versión 3.6 o posterior)
  5. Bibliotecas: OpenCV, Numpy y solicitudes
  6. Un modelo entrenado (por ejemplo, yolov5, tensorflow lite)

Paso 1: Configuración de la CAM ESP32

1. Flash la cámara ESP32 con CameraWebServer

  1. 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)
  2. 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.
  3. Cargue el ejemplo de CameraWebServer:

    • Ir a Archivo> Ejemplos> ESP32> Cámara> CamerawebServer.
    • Actualizar el ssid y password Variables con sus credenciales Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Seleccionar AI-Pensador ESP32-CAM bajo Herramientas> tablero.
  4. 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

  1. Abra el monitor en serie y establezca la tasa de baudios para 115200.
  2. Encuentre la dirección IP de ESP32-CAM en la salida del monitor en serie (por ejemplo, http://192.168.1.100).
  3. 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:

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

  1. Sistemas de seguridad y vigilancia del hogar
  2. Monitoreo y seguimiento de la vida silvestre
  3. Automatización de fábrica y control de calidad
  4. Proyectos de robótica interactiva
  5. 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!

Escribir un comentario

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.