Détecter les objets avec l'ESP32-cam et le python

Detecting Objects with the ESP32-CAM and Python

L'ESP32-CAM est un microcontrôleur polyvalent à faible coût avec une caméra intégrée, capable de capturer des images et de streaming vidéo. Lorsqu'il est combiné avec de puissantes bibliothèques de traitement d'images de Python, vous pouvez implémenter la détection d'objets pour une variété d'applications telles que la surveillance, la domotique et la robotique. Ce tutoriel vous guidera à l'aide de l'ESP32-cam avec Python pour effectuer la détection d'objets.


Ce dont vous aurez besoin

  1. Module ESP32-CAM
  2. Programmeur FTDI (Adaptateur USB à série)
  3. Fils de planche à pain et de cavalier
  4. Python installé sur votre ordinateur (version 3.6 ou version ultérieure)
  5. Bibliothèques: OpenCV, Numpy et demande
  6. Un modèle formé (par exemple, Yolov5, TensorFlow Lite)

Étape 1: Configuration de l'ESP32-cam

1. Flash l'ESP32-CAM avec CAMERAWEBSERVER

  1. Connectez l'ESP32-cam à votre programmeur FTDI:

    • GND à GND
    • 5V à VCC
    • U0t à rx
    • U0r à tx
    • IO0 à GND (pour le mode clignotant)
  2. Ouvrez le Arduino IDE et installez le package de la carte ESP32:

    • Aller à Fichier> Préférences et ajouter l'URL:
      https://dl.espressif.com/dl/package_esp32_index.json
      
    • Aller à Outils> Board> Gestionnaire des conseils d'administrationRecherchez ESP32 et installez le package.
  3. Chargez l'exemple CamerawebServer:

    • Aller à Fichier> Exemples> ESP32> Appareil photo> CAMERAWEBSERVER.
    • Mettre à jour le ssid et password Variables avec vos informations d'identification Wi-Fi:
      const char* ssid = "Your_SSID";
      const char* password = "Your_PASSWORD";
      
    • Sélectionner AI-Thinker ESP32-cam sous Outils> Board.
  4. Téléchargez le code sur ESP32-cam. Débranchez IO0 de GND et appuyez sur le bouton de réinitialisation.

2. Accédez au flux vidéo ESP32-CAM

  1. Ouvrez le moniteur en série et définissez le taux de bauds sur 115200.
  2. Trouvez l'adresse IP de l'ESP32-CAM dans la sortie du moniteur série (par exemple, http://192.168.1.100).
  3. Ouvrez l'adresse IP dans un navigateur pour vérifier le flux en direct.

Étape 2: Configuration de l'environnement Python

1. Installer les bibliothèques requises

Installez les bibliothèques Python nécessaires à l'aide de PIP:

pip install opencv-python numpy requests

2. Vérifiez l'installation d'OpenCV

Exécutez le code suivant pour vous assurer que OpenCV est installé:

import cv2
print(cv2.__version__)

Étape 3: Capturer le flux vidéo

Utilisez Python pour capturer les cadres du flux vidéo ESP32-cam.

Exemple de code: capture des cadres

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

Étape 4: Ajout de détection d'objets

Intégrez la détection d'objets dans le flux vidéo capturé à l'aide d'un modèle pré-formé, tel que Yolov5.

1. Télécharger un modèle pré-formé

Vous pouvez utiliser un modèle YOLOV5 pré-formé:

2. Exemple de code: détection d'objets avec 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()

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

  • Modèles personnalisés: Formez votre propre modèle YOLOV5 pour des objets spécifiques à l'aide de plates-formes comme Roboflow ou Google Colab.
  • Traitement des bords: Déployez des modèles légers comme TensorFlow Lite pour le traitement sur les appareils.
  • Intégration: Envoyez des résultats de détection à un serveur ou déclenchez des actions dans les systèmes IoT.

Applications de la détection d'objets ESP32-CAM

  1. Systèmes de sécurité et de surveillance à domicile
  2. Surveillance et suivi de la faune
  3. Automatisation d'usine et contrôle de la qualité
  4. Projets de robotique interactifs
  5. Borchette intelligente avec reconnaissance faciale

Dépannage

  • Latence de flux: Réduisez la résolution ou la fréquence d'images pour le streaming plus lisse.
  • Problèmes de connexion: Assurez-vous que l'ESP32-CAM et votre ordinateur sont sur le même réseau.
  • Précision du modèle: Affinez le modèle pré-formé pour de meilleurs résultats sur votre ensemble de données.

Conclusion

La combinaison de l'ESP32-CAM avec Python ouvre de puissantes possibilités de détection d'objets et de traitement vidéo en temps réel. En suivant ce guide, vous pouvez intégrer la détection d'objets dans vos projets pour des applications intelligentes. Expérimentez avec différents modèles et optimisations pour créer des systèmes avancés et efficaces!

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.