Detectando objetos com o ESP32-CAM

Detecting Objects with the ESP32-CAM

O ESP32-CAM é um microcontrolador poderoso e de baixo custo, com um módulo de câmera embutido, capaz de capturar imagens e transmitir vídeo ao vivo. Ao alavancar seus recursos de processamento e integrar bibliotecas ou estruturas de aprendizado de máquina externas, você pode ativar a detecção de objetos diretamente na cam. Este tutorial o guiará através da configuração de detecção básica de objetos com o ESP32-CAM usando modelos pré-treinados.


O que você precisará

  1. Módulo ESP32-CAM
  2. Programador FTDI (adaptador USB para serial)
  3. Fios de jumper
  4. Pão de pão (opcional)
  5. Um computador com o Arduino IDE instalado
  6. Impulso de borda ou Lite Tensorflow para modelos de detecção de objetos

Etapa 1: Configurando o Arduino IDE

1. Instale o pacote da placa ESP32

  1. Abra o Arduino IDE.

  2. Vá para Arquivo > Preferências.

  3. No campo "URLs adicionais do gerente do conselho", adicione:

    https://dl.espressif.com/dl/package_esp32_index.json
    
  4. Clique OK.

  5. Vá para Ferramentas > Quadro > Gerente de placas.

  6. Pesquise "ESP32" e instale o pacote pelos sistemas Espressif.

2. Instale as bibliotecas necessárias

  • Instale a biblioteca "Esp32 Camera".
  • Para modelos de detecção de objetos, instale "TensorFlow Lite Micro" (ou bibliotecas similares).

Etapa 2: Fiação da Cam ESP32

Pino esp32-cam PIN do programador FTDI
Gnd Gnd
5V VCC (5V)
U0r Tx
U0t Rx
Gnd Gnd (io0 para gnd para piscando)

Importante: Conecte o pino IO0 ao GND para colocar o ESP32-CAM no modo Flash.


Etapa 3: Enviando um esboço básico de detecção de objetos

1. Selecione a placa e a porta

  1. Vá para Ferramentas > Quadro e selecione Ai-Thinker ESP32-CAM.
  2. Sob Ferramentas, selecione o correto Porta COM para o seu programador FTDI.

2. Preparando o código

Use um exemplo básico para carregar um modelo de detecção de objetos pré-treinado (por exemplo, modelo TensorFlow Lite). Abaixo está um snippet de amostra para integrar a detecção de objetos:

#include <esp_camera.h>
#include <TensorFlowLite_ESP32.h>

// Replace with your specific model and labels
#include "model.h"
#include "labels.h"

void setup() {
  Serial.begin(115200);

  // Initialize the camera
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;

  if (!esp_camera_init(&config)) {
    Serial.println("Camera initialized successfully!");
  } else {
    Serial.println("Camera initialization failed!");
    while (1);
  }

  // Load the TensorFlow Lite model
  TfLiteStatus model_status = tflite::InitModel(model);
  if (model_status != kTfLiteOk) {
    Serial.println("Failed to initialize the model");
    while (1);
  }
}

void loop() {
  // Capture a frame
  camera_fb_t *frame = esp_camera_fb_get();
  if (!frame) {
    Serial.println("Camera capture failed");
    return;
  }

  // Run object detection
  tflite::RunInference(frame->buf, frame->len);

  // Display detected objects
  for (int i = 0; i < NUM_CLASSES; i++) {
    float confidence = tflite::GetConfidence(i);
    if (confidence > 0.5) {
      Serial.print("Detected: ");
      Serial.print(labels[i]);
      Serial.print(" with confidence: ");
      Serial.println(confidence);
    }
  }

  esp_camera_fb_return(frame); // Free the frame buffer
  delay(200);
}

3. Carregue o código

  1. Pressione o Reiniciar Botão no ESP32-CAM enquanto o IO0 está conectado ao GND.
  2. Clique Carregar no Arduino IDE.
  3. Depois que o upload estiver concluído, desconecte a io0 do GND e pressione o Reiniciar botão novamente.

Etapa 4: Acessando resultados de detecção de objetos

  1. Abra o monitor serial (Ferramentas > Monitor serial) e definir a taxa de transmissão como 115200.
  2. Ver objetos detectados e suas pontuações de confiança no monitor serial.
  3. Você pode expandir isso exibindo resultados em uma interface da Web usando HTML ou integrando com plataformas IoT como o MQTT.

Etapa 5: Aprimorando a detecção de objetos

  • Otimização do modelo: Use o impulso de borda ou o tensorflow lite para treinar modelos personalizados otimizados para o ESP32-CAM.
  • Interface da web: Aprimore o projeto exibindo os objetos detectados diretamente em uma interface do navegador.
  • Integração da IoT: Envie resultados de detecção para serviços em nuvem para mais sistemas de processamento ou alerta.

Solução de problemas

  • Modelo muito grande: Verifique se o tamanho do modelo se encaixa na memória do ESP32-CAM.
  • Câmera não detectada: Verifique a fiação e verifique se a câmera está conectada com segurança.
  • Baixa precisão: Treine ou ajuste o modelo com dados mais relevantes.

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

  1. Câmeras de segurança com detecção de movimento ou movimento
  2. Automação residencial inteligente (por exemplo, detecção de entregas ou animais de estimação)
  3. Sistemas de monitoramento e contagem industriais
  4. Monitoramento e pesquisa da vida selvagem

Conclusão

Você configurou com sucesso a detecção básica de objetos com o ESP32-CAM. Este poderoso módulo, combinado com modelos de aprendizado de máquina, abre inúmeras possibilidades para aplicativos do mundo real. Experimente modelos diferentes, melhore a precisão e expanda a funcionalidade para atender às necessidades do seu projeto!

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.