Objecten detecteren met de ESP32-CAM

Detecting Objects with the ESP32-CAM

De ESP32-CAM is een krachtige, goedkope microcontroller met een ingebouwde cameramodule, in staat om afbeeldingen te maken en live video te streamen. Door gebruik te maken van de verwerkingsmogelijkheden en het integreren van externe machine learning-bibliotheken of frameworks, kunt u objectdetectie rechtstreeks op de ESP32-CAM inschakelen. Deze zelfstudie zal u begeleiden door het instellen van basisobjectendetectie met de ESP32-CAM met behulp van vooraf opgeleide modellen.


Wat u nodig hebt

  1. ESP32-cam module
  2. FTDI Programmer (USB-naar-serial adapter)
  3. Jumper draden
  4. Breadboard (optioneel)
  5. Een computer met de Arduino Ide geïnstalleerd
  6. Randimpuls of tensorflow lite voor objectdetectiemodellen

Stap 1: het instellen van de Arduino IDE

1. Installeer het ESP32 -bordpakket

  1. Open de Arduino Ide.

  2. Gaan naar Bestand > Voorkeuren.

  3. Voeg in het veld "Extra board manager urls" toe:

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

  5. Gaan naar Hulpmiddelen > Bord > Boards Manager.

  6. Zoek naar "ESP32" en installeer het pakket per espressifystemen.

2. Installeer de vereiste bibliotheken

  • Installeer de bibliotheek "ESP32 Camera".
  • Installeer voor objectdetectiemodellen "TensorFlow Lite Micro" (of vergelijkbare bibliotheken).

Stap 2: De ESP32-CAM bedraden

ESP32-cam pin FTDI -programmeerpin
GND GND
5V VCC (5V)
U0r Tx
U0t RX
GND GND (io0 naar GND voor knipperen)

Belangrijk: Sluit de IO0-pin aan op GND om de ESP32-CAM in de flash-modus te plaatsen.


Stap 3: Een basisschets voor objectdetectie uploaden

1. Selecteer het bord en de poort

  1. Gaan naar Hulpmiddelen > Bord en selecteren AI-DENTER ESP32-CAM.
  2. Onder Hulpmiddelen, selecteer het juiste Com port voor uw FTDI -programmeur.

2. De code voorbereiden

Gebruik een basisvoorbeeld om een ​​vooraf getraind objectdetectiemodel te laden (bijv. TensorFlow Lite-model). Hieronder is een voorbeeldfragment om objectdetectie te integreren:

#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. Upload de code

  1. Druk op de Resetten Knop op de ESP32-CAM terwijl IO0 is verbonden met GND.
  2. Klikken Uploaden In de Arduino Ide.
  3. Zodra de upload is voltooid, koppel IO0 los van GND en druk op de Resetten knop opnieuw.

Stap 4: Resultaten voor objectdetecties

  1. Open de seriële monitor (Hulpmiddelen > Serie -monitor) en stel het baudrates in op 115200.
  2. Bekijk gedetecteerde objecten en hun betrouwbaarheidsscores in de seriële monitor.
  3. U kunt dit uitbreiden door resultaten in een webinterface weer te geven met behulp van HTML of integreren met IoT -platforms zoals MQTT.

Stap 5: Verbetering van het objectdetectie

  • Modeloptimalisatie: Gebruik randimpuls of tensorflow lite om aangepaste modellen te trainen die zijn geoptimaliseerd voor de ESP32-CAM.
  • Webinterface: Verbeter het project door de gedetecteerde objecten rechtstreeks in een browserinterface weer te geven.
  • IoT -integratie: Stuur detectieresultaten naar cloudservices voor verdere verwerkings- of waarschuwingssystemen.

Problemen oplossen

  • Model te groot: Zorg ervoor dat de modelgrootte binnen het geheugen van de ESP32-CAM past.
  • Camera niet gedetecteerd: Controleer de bedrading en zorg ervoor dat de camera veilig is aangesloten.
  • Lage nauwkeurigheid: Het model trainen of verfijnen met meer relevante gegevens.

Toepassingen van objectdetectie met ESP32-CAM

  1. Beveiligingscamera's met beweging of objectdetectie
  2. Smart Home Automation (bijv. Leveringen of huisdieren detecteren)
  3. Industriële monitoring- en telsystemen
  4. Wildlife monitoring en onderzoek

Conclusie

U hebt succesvol basisobjectendetectie ingesteld met de ESP32-CAM. Deze krachtige module, gecombineerd met modellen voor machine learning, biedt eindeloze mogelijkheden voor echte toepassingen. Experimenteer met verschillende modellen, verbeteren de nauwkeurigheid en breid de functionaliteit uit om aan uw projectbehoeften te voldoen!

Laat een reactie achter

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.