Reconnaissance objet

De Wiki TGE CSTwiki
Aller à la navigation Aller à la recherche

Description du projet

Le but final du projet est de détecter un objet (dans notre cas, un chariot élévateur) dans une image provenant d’une caméra à l’aide d’un modèle de reconnaissance d’objets préentraîné. Lorsque le programme détecte un chariot élévateur, un gyrophare s’active afin d’avertir les travailleurs de sa présence.Le programme s’exécute sur un Raspberry Pi 5, un micro-ordinateur doté d’entrées et de sorties programmables. La caméra y est connectée directement par USB. Étant donné que les sorties du Raspberry Pi fonctionnent en 3,3 VCC, un relais est utilisé pour commander l’alimentation d’un projecteur fonctionnant en 120 VCA.



Fonctionnement global

Pour fonctionner, le projet a trois grande étapes

1. La programmation python.

Le script charge un modèle .pt et applique la détection sur chaque image, affiche les boîtes englobantes avec le niveau de confiance et calcule le nombre d'image par seconde moyen.
Il permet aussi d’enregistrer la vidéo traitée et de compter le nombre d’objets détectés à chaque image.
Ce n'est pas ce programme qui est entrainé a reconnaitre un objet. Il fait seulement le paramétrer (afficher les boites, le degré de confiance et le nombre d'objet détecté.)

2. Le fichier .pt (Pré-entrainée)

Un modèle YOLO déjà entraîné (.pt) est une intelligence artificielle qui a déjà appris à reconnaître certains objets grâce à un entraînement préalable sur une grande quantité d’images.Le modèle pré-entrainé c'est comme le cerveau du projet.

3. Fichier de contrôle GPIO

Le Raspberry pi 5 possède plusieurs pin programmable qui doivent être contrôler à l'aide d'un fichier. Les pins GPIO peuvent être soit une entrée ou une sortie. Le fichier fais aussi le liens entre les variables python et les pins.

Création du modèle pré-entrainée

Pour entraîner le modèle, il faut un dataset, c’est-à-dire une collection d’images déjà annotées. Il existe deux options : le créer soi-même ou en utiliser un déjà disponible en ligne. Nous recommandons d’en prendre un déjà fait, car créer son propre dataset demande des milliers de photos et beaucoup de temps pour les annoter une par une.


1. Choisir le bon dataset

Nous conseillons d'utiliser la plateforme RobotFlow sur internet pour trouver un dataset.
Sur Roboflow, va dans l’onglet Universe (bibliothèque publique).
Rechercher avec des mots-clés précis (ex : “forklift”, “helmet detection”, etc.).
Vérifie le nombre d’images, la diversité des photos et la qualité des annotations.
Choisis un dataset avec plusieurs centaines ou milliers d’images bien étiquetées.
Une fois le bon dataset trouvé, il reste juste à le télécharger en format zip.
Une erreur que nous avons rencontrée étais que notre dataset n'avais aucune image
nulle, qui sont une images sans l'objet qu'on veut détecter. les images nulle
sont important pour l'entrainement.

2. Préparer le dataset à l’entrainement.

Une fois le fichier téléchargé, vous devez l'extraire à l'endroit de votre choix.
Ensuite, vérifiez que le fichier contient les 3 éléments importants: data.yaml, train, valid.
Si ces 3 éléments sont présents, tout est correct.


3. Ajouter le Yolo de base.

Yolo possède des modèles de base pré entrainés généralisé et il est nécessaire d'ajouter une
de ces version à notre dataset pour l’entrainement. Nous utilisons la version 11n qui est la
version officielle la plus récente. Le n signifie nano. Il existe d'autres modèle plus performants,
mais nous avons besoin de la version la plus léger pour fonctionner avec le Raspberry pi.
pour l'ajouter au dataset, vous devez le télécharger à partir du site de Yolo.

Vous devez ensuite glisser le fichier téléchargé au même endroit que les autres fichiers énumérés à l'étape 2.

4. Entrainement

Il est possible de faire l’entrainement sur Windows, nous conseillons d'utiliser Linux, mais voici une vidéo expliquant les démarches nécessaire avec Windows.
https://www.youtube.com/watch?v=r0RspiLG260


Pour le faire sur Linux, vous devez avoir téléchargé les librairies suivantes:
  • ultralitics
  • pytorch
  • python3
  • opencv
Nous conseillons l'utilisation de l'outil pip pour rendre l'installation de c'est librairie plus simple.


Maintenant, Dans le terminal entrez la commande:
yolo detect train model=yolo11n.pt data=data.yaml epochs=X imgsz=X batch=X patience=X


  • model : modèle de base pré-entraîné utilisé pour commencer.
  • data : fichier qui indique où sont les images et les classes.
  • epochs : nombre de cycles d’apprentissage.
  • imgsz : taille des images (640 si vous utiliser notre python).
  • batch : nombre d’images traitées en même temps (selon le gpu).
  • patience : arrête l’entraînement si le modèle n’améliore plus ses performances


Il est nécessaire de remplacer les x par les bonnes valeurs selon vos besoins, dépendamment de votre nombre d'images et votre application.


Ensuite, vous exécutez la commande et votre ordinateur lance l’entraînement du modèle, cela peut prendre plusieurs heures selon la puissance de votre machine et la taille du dataset.Une erreur possible est que votre processeur ou votre environnement ne dispose pas des bibliothèques logicielles nécessaires pour exécuter l’entraînement. Ce problème est plus fréquent sur des ordinateurs plus anciens ou lorsque certaines dépendances ne sont pas correctement installées.



Python de détection

Le fichier python gère l'image de la caméra en appliquant le modèle pre-trained sur chaque frame.
De plus, il affiche le nombre d'objet détectés, les fps, le pourcentage de certitude et la boite
de détection de classe. Dans notre cas la seule classe est le forklift, mais le même python
fonctionnerait avec n'importe quelle classe sans modification.
Dans ce programme vous pouvez aussi décider à partir de quel pourcentage de certitude (confidence) la boite s'affiche.

Il existe d'autres fichiers pythons sur le web adaptés a tout les besoins.



Contrôle des entrées/sorties digitales
Ce fichier python est le point d'entrée du projet (Ces lui qu'on exécute pour démarrer).
Il lance automatiquement le python de détection et surveille le nombre d'objets
détectés par la caméra via un fichier temporaire .txt partagé entre les deux scripts.
Il est créer et supprimer à chaque fois.
Lorsque object_count atteint la valeur cible pendant un délai défini, la sortie GPIO
s'active pour une durée déterminée, puis revient à 0 automatiquement.
Toutes les valeurs (broche GPIO, délais, seuil de détection) sont modifiables en haut du fichier.
Ne pas oublier d'installer la librairie GPIO sur le cranberry pi.

Liste de matériel
  • Raspberry pi 5 (8 GB ou plus conseillé)
  • Relais 5v
  • Câble d'alimentation 5v 45w
  • Caméra USB type A
  • Câble micro HDMI (optionnel)
  • Câbles Dupont pour le relais (GPIO)
  • Clavier/Souris