Detectar objetos com o ESP32-CAM e Python

Detecting Objects with the ESP32-CAM and Python

O ESP32-CAM é um microcontrolador versátil e de baixo custo com uma câmera embutida, capaz de capturar imagens e streaming de vídeo. Quando combinado com as poderosas bibliotecas de processamento de imagens do Python, você pode implementar a detecção de objetos para uma variedade de aplicativos, como vigilância, automação residencial e robótica. Este tutorial o guiará usando o ESP32-CAM com o Python para executar a detecção de objetos.


O que você precisará

  1. Módulo ESP32-CAM
  2. Programador FTDI (Adaptador USB-Série)
  3. Fios de pão e jumper
  4. Python instalado no seu computador (versão 3.6 ou mais tarde)
  5. Bibliotecas: OpenCV, Numpy e solicitações
  6. Um modelo treinado (por exemplo, Yolov5, tensorflow lite)

Etapa 1: Configurando o ESP32-CAM

1. Flash o Esp32-Cam com CamerawebServer

  1. Conecte o ESP32-CAM ao seu programador FTDI:

    • GND para GND
    • 5V a VCC
    • U0t para rx
    • U0r para tx
    • Io0 para gnd (para o modo piscando)
  2. Abra o Arduino IDE e instale o pacote da placa ESP32:

    • Vá para Arquivo> Preferências e adicione o URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Vá para Ferramentas> Board> Boards Manager, pesquise esp32 e instale o pacote.
  3. Carregue o exemplo de CamerawebServer:

    • Vá para Arquivo> Exemplos> Esp32> Câmera> CamerawebServer.
    • Atualize o ssid e password variáveis ​​com suas credenciais Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Selecione Ai-Thinker ESP32-CAM sob Ferramentas> Placa.
  4. Carregue o código para o ESP32-CAM. Desconecte o IO0 do GND e pressione o botão Redefinir.

2. Acesse o fluxo de vídeo esp32-cam

  1. Abra o monitor serial e defina a taxa de transmissão para 115200.
  2. Encontre o endereço IP da ESP32-CAM na saída do monitor serial (por exemplo, http://192.168.1.100).
  3. Abra o endereço IP em um navegador para verificar a transmissão ao vivo.

Etapa 2: Configuração do ambiente Python

1. Instale as bibliotecas necessárias

Instale as bibliotecas Python necessárias usando PIP:

pip install opencv-python numpy requests

2. Verifique a instalação do OpenCV

Execute o código a seguir para garantir que o OpenCV esteja instalado:

import cv2
print(cv2.__version__)

Etapa 3: captura o fluxo de vídeo

Use Python para capturar quadros do fluxo de vídeo ESP32-CAM.

Exemplo Código: Captura de quadros

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

Etapa 4: Adicionando detecção de objetos

Integre a detecção de objetos no fluxo de vídeo capturado usando um modelo pré-treinado, como Yolov5.

1. Baixe um modelo pré-treinado

Você pode usar um modelo YOLOV5 pré-treinado:

2. Código de exemplo: Detecção de objetos com 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()

Etapa 5: Aprimorando a detecção de objetos

  • Modelos personalizados: Treine seu próprio modelo YOLOV5 para objetos específicos usando plataformas como Roboflow ou Google Colab.
  • Processamento de borda: Implante modelos leves como o TensorFlow Lite para processamento no dispositivo.
  • Integração: Envie os resultados da detecção para um servidor ou acionar ações nos sistemas de IoT.

Aplicações da detecção de objeto ESP32-CAM

  1. Sistemas de segurança e vigilância domésticos
  2. Monitoramento e rastreamento da vida selvagem
  3. Automação de fábrica e controle de qualidade
  4. Projetos de robótica interativa
  5. Campainha inteligente com reconhecimento facial

Solução de problemas

  • Latência do fluxo: Reduza a resolução ou a taxa de quadros para o streaming mais suave.
  • Problemas de conexão: Verifique se o ESP32-CAM e seu computador estão na mesma rede.
  • Precisão do modelo: Tune o modelo pré-treinado para obter melhores resultados no seu conjunto de dados.

Conclusão

A combinação do ESP32-CAM com Python abre possibilidades poderosas para detecção de objetos e processamento de vídeo em tempo real. Seguindo este guia, você pode integrar a detecção de objetos em seus projetos para aplicativos inteligentes. Experimente modelos e otimizações diferentes para criar sistemas avançados e eficientes!

Deixe um comentário

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.