Détection d'objets avec l'ESP32-cam

Detecting Objects with the ESP32-CAM

L'ESP32-CAM est un microcontrôleur puissant à faible coût avec un module de caméra intégré, capable de capturer des images et de streamier la vidéo en direct. En tirant parti de ses capacités de traitement et en intégrant des bibliothèques ou des cadres d'apprentissage automatique externes, vous pouvez activer la détection d'objets directement sur ESP32-CAM. Ce tutoriel vous guidera dans la configuration de la détection d'objets de base avec l'ESP32-CAM à l'aide de modèles pré-formés.


Ce dont vous aurez besoin

  1. Module ESP32-CAM
  2. Programmer FTDI (adaptateur USB-Sérial)
  3. Fils de cavalier
  4. Planche à pain (en option)
  5. Un ordinateur avec l'ide Arduino installé
  6. Impulsion de bord ou TensorFlow Lite pour les modèles de détection d'objets

Étape 1: Configuration de l'IDE Arduino

1. Installez le package de la carte ESP32

  1. Ouvrez l'ide Arduino.

  2. Aller à Déposer > Préférences.

  3. Dans le champ "URL du gestionnaire de carte supplémentaire", ajoutez:

    https://dl.espressif.com/dl/package_esp32_index.json
    
  4. Faire un clic D'ACCORD.

  5. Aller à Outils > Conseil > Directeur des conseils d'administration.

  6. Recherchez "ESP32" et installez le package par Systèmes EspressIF.

2. Installer les bibliothèques requises

  • Installez la bibliothèque "Caméra ESP32".
  • Pour les modèles de détection d'objets, installez "TensorFlow Lite Micro" (ou bibliothèques similaires).

Étape 2: Câblage de l'ESP32-cam

Broche ESP32-cam Pin de programmeur FTDI
GND GND
5V VCC (5V)
U0r TX
U0t Rx
GND GND (IO0 à GND pour clignoter)

Important: Connectez la broche IO0 à GND pour mettre l'ESP32-cam en mode flash.


Étape 3: Téléchargement d'un croquis de détection d'objet de base

1. Sélectionnez la carte et le port

  1. Aller à Outils > Conseil et sélectionner AI-Thinker ESP32-cam.
  2. Sous Outils, sélectionnez le bon Port com pour votre programmeur FTDI.

2. Préparer le code

Utilisez un exemple de base pour charger un modèle de détection d'objet pré-formé (par exemple, TensorFlow Lite Model). Vous trouverez ci-dessous un extrait d'échantillon pour intégrer la détection d'objets:

#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. Téléchargez le code

  1. Appuyez sur le Réinitialiser Bouton sur l'ESP32-cam tandis que IO0 est connecté à GND.
  2. Faire un clic Télécharger dans l'ide Arduino.
  3. Une fois le téléchargement terminé, déconnectez IO0 de GND et appuyez sur le Réinitialiser bouton à nouveau.

Étape 4: Accès aux résultats de détection d'objets

  1. Ouvrez le moniteur en série (Outils > Moniteur en série) et régler le taux de bauds sur 115200.
  2. Voir les objets détectés et leurs scores de confiance dans le moniteur en série.
  3. Vous pouvez le développer en affichant des résultats dans une interface Web à l'aide de HTML ou en vous intégrant avec des plates-formes IoT comme MQTT.

Étape 5: Amélioration de la détection d'objets

  • Optimisation du modèle: Utilisez l'impulsion de bord ou TensorFlow Lite pour former des modèles personnalisés optimisés pour l'ESP32-cam.
  • Interface Web: Améliorez le projet en affichant les objets détectés directement dans une interface de navigateur.
  • Intégration IoT: Envoyez des résultats de détection aux services cloud pour d'autres systèmes de traitement ou d'alerte.

Dépannage

  • Modèle trop grand: Assurez-vous que la taille du modèle s'inscrit dans la mémoire de l'ESP32-CAM.
  • Caméra non détectée: Vérifiez le câblage et assurez-vous que la caméra est connectée en toute sécurité.
  • Faible précision: Former ou affiner le modèle avec des données plus pertinentes.

Applications de détection d'objets avec ESP32-cam

  1. Caméras de sécurité avec mouvement ou détection d'objets
  2. L'automatisation intelligente (par exemple, la détection des livraisons ou des animaux de compagnie)
  3. Systèmes de surveillance et de comptage industriels
  4. Surveillance et recherche sur la faune

Conclusion

Vous avez réussi à configurer la détection d'objets de base avec l'ESP32-cam. Ce module puissant, combiné avec des modèles d'apprentissage automatique, ouvre des possibilités infinies pour les applications du monde réel. Expérimentez avec différents modèles, améliorez la précision et élargissez la fonctionnalité en fonction des besoins de votre projet!

Laissez un commentaire

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.