Le Rapport
Le Rapport
Le Rapport
Réalisé par :
• BOURIAL Yahya
• NOUMIR Nacer Allah
• OUELD EL HAIRECH Brahim
• MACHAY Yassine
• EL BACHA Otmane
• ED-DERBALI Khalil
I
Introduction :
1
Objectifs du projet :
2
Vision par ordinateur :
1. Librairie utilisée
YOLOv8 (You Only Look Once version 8) est une architecture avancée
pour la détection d'objets en temps réel, qui combine efficacité et précision.
Conçue pour améliorer les performances des versions précédentes, YOLOv8
intègre plusieurs améliorations techniques.
YOLOv8 utilise une structure de réseau neuronal optimisée, incluant des
couches de convolution améliorées, des mécanismes d'attention et des connexions
résiduelles, afin d'améliorer l'extraction de caractéristiques et la détection d'objets.
Comme ses prédécesseurs, YOLOv8 peut utiliser des modèles pré-entraînés
sur de grandes bases de données pour optimiser les performances sur des tâches
spécifiques avec moins de données annotées.
YOLOv8 est conçu pour détecter des objets de tailles variées dans une
même image plus efficacement, améliorant ainsi la précision de la détection à
différentes échelles.
Fidèle à l'approche YOLO, YOLOv8 peut traiter des images à grande
vitesse, le rendant idéal pour des applications en temps réel telles que la
vidéosurveillance, la conduite autonome et les systèmes de sécurité.
YOLOv8 vise à améliorer des métriques de performance telles que le «
Mean Average Precision » (mAP), réduisant les faux positifs et augmentant la
précision des détections tout en maintenant une vitesse de traitement élevée.
3
2. Processus d’entrainement du modèle
a. Collecte et Préparation des Données :
Le document .txt :
4
c. Prétraitement des Données :
• Redimensionnement des Images : Toutes les images ont été
redimensionnées à une résolution uniforme pour correspondre aux
exigences d'entrée du modèle YOLOv8m.
d. Entraînement du Modèle :
• Configuration : Le modèle YOLOv8m a été configuré avec des
hyperparamètres optimisés pour notre jeu de données, incluant le taux
d'apprentissage, la taille des batchs, et le nombre d'époques.
e. Évaluation et Optimisation :
• Métriques d'Évaluation : La performance du modèle a été évaluée à l'aide
de métriques telles que la précision moyenne (mAP) et le taux de détection
des faux positifs/négatifs.
• Optimisation : Des ajustements ont été faits au modèle et aux données
d'entraînement pour améliorer les résultats, incluant la révision des
annotations et l'ajustement des hyperparamètres.
5
3. Processus de Détection d'Objets en Temps Réel :
6
Régulation de vitesse :
1. Matériel :
Composants Utilisés
• Carte ESP32
• Convertisseur hacheur
• Moteur avec encodeur
• Fils conducteurs
Le moteur est composé de trois couches :
1. Encodeur : Il se compose de deux capteurs magnétiques et d'un
disque avec 32 aimants alternant 16 pôles nord et 16 pôles sud, placés
alternativement.
2. Réducteur : Il permet d'augmenter le couple en réduisant la vitesse.
3. Axe : La partie visible du moteur qui transmet le mouvement
mécanique. L'encodeur fournit des informations sur la vitesse et la direction de
rotation. Un capteur mesure la vitesse, tandis que l'autre capteur, décalé, permet
de déterminer le sens de rotation. Dans notre application, nous nous intéressons
uniquement à la vitesse, donc un seul signal numérique est utilisé et connecté à la
broche 14 de l'ESP32.
La relation entre le nombre de tics de l'encodeur et la vitesse de rotation
du moteur est donnée par : Vitesse (tr/min) =60×tics/(31×32Vitesse) où :
• 60 est utilisé pour convertir les secondes en minutes,
• 31 est le rapport du réducteur (31 tours du réducteur équivalent à un
tour de l'axe),
• 32 est le nombre de tics par tour.
7
2. Interruptions et temporisations :
Pour gérer le signal de l'encodeur dans l'ESP32, nous utilisons une
interruption sur la broche 14 avec la fonction attachInterrupt prédéfinie dans l'IDE
Arduino.
Voici les détails de cette fonction :
• Premier argument : La broche désirée (pin 14).
• Deuxième argument : Le nom de la routine de service d'interruption (ISR).
• Troisième argument : Le type d'interruption, dans notre cas, CHANGE pour
détecter chaque changement d'état du signal.
La routine d'interruption (ISR) incrémente un compteur qui représente les
tics de l'encodeur. L'utilisation des interruptions est essentielle pour les
applications où la vitesse de l'encodeur varie rapidement et où des mesures
précises sont nécessaires. Nous continuons à incrémenter ce compteur pendant
une période d'échantillonnage 𝑇𝑒.
Deux fonctions principales sont utilisées :
• timer.setInterval(): Pour ajuster les paramètres du timer (temporisation et
routine à exécuter après la temporisation).
• La routine appelée après la temporisation est notre asservissement PID.
Récapitulons : nous avons configuré une interruption sur la broche 14 pour
incrémenter le compteur de tics, nous incrémentons ce compteur pendant une
temporisation de Te=20 ms, puis nous procédons à l'asservissement du moteur.
3. Asservissement PID de la vitesse :
8
Ces termes sont pondérés par les coefficients 𝑘𝑝, 𝑘𝑖, et 𝑘𝑑 pour obtenir la
commande de vitesse. Cette commande est transmise au moteur via un
convertisseur hacheur qui adapte la tension fournie au moteur.
9
Communication WIFI :
1. Communication MQTT :
Après avoir élaboré la vitesse de consigne, nous utilisons la communication
MQTT pour transmettre cette vitesse à une carte ESP32 qui contrôle le moteur.
10
dynamique du moteur, répondant efficacement aux exigences de l'application tout
en tirant parti de la simplicité et de l'efficacité du protocole MQTT pour la
communication entre le PC et l'ESP32.
2. Communication Socket :
Dans ce projet, nous utilisons la communication par socket pour transmettre
la vitesse réelle d'un moteur, contrôlée par une carte ESP32, vers une autre
application qui affiche une interface graphique (GUI) écrite en Python. La
communication par socket est essentielle pour établir une connexion
bidirectionnelle entre ces deux processus, permettant l'échange fluide de données
sur un réseau local.
11
information, la décode et la place dans une file d'attente de réception à l'aide de la
méthode « get_msg ».
12
Interface graphique :
1. Introduction :
L'interface graphique joue un rôle essentiel dans la présentation des
données et l'interaction avec le système. Dans le cadre de ce projet, nous avons
développé un tableau de bord interactif pour visualiser en temps réel la vitesse du
moteur et d'autres paramètres essentiels. Cette interface permet aux utilisateurs de
suivre les performances du système de manière intuitive et conviviale, facilitant
ainsi l'analyse et la prise de décision.
Une interface graphique bien conçue est cruciale pour assurer que les
utilisateurs peuvent accéder rapidement aux informations importantes et interagir
efficacement avec le système. Elle doit être intuitive, réactive et esthétiquement
plaisante pour garantir une expérience utilisateur optimale. Dans ce contexte, le
choix des outils de développement et la méthode de conception jouent un rôle
déterminant dans la qualité du produit final.
2. Utilisation de Qt Designer et PyQt :
Pour la conception de notre interface graphique, nous avons choisi d'utiliser
Qt Designer et PyQt. Qt Designer est un outil puissant de création d'interfaces
graphiques, permettant de concevoir visuellement les composants de l'interface
sans avoir à écrire de code. Cette approche accélère le processus de
développement et garantit une cohérence visuelle.
13
• Qt Designer :
Qt Designer est un outil de conception d'interfaces graphiques intégré à
l'écosystème Qt. Il offre une interface utilisateur intuitive pour disposer et
configurer les widgets, les boutons, les menus et les autres éléments interactifs.
En utilisant Qt Designer, nous avons pu créer rapidement un prototype de notre
tableau de bord, en nous concentrant sur l'ergonomie et la facilité d'utilisation. Les
fichiers générés par Qt Designer (.ui) sont ensuite convertis en code Python à
l'aide de l'outil pyuic5, ce qui permet une intégration transparente avec PyQt.
• PyQt :
PyQt est une bibliothèque Python qui permet de lier le framework Qt à des
applications Python. Elle fournit les outils nécessaires pour implémenter des
interfaces graphiques complexes et réactives. Après avoir conçu l'interface avec
Qt Designer, nous avons utilisé PyQt pour ajouter la logique de l'application, gérer
les événements et mettre à jour l'affichage en temps réel.
14
Conclusion :
Le développement de notre Système d’assistance à la régulation de vitesse
par reconnaissance des panneaux de signalisations (ADAS) représente une
avancée significative dans l'intégration des technologies de vision par ordinateur,
de contrôle moteur et de communication réseau pour améliorer la sécurité routière
et l'efficacité des véhicules modernes. En exploitant l'architecture avancée
YOLOv8 pour la détection en temps réel des panneaux de signalisation, nous
avons pu concevoir un modèle performant capable d'identifier divers types de
panneaux avec une grande précision, même dans des conditions variées.
15