Académique Documents
Professionnel Documents
Culture Documents
Réalisé au sein de
Signature : Signature :
Dédicaces
Je dédie ce travail
À mes chers parents, Anouar et Najet, je vous suis infiniment
reconnaissant pour votre amour inconditionnel, votre soutien
indéfectible et les sacrifices que vous avez consentis pour mon
éducation. Votre présence et vos encouragements constants ont
été des sources de force et de motivation qui m’ont permis
d’atteindre mes objectifs.
À mes frères, Mohamed et Maissa, je vous adresse également
mes plus sincères remerciements. Votre soutien, vos
encouragements et votre complicité ont joué un rôle essentiel
dans ma vie. Vous êtes de véritables piliers sur lesquels je peux
toujours compter.
À mes amis, Khalil, Anis, Hamza, Fahmi et tous les autres, je
suis reconnaissant de vous avoir à mes côtés. Votre amitié, vos
encouragements et les moments partagés ensemble ont été
précieux pour moi. Vous avez été là pour m’écouter, me soutenir
et me divertir, et je vous en suis vraiment reconnaissant.
Enfin, je tiens à exprimer ma gratitude envers tous mes autres
amis. Que ce soit pour les moments passés ensemble, les
échanges chaleureux ou les soutiens mutuels, votre présence a
été significative dans ma vie. Je suis reconnaissant d’avoir pu
partager ces expériences et ces souvenirs avec vous.
En somme, je voulais vous dire à tous un immense merci. Votre
soutien, votre amitié et votre présence ont eu un impact positif
sur ma vie, et je vous suis profondément reconnaissant d’être là
pour moi.
Avec une gratitude sincère,
Bouabid Alaeddine
i
Dédicaces
ii
En cette occasion spéciale, je tenais à te remercier du fond du cœur pour
ton soutien infini. Tu as joué un rôle indispensable dans ma vie et tu as
toujours été là pour moi. Je suis extrêmement reconnaissant de t’avoir à
mes côtés.
Ta présence constante et ton dévouement ont été une source d’inspiration
inestimable pour moi. Tu as cru en moi lorsque je doutais de moi-même
et tu m’as encouragé à persévérer dans les moments difficiles. Grâce à toi,
j’ai pu surmonter des obstacles et accomplir des choses que je n’aurais
jamais cru possibles.
Tu es bien plus qu’une personne spéciale dans ma vie. Tu es mon soutien
le plus solide, mon amie la plus chère et mon confident le plus fidèle. Tu
m’as montré ce que signifie être aimé inconditionnellement et je ne
pourrai jamais te remercier assez pour cela.
Ton amour et ta générosité ont illuminé ma vie d’une manière que je
n’aurais jamais pu imaginer. Tu es un exemple de force, de grâce et de
bonté. Chaque jour, tu me inspires à devenir une meilleure personne et à
apprécier les merveilles de la vie.
Je suis béni de t’avoir comme partenaire, mais surtout comme amie. Tu
es la personne sur qui je peux compter en tout temps et en toutes
circonstances. Ma vie est infiniment meilleure grâce à toi.
En ce jour spécial, je tiens à te rappeler combien je t’aime et combien je
suis reconnaissant de t’avoir à mes côtés. Ta présence dans ma vie est un
cadeau précieux et je ferai tout mon possible pour mériter ton amour et
ton soutien.
Merci, Amira, pour tout ce que tu as fait pour moi. Je suis honoré d’avoir
une personne aussi exceptionnelle à mes côtés.
À mes amis, votre amitié a été une source constante de soutien et de
motivation. Vous avez partagé avec moi des moments de rires et de
larmes, d’espoirs et de peines. Vous avez cru en moi, même dans les
moments où je doutais de moi-même. Pour votre amitié sincère et pour
tout ce que nous avons partagé, je vous remercie.
Je suis également reconnaissant à l’ISTIC, l’Institut Supérieur des
Technologies de l’Information et des Communications, qui m’a donné une
éducation de qualité et l’opportunité de croître tant sur le plan personnel
que professionnel.
Enfin, je remercie la société SOTETEL, qui m’a ouvert ses portes et m’a
permis d’acquérir une expérience précieuse dans le domaine professionnel.
Vous avez su instiller en moi le respect des normes et des valeurs
professionnelles.
iii
Je reste humble devant l’immense soutien que j’ai reçu et je suis fier de ce
que nous avons accompli ensemble. Merci du fond du cœur à tous.
Cherni Oussema
iv
Remerciement
v
Table des matières
Introduction générale 1
1 Contexte du projet 3
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Présentation de l’organisme d’accueil . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Organisme d’accueil : . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Domaines d’activités . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Présentation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 Cadre du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.2 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.3 Etude de l’existant . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.4 Solution proposée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Méthodologie de travail et planification . . . . . . . . . . . . . . . . . . . . 8
1.4.1 Définition de la méthodologie . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 Choix de Scrum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.3 Jira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Sprints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6 Synopsis global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
I Conception 15
2 Conception d’intelligence artificielle 16
2.8 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.9 Machine learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.10 Deep learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.11 Modèles disponibles et choix de YOLO . . . . . . . . . . . . . . . . . . . . 18
2.12 Analyse des besoins fonctionnels . . . . . . . . . . . . . . . . . . . . . . . 19
2.13 Analyse des besoins non fonctionnels . . . . . . . . . . . . . . . . . . . . . 19
2.14 Méthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.15 Bibliothèques Python utilisées par YOLO . . . . . . . . . . . . . . . . . . 20
2.15.1 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.15.2 NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.15.3 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.15.4 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.15.5 Darknet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.16 Paramètres et hyperparamètres du modèle YOLO . . . . . . . . . . . . . . 21
2.16.1 Taille de l’image d’entrée (INP) . . . . . . . . . . . . . . . . . . . . 22
vi
Table des matières Table des matières
3 Conception web 23
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Conception Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.1 Présentation de Django . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2 Pourquoi choisir Django . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.3 Architecture et Structure de Django . . . . . . . . . . . . . . . . . . 25
3.2.4 Conception des modèles Django . . . . . . . . . . . . . . . . . . . . 26
3.2.5 Conception des vues Django . . . . . . . . . . . . . . . . . . . . . . 27
3.2.6 Routage URL dans Django . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.7 Conception des templates Django . . . . . . . . . . . . . . . . . . . 28
3.2.8 Formulaires dans Django . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.9 Gestion des données avec l’ORM Django . . . . . . . . . . . . . . . 29
3.2.10 Sécurité dans Django . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.11 Test et débogage dans Django . . . . . . . . . . . . . . . . . . . . . 30
3.3 Conception web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.1 Présentation de HTML . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.2 Présentation de CSS . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.3 Présentation de JavaScript . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.4 Présentation de Spline . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.5 Concrétisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.6 Conception de la Page d’Authentification et d’Inscription . . . . . . 32
3.3.7 Conception de la Page de Formulaire . . . . . . . . . . . . . . . . . 32
3.3.8 Conception de la Page d’Affichage des Résultats de Détection . . . 32
3.3.9 Conception de la Page de Tableau de Bord . . . . . . . . . . . . . . 33
3.3.10 Utilisation de Spline . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4 Conception drone 34
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2 Spécifications fonctionnelles du drone . . . . . . . . . . . . . . . . . . . . . 34
4.3 Choix des composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.1 Châssis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.2 Moteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.3 ESC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3.4 Hélices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3.5 Batteries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Conception mécanique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4.1 Design de la structure du drone . . . . . . . . . . . . . . . . . . . . 39
4.4.2 Modélisation 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5 Conception électronique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6 Conception logicielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.7 conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
vii
Table des matières Table des matières
II Réalisation 43
5 Réalisation Drone 44
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2 Assemblage du drone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.1 Fixation du châssis . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.2 Installation des moteurs . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.3 Connexion des ESC . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.4 Fixation des hélices . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.5 Connexion de la batterie . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3 Configuration et calibrage . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.4 Essais de vols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6 Réalisation IA 50
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.2 Collecte d’images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.2.1 Méthode de collecte . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.2.2 Sécurité et équipement . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Étiquetage manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3.1 Avantages de l’utilisation de LabelImg . . . . . . . . . . . . . . . . 52
6.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.5 Étiquetage automatique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.5.1 Préparation du modèle YOLOv5s pour l’étiquetage automatique . . 53
6.5.2 Étiquetage automatique . . . . . . . . . . . . . . . . . . . . . . . . 58
6.5.3 Vérification et correction manuelle . . . . . . . . . . . . . . . . . . . 58
6.5.4 Consolidation des images étiquetées . . . . . . . . . . . . . . . . . . 58
6.5.5 Conclusion sur l’étiquetage des images . . . . . . . . . . . . . . . . 58
6.6 Étape 5 : Sélection d’une Configuration Modèle . . . . . . . . . . . . . . . 58
6.6.1 Choix du Modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.6.2 Architecture du modèle YOLOv5m . . . . . . . . . . . . . . . . . . 59
6.6.3 Mise en œuvre du modèle de détection d’objets YOLOv5m . . . . . 60
6.6.4 Organisation de la structure des images . . . . . . . . . . . . . . . . 60
6.6.5 Étape 3 : Organisation des données . . . . . . . . . . . . . . . . . . 60
6.6.6 Préparation du fichier dataset.yaml . . . . . . . . . . . . . . . . . . 61
6.7 Transformation des Annotations YOLO en CSV . . . . . . . . . . . . . . . 62
6.8 Formats d’annotation des boîtes englobantes . . . . . . . . . . . . . . . . . 62
6.8.1 Indice de classe de l’objet . . . . . . . . . . . . . . . . . . . . . . . 62
6.8.2 Position de la boîte englobante . . . . . . . . . . . . . . . . . . . . 62
6.9 Génération d’Ancres Personnalisées à l’Aide de la Méthode K-Means . . . 63
6.9.1 Paramétrage du modèle . . . . . . . . . . . . . . . . . . . . . . . . 66
6.10 Étape 6 : Apprentissage du modèle . . . . . . . . . . . . . . . . . . . . . . 67
6.10.1 Évaluation du modèle . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.10.2 Interprétation des Résultats d’Entraînement du Modèle YOLO V
pour la Détection d’Antennes . . . . . . . . . . . . . . . . . . . . . 70
6.10.3 Analyse des performances du modèle . . . . . . . . . . . . . . . . . 76
6.10.4 Test des performances du modèle . . . . . . . . . . . . . . . . . . . 76
viii
Table des matières Table des matières
8 Réalisation Django 95
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.2 Étape 1 : Installation de Django . . . . . . . . . . . . . . . . . . . . . . . . 95
8.3 Étape 2 : Créer un nouveau projet Django . . . . . . . . . . . . . . . . . . 95
8.3.1 Le fichier manage.py . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.3.2 La base de données et les modèles de données . . . . . . . . . . . . 96
8.3.3 Structure des fichiers dans un projet Django . . . . . . . . . . . . . 96
8.3.4 Le dossier de configuration . . . . . . . . . . . . . . . . . . . . . . . 97
8.3.5 Le dossier des applications . . . . . . . . . . . . . . . . . . . . . . . 97
8.3.6 Les fichiers statiques . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.3.7 Les templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
8.3.8 Les fichiers de migration . . . . . . . . . . . . . . . . . . . . . . . . 98
8.4 Étape 3 : Configuration du projet Django . . . . . . . . . . . . . . . . . . . 98
8.5 Étape 4 : Création d’une application Django . . . . . . . . . . . . . . . . . 99
8.6 Étape 5 : Modèles et bases de données . . . . . . . . . . . . . . . . . . . . 100
8.7 Étape 6 : Vues et logique de l’application . . . . . . . . . . . . . . . . . . . 101
8.8 Étape 7 : URLs et routage . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8.9 Étape 8 : Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
8.10 Étape 9 : Static files and media files . . . . . . . . . . . . . . . . . . . . . . 103
8.11 Étape 10 : Formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
ix
Table des matières Table des matières
Bibliographie 115
x
Table des figures
xi
Table des figures Table des figures
xii
Table des figures Table des figures
xiii
Liste des tableaux
xiv
Introduction générale
1
Introduction générale
de bord en ligne offre une interface conviviale pour visualiser et analyser les résultats des
inspections. Ce projet représente une avancée majeure dans le domaine de l’inspection des
pylônes et ouvre de nouvelles perspectives pour des opérations d’inspection plus efficaces
et fiables.
Au cours de ce rapport, nous explorerons en détail chaque composante de ce projet,
en mettant l’accent sur les aspects techniques, les défis rencontrés et les résultats obtenus.
Nous discuterons également des perspectives d’avenir et des améliorations possibles pour
rendre ce système d’inspection encore plus performant et adapté aux besoins spécifiques
des opérations de maintenance des pylônes.
2
Chapitre 1
Contexte du projet
1.1 Introduction
L’utilisation de la technologie mobile a connu une croissance exponentielle
en Tunisie ces dernières années, entraînant l’installation d’un grand nombre
d’antennes sur tout le territoire pour assurer une couverture de qualité pour
les utilisateurs. Toutefois, cette croissance rapide a également engendré des
risques importants pour les pylonistes, qui sont chargés de l’installation et
de la maintenance de ces antennes.
Les risques auxquels sont confrontés les pylonistes sont multiples, allant
des chutes de hauteur aux expositions aux ondes électromagnétiques, en pas-
sant par les risques d’électrocution et d’électrisation lors de l’utilisation d’ou-
tils électriques à proximité de pièces sous tension. Ces risques peuvent mettre
en danger la vie des travailleurs, d’autant plus que les pylônes peuvent être
très hauts et difficilement accessibles.
C’est dans ce contexte que l’utilisation de drones pour remplacer les pylo-
nistes a été proposée. Les drones équipés de caméras haute résolution et de
capteurs sophistiqués peuvent effectuer des inspections précises et complètes
des antennes en un temps record, ce qui réduit les risques pour les travailleurs
et améliore l’efficacité de la maintenance.
L’inspection par drone permet également d’accéder facilement aux zones
difficiles d’accès et aux endroits dangereux, comme les sommets des pylônes,
ce qui réduit le risque de chute pour les travailleurs. Les drones sont également
capables de fournir des données en temps réel, ce qui permet de diagnostiquer
rapidement les problèmes et de prendre les mesures nécessaires pour résoudre
les anomalies détectées.
Les données collectées par les drones peuvent être traitées par des al-
gorithmes de machine learning pour améliorer la précision et l’efficacité de
l’inspection. Les informations collectées peuvent également être stockées dans
une base de données centralisée pour un suivi et une analyse ultérieurs.
En conclusion, l’inspection par drone offre une solution innovante pour
résoudre les défis auxquels sont confrontées les méthodes d’inspection tradi-
3
Chapitre 1 1.2. Présentation de l’organisme d’accueil
4
Chapitre 1 1.3. Présentation du projet
Objectifs du projet
5
Chapitre 1 1.3. Présentation du projet
à réaliser des inspections régulières, tout en minimisant les risques pour les
travailleurs et en améliorant l’efficacité de la maintenance.
Bénéficiaires du projet
Bien que les contraintes et les limites du projet puissent varier en fonction
des besoins spécifiques de chaque entreprise de pylônes, certaines limites et
contraintes communes peuvent être identifiées, comme des limitations tech-
niques ou financières.
1.3.2 Problématique
Introduction
Contexte de la problématique
6
Chapitre 1 1.3. Présentation du projet
Les défis et les risques liés à l’inspection manuelle des pylônes de télécommu-
nication
Les avantages potentiels de l’inspection par drone pour l’industrie des télé-
communications
7
Chapitre 1 1.4. Méthodologie de travail et planification
8
Chapitre 1 1.4. Méthodologie de travail et planification
9
Chapitre 1 1.4. Méthodologie de travail et planification
10
Chapitre 1 1.4. Méthodologie de travail et planification
1.4.3 Jira
Jira est un outil de gestion de projets largement utilisé, conçu pour aider
les équipes à planifier, suivre et livrer leurs projets de manière efficace. Il
offre une gamme de fonctionnalités puissantes pour la gestion des tâches, la
collaboration, le suivi des problèmes, la gestion des versions, et bien plus
encore. J’ai choisi d’utiliser Jira pour notre projet Scrum en raison de ses
nombreux avantages.
Tout d’abord, Jira permet une organisation claire et structurée des tâches
et des activités du projet. Grâce à son tableau de bord intuitif, il est facile
de créer des tâches, de les attribuer aux membres de l’équipe, de suivre leur
progression et de définir les délais. Cela facilite la coordination entre les
membres de l’équipe et garantit que chacun sait ce qui doit être accompli.
De plus, Jira offre une visibilité en temps réel sur l’état du projet. Les
tableaux Kanban et les graphiques de suivi permettent de visualiser facile-
ment les tâches en cours, les tâches terminées et les problèmes rencontrés.
Cela aide à identifier les goulots d’étranglement, à hiérarchiser les tâches et
à prendre des décisions éclairées pour améliorer la productivité.
En outre, Jira favorise la collaboration au sein de l’équipe. Les membres
de l’équipe peuvent facilement communiquer, partager des informations et
collaborer sur les tâches. Les commentaires et les discussions associés à chaque
tâche permettent d’échanger des idées, de résoudre des problèmes et d’obtenir
des retours d’expérience.
Pour illustrer l’apparence de Jira, la figure 1.6 montre une capture d’écran
de l’interface utilisateur :
11
Chapitre 1 1.5. Sprints
1.5 Sprints
12
Chapitre 1 1.6. Synopsis global
1.7 Conclusion
En conclusion, ce chapitre a permis de mettre en lumière les enjeux et
défis auxquels font face les opérateurs de télécommunication en Tunisie lors
de l’inspection des pylônes, ainsi que les risques encourus par les pylonistes.
Nous avons proposé une solution innovante basée sur l’utilisation d’un drone
équipé d’intelligence artificielle pour effectuer des inspections précises, ra-
pides et sûres.
13
Chapitre 1 1.7. Conclusion
14
Première partie
Conception
15
Chapitre 2
Intelligence Artificielle
2.8 Introduction
L’Intelligence Artificielle (IA) est une branche de l’informatique qui se concentre sur
le développement de technologies permettant aux machines de réaliser des tâches qui
nécessitent normalement une intervention humaine. L’IA s’appuie sur des algorithmes
et des modèles mathématiques sophistiqués pour analyser des données, apprendre de
nouvelles tâches et prendre des décisions.
L’histoire de l’IA remonte aux années 1950, lorsque les scientifiques ont commencé à
étudier la manière dont les machines peuvent imiter l’intelligence humaine. Depuis lors,
l’IA a connu des avancées significatives, notamment grâce aux algorithmes d’apprentissage
automatique (machine learning) qui permettent aux machines d’apprendre à partir de
données et de s’améliorer au fil du temps.
Aujourd’hui, l’IA est devenue un élément clé de nombreux secteurs, notamment la
santé, les finances, la fabrication, les transports et l’informatique. Elle est utilisée pour
résoudre des problèmes complexes, automatiser des processus et améliorer l’efficacité et la
précision dans de nombreuses tâches. Les applications de l’IA sont vastes et en constante
expansion, et elle est devenue un outil essentiel pour les entreprises, les gouvernements et
les particuliers.
Cependant, l’IA soulève également des préoccupations quant à son impact sur l’emploi,
la vie privée et l’éthique. Pour cette raison, il est important de comprendre les avantages
et les limites de l’IA, ainsi que les implications éthiques et sociales de son utilisation.
Dans ce projet, nous avons choisi d’utiliser le modèle de détection d’objets YOLO
(You Only Look Once) pour résoudre le problème de sécurité des travailleurs dans l’in-
dustrie des télécommunications. La croissance rapide de la technologie mobile en Tunisie
a entraîné l’installation d’un grand nombre d’antennes dans tout le pays, qui nécessitent
une maintenance et une inspection régulières. Cependant, ces tâches peuvent être dange-
reuses pour les travailleurs en raison des risques liés aux pylônes, notamment les chutes de
hauteur et l’exposition aux ondes électromagnétiques. La détection d’objets peut aider à
résoudre ces problèmes en utilisant des drones équipés de caméras et de capteurs sophis-
tiqués pour effectuer des inspections précises et complètes des antennes. Cette approche
réduit les risques pour les travailleurs tout en améliorant l’efficacité de la maintenance.
En outre, l’utilisation de l’apprentissage automatique pour traiter les données collectées
par les drones peut améliorer la précision et l’efficacité de l’inspection. L’adoption de
cette approche en Tunisie peut stimuler le développement de la technologie de détection
d’objets et créer de nouvelles opportunités pour les professionnels de l’inspection et de la
maintenance.
16
Chapitre 2 2.9. Machine learning
17
Chapitre 2 2.11. Modèles disponibles et choix de YOLO
Contrairement au Machine Learning traditionnel qui utilise des modèles linéaires pour
apprendre des données, le Deep Learning utilise des réseaux de neurones profonds pour ap-
prendre des données à plusieurs niveaux d’abstraction. Les réseaux de neurones profonds
sont constitués de plusieurs couches de neurones, chacune effectuant une transformation
non linéaire des données entrantes [3].
5. Utilisation du modèle pour prédire de nouvelles données : une fois que le modèle est
entraîné et optimisé, il peut être utilisé pour prédire de nouvelles données.
Le Deep Learning est utilisé dans diverses applications telles que la reconnaissance
vocale, la reconnaissance d’image, la traduction automatique, la compréhension du langage
naturel, la classification de texte, etc. Les avantages du Deep Learning incluent la capacité
à traiter de grandes quantités de données, à identifier des motifs complexes et à améliorer
les performances du modèle à mesure que les données sont plus nombreuses.
18
Chapitre 2 2.12. Analyse des besoins fonctionnels
mais après avoir comparé ces différents modèles, nous avons choisi YOLO pour notre
projet de détection d’objets.
L’une des principales raisons pour lesquelles nous avons choisi YOLO est sa rapidité.
YOLO est capable de traiter des images en temps réel, ce qui est important pour la sécurité
des travailleurs lors de l’inspection des antennes. De plus, YOLO offre une précision élevée
pour la détection d’objets dans les images, avec une précision de détection supérieure à
90
En outre, YOLO est facilement personnalisable, ce qui nous permet de former notre
modèle de détection d’objets avec nos propres données de formation. De plus, il est opti-
misé pour les architectures de calcul modernes, ce qui facilite son exécution sur différents
types de matériel.
En comparaison, d’autres modèles de détection d’objets peuvent offrir une précision
légèrement plus élevée, mais cela se fait souvent au détriment de la rapidité de traitement.
De plus, certains de ces modèles sont plus complexes à mettre en œuvre et nécessitent
plus de ressources en termes de puissance de calcul et de mémoire.
En somme, nous avons choisi YOLO pour notre projet de détection d’objets en raison
de sa rapidité, de sa précision élevée, de sa facilité de personnalisation et de sa compa-
tibilité avec différentes architectures de calcul. Ces caractéristiques nous permettent de
développer un modèle de détection d’objets précis et efficace pour la sécurité des tra-
vailleurs lors de l’inspection des antennes.
19
Chapitre 2 2.14. Méthodologie
2.14 Méthodologie
Pour notre projet de détection d’objets à l’aide de YOLO, nous avons suivi une mé-
thodologie en plusieurs étapes. Tout d’abord, nous avons collecté un ensemble de données
d’images d’antennes de télécommunication. Nous avons ensuite annoté les images en uti-
lisant des outils d’annotation d’images pour identifier les objets d’intérêt (les antennes)
et les délimiter avec une boîte englobante. Nous avons également étiqueté les images avec
la classe correspondante (dans notre cas, "antenne").
Nous avons ensuite divisé notre ensemble de données en un ensemble de formation
(pour entraîner le modèle) et un ensemble de test (pour évaluer la performance du modèle).
Nous avons utilisé l’architecture YOLOv3 et le framework de Deep Learning Keras pour
former notre modèle de détection d’objets.
Nous avons optimisé les paramètres de notre modèle de détection d’objets pour maxi-
miser sa précision et minimiser les faux positifs et les faux négatifs. Nous avons ajusté les
hyperparamètres tels que la taille de la grille de prédiction, le nombre d’ancres, le seuil de
confiance et le seuil de suppression non maximale pour améliorer la précision et la vitesse
de détection.
Nous avons également effectué des étapes de prétraitement des données pour aug-
menter notre ensemble de données et améliorer la performance du modèle. Nous avons
appliqué des techniques telles que le recadrage aléatoire, le changement d’échelle, le chan-
gement de couleur et le flou gaussien pour augmenter la variété des images d’entraînement
et améliorer la robustesse du modèle.
En conclusion, notre méthodologie pour implémenter YOLO pour la détection d’objets
a impliqué la collecte de données, l’annotation, la division des ensembles de données,
la formation et l’optimisation du modèle, ainsi que le prétraitement des données pour
augmenter la performance du modèle.
2.15.1 OpenCV
OpenCV[5] est une bibliothèque de traitement d’images en temps réel qui fournit des
fonctions pour la manipulation et l’analyse des images. Elle est utilisée pour la capture de
20
Chapitre 2 2.16. Paramètres et hyperparamètres du modèle YOLO
2.15.2 NumPy
NumPy[6] est une bibliothèque Python pour les calculs scientifiques qui fournit des
fonctions pour les tableaux multidimensionnels. Elle est utilisée pour la manipulation de
données en tableau, y compris les tableaux d’images. NumPy fournit des fonctions pour
la manipulation, la transformation et l’analyse de tableaux multidimensionnels, ainsi que
pour la création de tableaux à partir de données existantes.
2.15.3 Keras
Keras[7] est un framework de Deep Learning qui fournit une interface haut niveau
pour la construction et l’entraînement des réseaux de neurones. Elle est utilisée pour la
construction du modèle de détection d’objets, ainsi que pour l’entraînement et l’évaluation
du modèle. Keras fournit une interface conviviale pour la construction de modèles de
réseau de neurones en empilant des couches, ainsi que des fonctions pour l’optimisation
et la compilation du modèle.
2.15.4 TensorFlow
TensorFlow[8] est un framework de Deep Learning développé par Google qui fournit
des fonctions pour la construction et l’entraînement des réseaux de neurones. Elle est
utilisée pour la construction du modèle de détection d’objets, ainsi que pour l’entraînement
et l’évaluation du modèle. TensorFlow fournit des fonctions pour la création de graphes de
calcul pour la construction de modèles de réseau de neurones, ainsi que pour la propagation
en arrière et l’optimisation des poids du modèle.
2.15.5 Darknet
Darknet[9] est un framework de Deep Learning open source utilisé pour l’entraînement
de YOLO. Il fournit des fonctions pour la construction et l’entraînement de réseaux de
neurones, ainsi que pour la prédiction et la détection d’objets. Darknet utilise une archi-
tecture de réseau de neurones différente de celle de TensorFlow et de Keras, ce qui la rend
particulièrement adaptée pour l’entraînement de YOLO.
21
Chapitre 2 2.17. Conclusion
2.17 Conclusion
En conclusion, la conception de l’intelligence artificielle (IA) est un domaine pas-
sionnant et complexe. Grâce à des techniques telles que l’apprentissage automatique, les
chercheurs ont réussi à créer des systèmes capables de réaliser des tâches complexes. Ce-
pendant, la conception d’une IA efficace nécessite une compréhension approfondie du
domaine, des données de qualité et une réflexion éthique. Il est important d’utiliser l’IA
de manière responsable pour le bien de l’humanité. Avec des efforts continus, l’IA a le
potentiel de transformer de nombreux aspects de notre société.
22
Chapitre 3
Conception web
3.1 Introduction
Django est un framework de développement web open-source, hautement performant
et puissant, qui permet de créer des applications web de manière efficace et structurée.
Il est écrit en Python et suit l’architecture du modèle MVC (Modèle-Vue-Contrôleur), ce
qui facilite la séparation des préoccupations et la gestion de la logique métier.
23
Chapitre 3 3.2. Conception Django
ORM puissant
L’ORM de Django est l’un des points forts du framework. Il permet de manipuler la
base de données comme si elle était constituée d’objets Python, ce qui rend le code plus
lisible et facile à maintenir.
Sécurité
Django fournit plusieurs mécanismes de sécurité par défaut, comme la protection
contre les attaques CSRF, l’injection SQL et le Cross-Site Scripting (XSS). Cela rend
Django un choix sûr pour le développement web.
Rapidité de développement
Django a été conçu pour aider les développeurs à aller de l’idée au produit le plus
rapidement possible. Grâce à sa riche boîte à outils, les développeurs peuvent se concentrer
sur l’écriture de l’application sans avoir besoin de réinventer la roue.
24
Chapitre 3 3.2. Conception Django
Scalabilité
Django est conçu pour aider les développeurs à construire des applications qui peuvent
évoluer avec le temps. Il permet de commencer avec une petite application qui peut être
étendue et évoluer en une grande application avec des millions d’utilisateurs. “‘
25
Chapitre 3 3.2. Conception Django
nommé models à l’intérieur de chaque application. Chaque modèle est défini dans
un fichier Python et correspond à une table dans la base de données.
— Vues : Les vues gèrent la logique de présentation et l’interaction avec l’utilisateur.
Elles sont généralement regroupées dans un répertoire nommé views à l’intérieur de
chaque application. Chaque vue est définie dans un fichier Python et est responsable
de la génération des réponses aux requêtes.
— Templates : Les templates sont des fichiers HTML qui définissent la structure et
la mise en page des pages web. Ils sont généralement stockés dans un répertoire
nommé templates à l’intérieur de chaque application. Les templates permettent
d’insérer dynamiquement les données récupérées des vues.
— Fichiers statiques : Les fichiers statiques, tels que les fichiers CSS, JavaScript, les
images, etc., sont stockés dans un répertoire nommé static à l’intérieur de chaque
application. Ils sont utilisés pour améliorer l’apparence et l’interactivité des pages
web.
Cette structure hiérarchique facilite la maintenance, le partage et la réutilisation du
code à travers différentes applications Django.
En résumé, l’architecture de Django suit le modèle MVC et offre une structure bien
définie pour organiser le code d’une application web. Cette approche facilite le dévelop-
pement, la maintenance et la collaboration entre les développeurs.
26
Chapitre 3 3.2. Conception Django
La fonction de vue
Une fonction de vue, dans Django, est une fonction Python qui prend en argument
un objet HttpRequest (et éventuellement d’autres arguments), effectue une certaine lo-
gique en fonction des informations contenues dans l’objet de requête, et renvoie un objet
HttpResponse. Les fonctions de vue peuvent accéder aux données de la requête, aux pa-
ramètres de l’URL, aux données de session, et à d’autres informations pour générer la
réponse appropriée.
27
Chapitre 3 3.2. Conception Django
etc.). Django fournit une série de classes de vue de base que nous avons utiliser directement
ou étendre pour créer des comportements personnalisés.
28
Chapitre 3 3.2. Conception Django
29
Chapitre 3 3.2. Conception Django
30
Chapitre 3 3.3. Conception web
31
Chapitre 3 3.3. Conception web
3.3.5 Concrétisation
Dans ce chapitre, nous aborderons la conception du site web, conçu pour fournir une
interface d’interaction avec les utilisateurs et afficher des informations sur les pylônes.
Nous avons utilisé HTML, CSS, JavaScript, et l’outil Spline pour la conception. Le site
web se compose de plusieurs pages : une page de formulaire, une page d’authentification
et d’inscription, une page d’affichage des résultats de détection, et une page de tableau
de bord.
32
Chapitre 3 3.4. Conclusion
3.4 Conclusion
En conclusion, la conception de ce site web a été axée sur la facilité d’utilisation,
l’efficacité et l’attractivité visuelle. L’objectif principal est d’offrir aux utilisateurs une
expérience intuitive et agréable tout en leur fournissant les informations nécessaires de
manière efficace et organisée.
33
Chapitre 4
Conception de drone
4.1 Introduction
La phase de conception globale est cruciale dans la création d’un drone car elle permet
de définir les spécifications fonctionnelles et de sélectionner les composants nécessaires
pour la construction. Lors de cette étape, il est essentiel de tenir compte des exigences
de la mission, telles que la portée, la charge utile, la vitesse, la résistance au vent et la
durée de vie de la batterie, pour concevoir un drone qui répond aux besoins spécifiques.
La conception globale comprend également la sélection de composants tels qu’une carte
de contrôle de vol, des moteurs, une batterie, des hélices, des capteurs et une caméra, qui
doivent être choisis avec soin pour garantir la fiabilité et la durabilité du drone. Dans cette
section, nous examinerons les étapes clés de la conception globale et les considérations à
prendre en compte pour créer un drone performant et fiable.
Spécification Value
Portée de vol 5 km
Autonomie de vol 60 min
Charge utile 1 kg
Stabilité en vol Correction d’attitude automatique,
système de stabilisation gyroscopique
Résistance au vent 50 km/h
Vitesse maximale 60 km/h
Altitude maximale de vol 100 m
Système de communication Transmission vidéo en temps réel,
système de contrôle à distance
Système de navigation Système de positionnement GPS,
capteurs d’altitude et de distance
Système d’évitement d’obstacles ************
Capacité de charge de la batterie 10000 mAh
Temps de charge de la batterie 120 min
34
Chapitre 4 4.3. Choix des composants
4.3.1 Châssis
Le choix du châssis est crucial pour la stabilité et la durabilité de notre drone. Nous
avons examiné quatre options de châssis (cf. figure 4.13) :
— DJI F450 : fabriqué à partir de matériaux de qualité, notamment de la fibre de
verre et du polyamide nylon. Il est résistant et durable, ce qui le rend parfait pour
les missions d’inspection de pylônes. De plus, il a une largeur de 450mm et une
hauteur de 55mm.
— DJI F330 : un modèle plus petit avec une diagonale de 330mm. Il est également
fabriqué à partir de matériaux de qualité, mais il est moins résistant que le DJI
F450.
— S500 480 MM INTÉGRÉ PCB : doté d’une carte de circuit imprimé intégrée, ce
qui facilite son câblage. Il est fabriqué à partir de fibre de verre de qualité et de
nylon polyamide, ce qui lui confère une grande résistance.
— X525 : fabriqué en fibre de verre et en aluminium. Il est doté d’une largeur de
525mm et de trous moteur de 19mm.
Après avoir examiné les différentes options de châssis, nous avons opté pour le DJI
F450, qui est le plus résistant et le plus adapté à notre mission d’inspection de pylônes.
4.3.2 Moteurs
Les moteurs sont un composant essentiel de notre drone, car ils fournissent la puissance
nécessaire pour faire voler le drone. Nous avons examiné plusieurs options de moteurs
parmi lesquelles nous avons retenu les deux suivantes :
35
Chapitre 4 4.3. Choix des composants
— 2212 1000K V 30A : ces moteurs ont une vitesse de rotation de 1000Kv et une
consommation de courant maximale de 30A. Ils sont puissants et adaptés aux
missions d’inspection de pylônes.
— 2212 mm 920Kv : ces moteurs ont une vitesse de rotation de 920Kv et une consom-
mation de courant maximale de 30A. Ils sont moins puissants que les moteurs
précédents, mais ils sont plus économiques.
Après avoir comparé ces deux options, nous avons opté pour les moteurs 22*12 1000
Kv 30A pour leur puissance supérieure et leur adéquation avec notre mission.
4.3.3 ESC
Les régulateurs de vitesse (ESC) sont chargés de contrôler la vitesse des moteurs.
Nous avons examiné plusieurs options de régulateurs de vitesse parmi lesquelles nous
avons retenu les deux suivantes :
— ESC 30A 2-3S : plage de tension de 5.5 V-12V, 30A : un instantané de 45 A, 40A
continu 10 secondes.
— esc 18A : plage de tension de 15-25A/30A Brushless ESC x 4. Ces régulateurs de
vitesse sont moins puissants que les ESC 30A 2-3S, mais ils sont plus économiques.
Après avoir comparé ces deux options, nous avons choisi les ESC 30A 2-3S pour leur
puissance supérieure et leur adéquation avec nos moteurs.
36
Chapitre 4 4.3. Choix des composants
4.3.4 Hélices
Les hélices sont un élément essentiel de notre drone, car elles permettent au drone de
voler. Nous avons examiné plusieurs options d’hélices parmi lesquelles nous avons retenu
les deux suivantes :
— 8*4.5inch : ces hélices ont une taille de 8 pouces et sont conçues pour fournir une
poussée suffisante pour notre drone.
— Hélices 1045 : ces hélices ont une taille de 10 pouces et sont également conçues
pour fournir une poussée suffisante pour notre drone.
Après avoir comparé ces deux options, nous avons choisi les hélices 1045 pour leur
taille plus grande et leur capacité à fournir une poussée plus importante.
4.3.5 Batteries
Les batteries sont le cœur de notre drone, car elles fournissent l’énergie nécessaire à
son fonctionnement. Nous avons examiné plusieurs options de batteries parmi lesquelles
nous avons retenu les deux suivantes :
— 3S 300mAh : cette batterie a une capacité de 300mAh et une tension nominale de
11,1V. Elle est légère et compacte, ce qui la rend facile à transporter.
— 1 x 2200mAh 3S 11.1V LiPo : cette batterie a une capacité de 2200mAh et une
tension nominale de 11,1V. Elle est plus puissante que la batterie précédente, mais
elle est également plus lourde et plus encombrante.
Après avoir comparé ces deux options, nous avons opté pour la batterie 1 x 2200 mAh
3S 11.1V LiPo pour sa puissance supérieure, qui permettra une durée de vol plus longue.
En résumé, nous avons choisi les composants suivants pour notre drone d’inspection
de pylônes :
37
Chapitre 4 4.4. Conception mécanique
38
Chapitre 4 4.4. Conception mécanique
4.4.2 Modélisation 3D
Dans cette section, nous décrivons la modélisation 3D du drone. Les figures 4.20, 4.21
et 4.22 illustrent le visuel trois dimensions du drone a concevoir.
39
Chapitre 4 4.4. Conception mécanique
40
Chapitre 4 4.5. Conception électronique
41
Chapitre 4 4.7. conclusion
de vol peut augmenter ou diminuer la puissance envoyée aux moteurs, permettant ainsi
de contrôler la vitesse et la direction du drone.
Fonctionnalités supplémentaires
En plus du contrôleur de vol, la conception logicielle comprend la programmation
de fonctionnalités supplémentaires pour améliorer les capacités d’inspection du drone.
Cela peut inclure des fonctionnalités telles que le retour vidéo en direct, la planification
de trajectoire et la communication avec les capteurs. Ces fonctionnalités améliorent les
performances du drone et automatisent certaines tâches pour des missions d’inspection
plus précises et efficaces.
En résumé, la conception logicielle de notre drone d’inspection de pylônes repose sur le
contrôleur de vol KK2.1.5, qui utilise le concept du PID pour un vol stable, et communique
avec les moteurs via le PWM. Cette conception logicielle intègre également des fonction-
nalités supplémentaires pour améliorer les capacités d’inspection et automatiser certaines
tâches, garantissant ainsi des performances optimales lors des missions d’inspection de
pylônes.
4.7 conclusion
En conclusion, la conception d’un drone est un processus complexe qui nécessite une
expertise dans différents domaines. Il faut prendre en compte des aspects tels que la sta-
bilité, la manœuvrabilité, la durée de vol et la sécurité. Des technologies avancées sont
intégrées pour permettre un pilotage précis et une connectivité fiable. L’aspect esthé-
tique peut également être important, surtout pour les drones grand public. En résumé, la
conception d’un drone demande une approche globale qui allie compétences techniques,
compréhension des besoins spécifiques et considérations esthétiques. Il est crucial d’utili-
ser les drones de manière responsable, en respectant les réglementations et en prenant en
compte les questions éthiques et de confidentialité.
42
Deuxième partie
Réalisation
43
Chapitre 5
Réalisation du drone
5.1 Introduction
Dans ce chapitre, nous abordons la réalisation de notre drone d’inspection de pylônes.
Nous détaillons les étapes et les composants utilisés pour construire le drone, ainsi que
les différentes considérations prises en compte lors de sa réalisation.
44
Chapitre 5 5.2. Assemblage du drone
45
Chapitre 5 5.2. Assemblage du drone
46
Chapitre 5 5.3. Configuration et calibrage
47
Chapitre 5 5.4. Essais de vols
48
Chapitre 5 5.5. Conclusion
5.5 Conclusion
En conclusion, la réalisation d’un drone est un processus complexe qui nécessite des
compétences techniques avancées. Il implique la conception, l’assemblage et la prise en
compte de plusieurs aspects tels que la stabilité, la maniabilité et la sécurité. Les drones
offrent de nombreuses possibilités d’utilisation, mais il est important de les utiliser de
manière responsable et de respecter les réglementations en vigueur. La réalisation d’un
drone ouvre de nouvelles perspectives d’innovation, mais il est essentiel de veiller à son
utilisation éthique et sûre
49
Chapitre 6
Web scraping :La première méthode que nous avons utilisée pour collecter des images
était le web scraping, une technique automatisée pour extraire des informations à grande
échelle à partir de sites web. Le web scraping est particulièrement utile pour collecter
rapidement un grand nombre d’images. Pour cela, nous avons écrit des scripts en Python
en utilisant la bibliothèque Beautiful Soup pour naviguer sur des sites web liés aux télé-
communications, notamment des forums techniques, des sites d’entreprises de télécommu-
nications et des bases de données d’images. Ces scripts identifient les images pertinentes
sur les pages web, les téléchargent et les enregistrent dans notre base de données d’images.
Bien que le web scraping ait permis de collecter rapidement un grand nombre d’images,
il présente quelques défis. Par exemple, nous avons dû veiller à respecter les politiques
d’utilisation des sites web et à ne pas encombrer leur serveur en téléchargeant trop
d’images trop rapidement. De plus, les images collectées via le web scraping sont sou-
vent très variées en termes de qualité, de résolution, et de pertinence, nécessitant une
étape de tri et de nettoyage
Base de données de l’archive de Sotetel : Enfin, nous avons également utilisé une
base de données d’images fournies par SOTETEL. Cette base de données contenait des
images d’inspection de pylônes de télécommunication prises lors de précédentes missions
d’inspection. Ces images étaient particulièrement précieuses car elles présentaient des
50
Chapitre 6 6.2. Collecte d’images
scénarios d’inspection réels et contenaient une variété d’anomalies que nous voulions que
notre modèle soit capable de détecter.
Cependant, avant de pouvoir utiliser ces images pour l’entraînement de notre modèle,
nous avons dû effectuer plusieurs étapes de prétraitement. Tout d’abord, nous avons filtré
les images pour éliminer celles qui étaient de mauvaise qualité ou non pertinentes pour
notre projet. Ensuite, nous avons organisé les images en différents dossiers en fonction
de leur contenu (par exemple, "Antennes", "Boulons rouillés", etc.). Enfin, nous avons
classé les images pour faciliter leur utilisation lors de l’étiquetage et de l’entraînement du
modèle.
Capture de pylône local de Sotetel :La deuxième méthode que nous avons utilisée
pour collecter des images était les visites sur site. Nous avons visité plusieurs sites de
pylônes de télécommunication pour prendre des photos en utilisant une caméra haute
résolution. Ces visites nous ont permis d’obtenir des images très spécifiques et de haute
qualité de l’équipement de pylônes de télécommunication, y compris des antennes, des
câbles, des boulons et autres composants.
Au cours de ces visites, nous avons pris des photos sous différents angles et à différents
moments de la journée pour capturer une variété de conditions d’éclairage. Ces images ont
contribué à rendre notre jeu de données plus robuste et plus représentatif des conditions
réelles d’inspection de pylônes.
51
Chapitre 6 6.3. Étiquetage manuel
52
Chapitre 6 6.4. Conclusion
6.4 Conclusion
Dans cette section, nous avons présenté les différentes méthodes que nous avons utili-
sées pour collecter les images des antennes situées sur les pylônes. En plus de monter sur
les pylônes pour capturer des images détaillées, nous avons utilisé le web scraping pour
extraire des images, accédé à la base de données de l’archive de Sotetel et capturé des
images directement sur des pylônes de Sotetel.
53
Chapitre 6 6.5. Étiquetage automatique
Epochs (époques) : Il s’agit du nombre de fois où le modèle voit l’ensemble complet des
données d’entraînement. Un nombre plus élevé d’époques peut améliorer les performances
du modèle, mais peut également entraîner un surajustement.
Weight decay (décroissance des poids) : Ce paramètre aide à prévenir l’overfitting en
ajoutant une pénalité à la fonction de coût du modèle. Une décroissance de poids plus
élevée entraîne une mise à jour plus lente des poids du modèle.
Anchor boxes (boîtes d’ancrage) : Dans YOLO, les boîtes d’ancrage sont des boîtes
prédéfinies utilisées pour prédire les boîtes englobantes des objets. Nous avons personnalisé
les tailles des boîtes d’ancrage pour mieux correspondre aux tailles des objets dans nos
images.
54
Chapitre 6 6.5. Étiquetage automatique
Validation du modèle
Une fois l’entraînement terminé, il est important de valider les performances du modèle
pour s’assurer qu’il a bien appris à identifier les objets d’intérêt. Pour cela, nous avons
utilisé un ensemble de données de validation séparé, composé d’images qui n’avaient pas
été utilisées lors de l’entraînement.
En utilisant cet ensemble de validation, nous avons évalué le modèle sur plusieurs
métriques, notamment la précision, le rappel, et le score F1. Ces métriques nous ont
permis de confirmer que notre modèle était bien capable de détecter les différents objets
d’intérêt dans les images avec une précision satisfaisante.
55
Chapitre 6 6.5. Étiquetage automatique
56
Chapitre 6 6.5. Étiquetage automatique
57
Chapitre 6 6.6. Étape 5 : Sélection d’une Configuration Modèle
58
Chapitre 6 6.6. Étape 5 : Sélection d’une Configuration Modèle
59
Chapitre 6 6.6. Étape 5: Sélection d’une Configuration Modèle
data/
images/
train/
img1.jpg
img2.jpg
...
60
Chapitre 6 6.6. Étape 5 : Sélection d’une Configuration Modèle
valid/
img501.jpg
img502.jpg
...
labels/
train/
img1.txt
img2.txt
...
valid/
img501.txt
img502.txt
...
Il faut s’assurer que les images et les fichiers d’annotations sont correctement organisés
selon cette structure de répertoires. Cela va faciliter le chargement et le traitement des
données lors de l’entraînement du modèle YOLOv5.
Notons que les noms des images et des fichiers d’annotations sont utilisés à titre
d’exemple et peuvent varier en fonction de notre propre ensemble de données.
Figure 6.49 – Capture d’écran du fichier YAML pour la configuration du modèle YO-
LOv5
61
Chapitre 6 6.7. Transformation des Annotations YOLO en CSV
Coordonnée xmin
La coordonnée xmin correspond à la coordonnée horizontale la plus à gauche de la boîte
englobante, exprimée en pourcentage par rapport à la largeur de l’image. Par exemple, si
l’image a une largeur de 1000 pixels et que xmin est égal à 0.2, cela signifie que le côté
gauche de la boîte englobante se situe à une distance de 0.2 x 1000 = 200 pixels du bord
gauche de l’image.
62
Chapitre 6 6.9. Génération d’Ancres Personnalisées à l’Aide de la Méthode K-Means
Coordonnée ymin
La coordonnée ymin correspond à la coordonnée verticale la plus en haut de la boîte
englobante, exprimée en pourcentage par rapport à la hauteur de l’image. Par exemple,
si l’image a une hauteur de 800 pixels et que ymin est égal à 0.3, cela signifie que le côté
supérieur de la boîte englobante se situe à une distance de 0.3 x 800 = 240 pixels du bord
supérieur de l’image.
Coordonnée xmax
La coordonnée xmax correspond à la coordonnée horizontale la plus à droite de la boîte
englobante, exprimée en pourcentage par rapport à la largeur de l’image. Par exemple, si
l’image a une largeur de 1000 pixels et que xmax est égal à 0.8, cela signifie que le côté
droit de la boîte englobante se situe à une distance de 0.8 x 1000 = 800 pixels du bord
gauche de l’image.
Coordonnée ymax
La coordonnée ymax correspond à la coordonnée verticale la plus en bas de la boîte
englobante, exprimée en pourcentage par rapport à la hauteur de l’image. Par exemple,
si l’image a une hauteur de 800 pixels et que ymax est égal à 0.7, cela signifie que le côté
inférieur de la boîte englobante se situe à une distance de 0.7 x 800 = 560 pixels du bord
supérieur de l’image.
63
Chapitre 6 6.9. Génération d’Ancres Personnalisées à l’Aide de la Méthode K-Means
Format YOLO
Le format YOLO standard pour chaque ligne d’annotation dans un fichier texte com-
prend les informations suivantes pour une boîte englobante : le numéro de classe de l’objet,
les coordonnées horizontales x et verticales y, ainsi que la largeur w et la hauteur h de la
boîte englobante.
import numpy as np
from sklearn.cluster import KMeans
Calcul de l’Intersection Over Union (IOU) entre les boîtes englobantes et les
centroids
L’Intersection Over Union (IOU), également appelée Jaccard Index, est une mesure de
similarité utilisée dans la détection d’objet pour évaluer à quel point les boîtes englobantes
prédites correspondent aux boîtes englobantes de référence (ground truth).
L’IOU mesure la proportion de la zone d’intersection entre la boîte prédite et la boîte
de référence par rapport à la zone d’union entre ces deux boîtes. Elle varie de 0 à 1, où 0
indique qu’il n’y a aucun chevauchement entre les boîtes et 1 indique un chevauchement
parfait.
La formule de l’IOU est la suivante :
IOU = Intersection area / Union area
Pour calculer l’IOU, on utilise les coordonnées des boîtes englobantes, qui sont géné-
ralement exprimées sous forme de xmin (coordonnée horizontale la plus à gauche), ymin
(coordonnée verticale la plus en haut), xmax (coordonnée horizontale la plus à droite) et
ymax (coordonnée verticale la plus en bas).
On calcule d’abord l’aire de chaque boîte en multipliant sa largeur par sa hauteur.
Ensuite, on calcule l’aire de l’intersection entre les boîtes en trouvant les coordonnées du
rectangle qui les englobe et en calculant son aire. Enfin, on calcule l’aire de l’union en
additionnant les aires des deux boîtes et en soustrayant l’aire de l’intersection.
64
Chapitre 6 6.9. Génération d’Ancres Personnalisées à l’Aide de la Méthode K-Means
L’IOU est souvent utilisée dans le calcul de la perte (loss) pour évaluer la différence
entre les prédictions et les annotations des boîtes englobantes. Elle est également utilisée
dans l’algorithme de suppression non maximale (Non-Max Suppression) pour sélectionner
la meilleure boîte englobante prédite parmi celles qui se chevauchent.
Dans le contexte de la génération d’ancres personnalisées avec l’algorithme K-means,
l’IOU est utilisée comme mesure de similarité pour sélectionner les meilleures dimensions
et ratios d’aspect pour les ancres en fonction des données d’entraînement.
En résumé, l’IOU est une mesure importante en détection d’objet qui permet d’évaluer
à quel point les boîtes englobantes prédites correspondent aux boîtes de référence, et elle
est utilisée dans diverses étapes du processus de détection pour évaluer la qualité des
prédictions.
# Calculer l’Intersection Over Union (IOU) moyen entre les boîtes englobantes et les c
def avg\_iou(boxes, centroids):
n\_boxes = len(boxes)
n\_centroids = len(centroids)
iou\_sum = 0.0
for box in boxes:
ious = []
for centroid in centroids:
# Calculer l’IOU entre la boîte englobante et le centroid
iou = (min(box[0], centroid[0]) * min(box[1], centroid[1])) / \
(box[0] * box[1] + centroid[0] * centroid[1] - \
min(box[0], centroid[0]) * min(box[1], centroid[1]))
ious.append(iou)
# Ajouter le maximum des IOU à la somme totale
iou\_sum += max(ious)
# Calculer l’IOU moyen en divisant la somme par le nombre de boîtes
return iou\_sum / n\_boxes
65
Chapitre 6 6.9. Génération d’Ancres Personnalisées à l’Aide de la Méthode K-Means
Nous utilisons ensuite la méthode des k-means pour trouver les ancres optimisées,
en entraînant le modèle sur les dimensions des boîtes englobantes et en récupérant les
centroids des clusters.
Nous calculons l’IOU moyen pour évaluer la qualité des ancres et affichons les résultats.
Une fois que nous avons nos ancres optimisées, nous pouvons les copier et les coller dans
notre fichier de configuration YOLOv5 personnalisé (par exemple, customyolov5s.yaml),
en remplaçant les valeurs des ancres existantes.
N’oublions pas que ces valeurs d’ancrage doivent être présentées sous forme de tuples
(largeur, hauteur).
66
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
Figure 6.53 – Image illustrant les ancres optimisées pour YOLOv5 personnalisé.
les optima locaux, tandis qu’un taux d’apprentissage trop bas peut rendre le processus
d’apprentissage très lent. Nous avons réglé le taux d’apprentissage pour trouver le bon
équilibre.
67
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
epoch
Le numéro de l’époque en cours. Chaque époque correspond à une passe complète sur
l’ensemble du dataset d’entraînement.
train/box_loss
La perte de la boîte englobante (Bounding Box) pour les données d’entraînement.
Cette valeur mesure l’erreur entre les coordonnées des boîtes englobantes prédites et celles
réelles.
train/obj_loss
La perte d’objet pour les données d’entraînement. Cette valeur mesure l’erreur entre la
probabilité prédite d’avoir un objet dans une boîte englobante et la véritable probabilité.
train/cls_loss
La perte de classe pour les données d’entraînement. Cette valeur mesure l’erreur entre
les classes d’objets prédites et les classes réelles.
68
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
metrics/precision
La précision est une mesure de la qualité des prédictions. Elle est calculée comme
le rapport entre les vrais positifs (objets correctement détectés) et la somme des vrais
positifs et des faux positifs (objets incorrectement détectés).
metrics/recall
Le rappel est une mesure de la capacité du modèle à détecter tous les objets d’intérêt.
Il est calculé comme le rapport entre les vrais positifs et la somme des vrais positifs et
des faux négatifs (objets réels non détectés).
metrics/mAP_0.5
Le mAP (mean Average Precision) est une mesure globale de la performance de détec-
tion. Il est calculé en moyennant les AP (Average Precision) pour chaque classe d’objet.
Le seuil de chevauchement IoU (Intersection over Union) utilisé pour déterminer si une
détection est considérée comme correcte est de 0,5 dans ce cas.
metrics/mAP_0.5 :0.95
Cette valeur est similaire au mAP_0.5, mais elle prend en compte un ensemble de
seuils IoU, allant de 0,5 à 0,95 avec un pas de 0,05. C’est une mesure plus stricte et
robuste pour évaluer la performance de détection.
val/box_loss
La perte de la boîte englobante pour les données de validation.
val/obj_loss
La perte d’objet pour les données de validation.
val/cls_loss
La perte de classe pour les données de validation.
69
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
Pertes d’Entraînement
Les colonnes ‘train/box_loss‘, ‘train/obj_loss‘ et ‘train/cls_loss‘ représentent respec-
tivement les pertes liées à la prédiction de la position et de la taille des boîtes englobantes,
la détection des objets et la classification correcte des objets détectés. Une diminution sys-
tématique de ces valeurs au fil des époques indique que notre modèle apprend efficacement
de ses erreurs pendant l’entraînement, ce qui conduit à une amélioration continue des ca-
pacités de localisation, de détection et de classification des antennes.
Pertes de Validation
De même, les colonnes ‘val/box_loss‘, ‘val/obj_loss‘ et ‘val/cls_loss‘ montrent les
performances du modèle sur l’ensemble de validation. Un déclin simultané de ces valeurs
démontre que notre modèle n’est pas simplement mémorisant les données d’entraînement,
mais développe une compréhension robuste qui lui permet de bien généraliser sur de
nouvelles données.
70
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
labels correlogramme
La figure 6.56 présente un labels correlogramme qui explore les relations entre diffé-
rentes étiquettes dans un ensemble de données. Chaque cellule de la matrice représente la
corrélation entre deux étiquettes, qui est indiquée par une échelle de couleurs. Les couleurs
plus vives ou plus foncées indiquent une corrélation plus forte, tandis que les couleurs plus
claires indiquent une corrélation plus faible. Ce labels correlogramme permet de visualiser
rapidement les relations entre les étiquettes, mettant en évidence les paires d’étiquettes
71
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
fortement corrélées et celles qui sont moins liées. Il offre ainsi des informations précieuses
pour l’analyse des données et la compréhension des relations entre les différentes catégo-
ries. En utilisant cet outil, les chercheurs et les analystes peuvent identifier des tendances,
des clusters ou des regroupements d’étiquettes, ce qui peut aider à prendre des décisions
éclairées et à mieux comprendre les données étudiées.
Courbe F1-Confidence
La figure 6.57 présente une courbe F1-Confidence qui met en relation la mesure de
performance F1 et la confiance attribuée par un modèle à ses prédictions. L’objectif de
cette courbe est de fournir des informations sur la relation entre la précision et le rappel
du modèle pour différentes valeurs de confiance.
Le score F1 est une mesure de performance couramment utilisée dans les tâches de
classification binaire. Il combine la précision et le rappel en une seule valeur qui représente
l’équilibre entre les deux mesures. Le score F1 est calculé en utilisant la formule suivante :
2 · précision · rappel
F1 =
précision + rappel
où la précision est le nombre de vrais positifs divisé par la somme des vrais positifs et
des faux positifs, et le rappel est le nombre de vrais positifs divisé par la somme des vrais
positifs et des faux négatifs.
La courbe F1-Confidence montre comment le score F1 varie en fonction de la confiance
du modèle. À mesure que la confiance augmente, le score F1 peut également augmenter,
ce qui indique que le modèle a tendance à produire des prédictions plus précises et à
minimiser à la fois les faux positifs et les faux négatifs. Cependant, il est important de
noter que cette tendance peut varier en fonction du seuil de confiance choisi.
L’analyse de la courbe F1-Confidence permet de choisir un seuil de confiance approprié
en fonction des objectifs de performance spécifiques. Par exemple, si l’objectif est de
72
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
maximiser le score F1, il est préférable de choisir un seuil de confiance qui correspond au
point de la courbe où le score F1 est le plus élevé. Cela garantit un équilibre optimal entre
la précision et le rappel.
En utilisant la courbe F1-Confidence, les praticiens et les chercheurs peuvent prendre
des décisions éclairées quant au seuil de confiance à utiliser pour leurs tâches de classifica-
tion, en fonction des compromis souhaités entre la précision et le rappel du modèle. Cela
permet d’optimiser les performances du modèle pour répondre aux exigences spécifiques
de la tâche.
Courbe Rappel-Confiance
La courbe Rappel-Confiance est un outil graphique qui permet d’évaluer les perfor-
mances d’un modèle de détection en fonction du seuil de confiance utilisé pour considérer
une prédiction comme positive. Elle représente le rappel (recall) en fonction de la confiance
des prédictions.
Le rappel est une mesure de la capacité du modèle à détecter tous les exemples positifs
réels parmi tous les exemples positifs présents dans les données. Il est calculé comme le
rapport entre le nombre de vrais positifs et la somme des vrais positifs et des faux négatifs :
Vrais Positifs
Rappel =
Vrais Positifs + Faux Négatifs
Le seuil de confiance représente le niveau de confiance requis pour considérer une
prédiction comme positive. En augmentant ce seuil, on exige une plus grande certitude
avant d’accepter une prédiction.
La courbe Rappel-Confiance permet de visualiser comment le rappel varie en fonction
du seuil de confiance. Elle met en évidence le compromis entre le rappel et la précision
du modèle. En général, à mesure que le seuil de confiance augmente, le rappel diminue
car le modèle devient plus strict dans ses prédictions. Cela signifie qu’il est plus sélectif et
73
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
moins susceptible de faire des faux positifs, mais il risque également de manquer certains
vrais positifs.
En analysant la courbe Rappel-Confiance, on peut déterminer le seuil de confiance
qui offre un bon équilibre entre rappel et précision en fonction des besoins spécifiques de
l’application.
Courbe Précision-Confiance
La courbe Précision-Confiance est un outil graphique qui permet d’évaluer les perfor-
mances d’un modèle de détection en fonction du seuil de confiance utilisé pour considérer
une prédiction comme positive. Elle représente la précision en fonction de la confiance des
prédictions.
La précision est une mesure de l’exactitude des prédictions positives du modèle, c’est-
à-dire la capacité du modèle à éviter les faux positifs. Elle est calculée comme le rapport
entre le nombre de vrais positifs et la somme des vrais positifs et des faux positifs :
Vrais Positifs
Précision =
Vrais Positifs + Faux Positifs
Le seuil de confiance représente le niveau de confiance requis pour considérer une
prédiction comme positive. En augmentant ce seuil, on exige une plus grande certitude
avant d’accepter une prédiction.
La courbe Précision-Confiance permet de visualiser comment la précision varie en
fonction du seuil de confiance. Elle met en évidence le compromis entre la précision et le
rappel du modèle. En général, à mesure que le seuil de confiance augmente, la précision
augmente car le modèle devient plus sélectif dans ses prédictions positives. Cependant,
cela peut également entraîner une diminution du rappel, car le modèle risque de manquer
certains vrais positifs.
74
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
Courbe Précision-Rappel-Confiance
75
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
augmente, la précision augmente tandis que le rappel diminue. Cela signifie que le modèle
est plus sélectif dans ses prédictions positives, mais il risque également de manquer certains
vrais positifs.
En analysant la courbe Précision-Rappel-Confiance, on peut déterminer le seuil de
confiance qui offre un bon équilibre entre précision et rappel en fonction des besoins
spécifiques de l’application.
76
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
Améliorations futures
Bien que notre modèle ait montré des performances prometteuses, il reste encore de
nombreuses possibilités d’amélioration. Par exemple, nous pourrions explorer l’utilisation
de techniques de régularisation pour améliorer les performances de notre modèle. De plus,
77
Chapitre 6 6.10. Étape 6 : Apprentissage du modèle
78
Chapitre 7
79
Chapitre 7 7.2. Amélioration de la qualité de l’image
80
Chapitre 7 7.2. Amélioration de la qualité de l’image
81
Chapitre
7.3. Utilisation
7 de Tesseract OCR pour la reconnaissance de texte sur les images traitées
82
7.4. Intégration du processus de détection et de reconnaissance de texte dans un serveur
Chapitre 7 Django
Dans le fichier views.py de notre application, nous avons implémenté les fonctionna-
lités suivantes :
— Prendre en entrée un dossier contenant des images : Nous avons créé une
fonction pour récupérer le chemin du dossier contenant les images à traiter.
— Binarisation et application de filtres : Nous avons développé des méthodes
pour lire chaque image du dossier, les binariser et appliquer des filtres pour amé-
liorer la précision de l’image.
— Reconnaissance de texte avec l’algorithme OCR : Nous avons utilisé l’algo-
rithme OCR (Tesseract OCR dans notre exemple) pour extraire le texte des images
binarisées et filtrées.
— Affichage des résultats dans une page HTML : Nous avons créé une page
HTML qui affiche le nom de chaque fichier d’image traité ainsi que le texte détecté
par cette image.
Implémentation des fonctions de traitement d’image, de filtrage et de reconnaissance
de texte dans views.py
83
Chapitre 7 7.5. Enregistrement du texte dans une base de données SQLite
84
Chapitre 7 7.5. Enregistrement du texte dans une base de données SQLite
Pour enregistrer le texte extrait de l’OCR dans la base de données SQLite, nous avons
utilisé les fonctionnalités de Django pour interagir avec la base de données. Django fournit
une couche d’abstraction qui facilite la création de modèles de données et l’exécution
d’opérations de base de données telles que l’enregistrement des données extraites.
En utilisant les modèles de Django, nous avons défini un modèle de base de données
pour représenter les résultats OCR. Ce modèle comprend des champs tels que le texte
extrait et la date de création. Lorsque nous effectuons la reconnaissance de texte sur une
image, nous créons une instance de ce modèle et l’enregistrons dans la base de données
SQLite.
Grâce à l’utilisation de SQLite et aux fonctionnalités de Django, nous sommes en
mesure de stocker et de gérer efficacement les résultats OCR dans notre application. Cette
approche nous permet d’organiser les données de manière cohérente et de les récupérer
facilement lorsque nécessaire.
En conclusion, l’utilisation de la base de données SQLite dans notre projet Django
offre une solution légère, facile à configurer et à utiliser pour enregistrer les résultats
OCR. Cela nous permet de centraliser les données extraites et de les gérer efficacement
dans notre application.
85
Chapitre 7 7.5. Enregistrement du texte dans une base de données SQLite
86
Chapitre 7 7.5. Enregistrement du texte dans une base de données SQLite
87
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
Maintenant, nous avons accès à l’URL http ://127.0.0.1 :8000/ocr_results_list/ pour voir
la liste des résultats OCR stockés dans la base de données.
88
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
teur et suivi les instructions à l’écran pour installer PostgreSQL. Pendant l’installation,
il nous a été demandé de définir un mot de passe pour l’utilisateur "postgres".
89
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
90
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
91
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
La fonction ‘extract_antenna_string()‘ :
-prend une chaîne de caractères en entrée
-recherche un motif spécifique dans cette chaîne de caractères à l’aide d’une expression
régulière
-retourne une chaîne de caractères spécifique si le motif est trouvé, sinon elle retourne
‘None‘.
La fonction ‘extract_antenna_info()‘ :
-prend une chaîne de caractères en entrée
-Elle extrait des informations spécifiques de la chaîne de caractères en utilisant des ex-
pressions régulières
-stocke ces informations dans un dictionnaire qui est ensuite renvoyé.
Une fois les valeurs extraites, nous les avons enregistrées dans notre base de données
PostgreSQL. Cela nous permet de stocker ces informations précises dans une structure de
base de données bien organisée.
Une fois que nous avons stocké les champs requis dans la base de données SQL Post-
greSQL, nous transmettons ces informations à notre site web, qui se charge ensuite d’af-
ficher les résultats détectés.
92
Chapitre 7 7.6. Migration de la base de données de SQLite vers PostgreSQL
Figure 7.86 – Enregistrement des valeurs extraites dans la base de données PostgreSQL
93
Chapitre 7 7.7. Conclusion
7.7 Conclusion
En conclusion, l’étape de réalisation et de détection de texte a été un élément essentiel
de notre projet. Nous avons réussi à mettre en place un système efficace pour extraire le
texte à partir des images, le traiter et le stocker dans une base de données PostgreSQL.
Cette étape nous permet d’obtenir des informations précieuses à partir des images captu-
rées lors de l’inspection des pylônes, ce qui facilite la maintenance et la prise de décisions
éclairées. Grâce à l’utilisation d’outils et de techniques appropriés, nous avons pu automa-
tiser ce processus et améliorer l’efficacité de notre inspection. En conclusion, la réalisation
et la détection de texte sont des étapes clés pour optimiser notre processus d’inspection
des pylônes et assurer une maintenance efficace.
94
Chapitre 8
Réalisation Django
8.1 Introduction
Dans ce chapitre, nous décrivons les étapes de réalisation du site web dans notre projet.
Nous détaillons dans chaque section une étape.
Lors de l’exécution de cette commande, un dossier racine sera créé avec le nom spé-
cifié (dans cet exemple, "myproject"). Ce dossier contiendra tous les fichiers et dossiers
nécessaires pour notre projet Django.
95
Chapitre 8 8.3. Étape 2 : Créer un nouveau projet Django
— Dossier racine du projet : Il contient tous les fichiers et dossiers liés au pro-
jet. C’est également l’endroit où se trouve le fichier "manage.py", qui est utilisé
pour effectuer des tâches administratives telles que le lancement du serveur de
développement et l’exécution des migrations de base de données.
— Dossier de configuration : Souvent nommé "config" ou "settings", il contient les
fichiers de configuration principaux pour le projet Django. Le fichier "settings.py"
est le fichier central de configuration où nous avons spécifier divers paramètres tels
que les applications installées, les bases de données, les paramètres de sécurité, etc.
Le fichier "urls.py" est responsable du routage des URL, il associe les URL de notre
application aux vues appropriées.
— Dossier des applications : C’est l’endroit où nous avons organiser différentes
applications qui composent notre projet Django. Chaque application est un module
96
Chapitre 8 8.3. Étape 2 : Créer un nouveau projet Django
97
Chapitre 8 8.4. Étape 3 : Configuration du projet Django
98
Chapitre 8 8.5. Étape 4 : Création d’une application Django
Cela nécessitera la création de modèles de données appropriés, de vues Django pour traiter
les requêtes, et de routes pour gérer les URL.
Cela va créer un nouveau dossier nommé "myapp" avec la structure de base d’une
application Django.
Un projet Django est la structure globale qui englobe une ou plusieurs applications
Django. Il est créé en utilisant la commande "django-admin startproject" et contient des
fichiers tels que "settings.py", "urls.py", "wsgi.py", etc.
Une application Django est un ensemble de fonctionnalités qui peut être intégré à un
projet Django. Elle est créée à l’aide de la commande "python manage.py startapp" et
contient des fichiers tels que "models.py", "views.py", "urls.py", "templates/", etc.
La structure de base d’une application Django se compose des éléments suivants :
— Le fichier "models.py" : il contient les modèles de données qui représentent la struc-
ture de notre base de données. Les modèles de données sont définis sous forme de
classes Python et sont utilisés pour stocker et récupérer des données dans la base
de données.
99
Chapitre 8 8.6. Étape 5 : Modèles et bases de données
— Le fichier "views.py" : c’est là que nous définissons les vues qui gèrent les requêtes
HTTP et les réponses associées. Les vues récupèrent les données nécessaires à partir
des modèles de données, effectuent des opérations sur ces données et renvoient des
réponses en fonction de ces opérations. Les requêtes HTTP peuvent être de type
GET ou POST, selon qu’elles envoient les données en clair dans l’URL ou non.
— Le fichier "urls.py" : c’est là que nous configurons les URL de notre application en
spécifiant les vues qui doivent être appelées pour chaque URL.
— Le dossier "templates/" : c’est là que nous stockons les fichiers de modèles HTML
qui définissent la structure et l’apparence de nos pages Web. Les fichiers de modèle
peuvent inclure des balises et des variables qui peuvent être remplacées par des
données dynamiques générées par Django.
— Le dossier "static/" : c’est là que nous stockons les fichiers statiques tels que les
fichiers CSS, JavaScript et les images, qui sont utilisés pour personnaliser l’appa-
rence de notre site.
— Le fichier "forms.py" : c’est là que nous pouvons définir les formulaires de notre
application.
— Le fichier "admin.py" : c’est là que nous pouvons définir l’interface d’administration
pour notre application. Cette interface peut être utilisée pour gérer les données
stockées dans la base de données.
En résumé, pour créer une application Django, utilisons la commande "startapp" pour
générer la structure de base de l’application. Ensuite, personnalisons les fichiers tels que
"models.py", "views.py", "urls.py", "templates/", etc., pour implémenter les fonctionnalités
spécifiques de notre application.
class MyModel(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
Une fois que nous avons défini nos modèles, nous créons les tables correspondantes
dans la base de données. Pour ce faire, on utilise les commandes suivantes :
100
Chapitre 8 8.7. Étape 6 : Vues et logique de l’application
Lorsque nous apportons des modifications aux modèles de données d’une application
Django, ces modifications ne sont pas automatiquement appliquées à la base de données.
Au lieu de cela, Django utilise les fichiers de migration pour décrire les changements
apportés aux modèles de données et générer le code SQL nécessaire pour mettre à jour la
base de données en conséquence.
Les fichiers de migration sont générés automatiquement à l’aide de la commande
python manage.py makemigrations. Cette commande examine les modèles de données
de l’application et génère un nouveau fichier de migration pour chaque changement dé-
tecté.
Une fois que les fichiers de migration ont été générés, nous pouvons appliquer les
modifications à la base de données en utilisant la commande python manage.py migrate.
Cette commande exécute chaque fichier de migration dans l’ordre chronologique pour
mettre à jour la base de données en conséquence.
En résumé, les fichiers de migration sont des fichiers Python générés automatiquement
par Django qui permettent de modifier la structure de la base de données en fonction des
changements apportés aux modèles de données de l’application. Ces fichiers sont utilisés
pour générer le code SQL nécessaire pour mettre à jour la base de données et sont appliqués
à la base de données à l’aide de la commande python manage.py migrate.
def my_view(request):
return HttpResponse("Hello, World!")
Dans cet exemple, la fonction my_view est une vue qui prend en paramètre un objet
request représentant la requête HTTP entrante. La vue renvoie ensuite une réponse
HTTP en utilisant la classe HttpResponse. Dans ce cas, la réponse renvoie simplement le
texte "Hello, World !".
nous avons définir des vues plus complexes qui effectuent des opérations sur les modèles
de données, accèdent à des bases de données, ou rendent des templates HTML dynamiques.
Les vues sont configurées dans le fichier urls.py de notre application pour associer des
URLs spécifiques à des vues spécifiques.
En résumé, les vues définissent la logique de notre application et gèrent les requêtes
HTTP entrantes. nous avons les définir en tant que fonctions ou classes dans le fichier
views.py de notre application.
101
Chapitre 8 8.9. Étape 8: Templates
urlpatterns = [
path(’hello/’, views.my_view, name=’my_view’),
]
Dans cet exemple, nous configurons une route URL qui correspond à l’URL hello/.
Cette URL est associée à la vue my_view de notre application. L’argument name est utilisé
pour donner un nom à cette route URL.
Dans le fichier urls.py principal de notre projet (myproject/urls.py), nous avons
inclure les URLs de notre application. Par exemple :
urlpatterns = [
path(’admin/’, admin.site.urls),
path(’myapp/’, include(’myapp.urls’)),
]
Dans cet exemple, nous incluons les URLs de l’application myapp en utilisant la fonc-
tion include. Toutes les URLs qui commencent par myapp/ seront ensuite gérées par les
routes URL définies dans myapp/urls.py.
En résumé, le fichier urls.py est utilisé pour configurer les routes URL de notre
application. nous associons les vues aux URLs spécifiques, puis nous avons inclue ces
URLs dans le fichier urls.py principal de notre projet.
class MyModel(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
Dans cet exemple, nous définissons un modèle MyModel qui a deux champs : name de
type CharField et description de type TextField.
Une fois que nous avons défini vos modèles, nous avons crée les tables correspondantes
dans la base de données. Pour ce faire, nous avons utiliser les commandes makemigrations
et migrate :
102
Chapitre 8 8.10. Étape 9 : Static files and media files
INSTALLED_APPS = [
# ...
’django.contrib.staticfiles’,
# ...
]
Dans notre fichier settings.py, nous avonségalement configurer les variables STATIC_URL
et MEDIA_URL pour spécifier les URL de base pour les fichiers statiques et les fichiers mé-
dias.
STATIC_URL = ’/static/’
MEDIA_URL = ’/media/’
On assures que les dossiers static/ et media/ existent dans notre projet Django et que
leurs chemins sont correctement configurés dans les variables STATIC_ROOT et MEDIA_ROOT.
Ces variables spécifient les chemins absolus des dossiers où les fichiers statiques et les
fichiers médias seront stockés.
En résumé, pour gérer les fichiers statiques et les fichiers médias dans notre application
Django, nous avons crée un dossier static/ pour les fichiers statiques, configurer les
variables STATIC_URL et MEDIA_URL pour spécifier les URL de base, et vérifier que les
dossiers static/ et media/ existent et sont correctement configurés dans les variables
STATIC_ROOT et MEDIA_ROOT.
103
Chapitre 8 8.11. Étape 10 : Formulaire
class MyForm(forms.Form):
name = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
Dans notre vue, nous avons utiliser ce formulaire pour gérer les soumissions et l’afficher
dans le template :
from django.shortcuts import render
from .forms import MyForm
def my_view(request):
form = MyForm()
if request.method == ’POST’:
form = MyForm(request.POST)
if form.is_valid():
# Traitement des données du formulaire
return HttpResponseRedirect(’/success/’)
104
Chapitre 8 8.13. Conclusion
8.13 Conclusion
En conclusion, ce chapitre nous a guidés à travers les étapes de réalisation d’un site
web avec Django. Nous avons commencé par l’installation de Django et la création d’un
nouveau projet Django. Ensuite, nous avons exploré la structure des fichiers dans un
projet Django, en mettant l’accent sur le dossier de
configuration, le dossier des applications, les fichiers statiques, les templates et les fichiers
de migration.
Nous avons également abordé la configuration du projet Django à travers le fichier
"settings.py", où nous pouvons définir divers paramètres tels que les bases de données, les
applications installées, les middlewares, etc. Cette étape est essentielle pour personnaliser
le comportement global de l’application.
Enfin, nous avons examiné la création d’une application Django, qui est un module
indépendant qui peut être réutilisé dans différents projets Django. Nous avons découvert
les éléments clés d’une application Django tels que les modèles de données, les vues et les
fichiers de configuration.
En suivant ces étapes, nous sommes maintenant prêts à développer notre application
web avec Django en utilisant les connaissances acquises dans ce chapitre.
105
Chapitre 9
Réalisation web
9.1 Introduction
Dans le cadre de notre projet, nous avons réalisé un site web complet utilisant les
technologies HTML, CSS, JavaScript, Spline et Django Frontend. Ce site web a pour
objectif de fournir une interface conviviale pour la gestion des pylônes, en incluant un
formulaire de soumission d’informations, une authentification sécurisée, l’affichage des
résultats de détection et un tableau de bord pour visualiser les informations importantes
sur les pylônes.
9.2 HTML
HTML (HyperText Markup Language) est le langage de balisage standard utilisé pour
structurer et présenter le contenu des pages web. Il fournit une base solide pour la création
de sites web en définissant la structure des éléments, tels que les en-têtes, les paragraphes,
les listes, les liens, les images, etc.
En utilisant HTML, nous avons pu décrire la structure de nos pages web en utilisant
des balises pour définir les différentes parties de la page. Par exemple, la balise <header>
pour l’en-tête, la balise <nav> pour la navigation, la balise <section> pour les sections
principales, la balise <footer> pour le pied de page, etc.
HTML est un langage simple à apprendre et à utiliser. Il est compatible avec tous les
navigateurs web et fournit une base solide pour le développement web. Grâce à HTML,
nous avons pu créer la structure de notre site web et organiser les différents éléments de
manière logique et cohérente.
9.3 CSS
CSS (Cascading Style Sheets) est un langage de feuille de style utilisé pour styliser et
mettre en forme les pages web. Il permet de contrôler l’apparence visuelle des éléments
HTML en définissant des règles de style.
En utilisant CSS, nous avons pu personnaliser l’apparence de notre site web en défi-
nissant des règles de style pour les différents éléments HTML. Par exemple, nous avons
pu définir la couleur du texte, la police, la taille des polices, les marges, les bordures, les
arrière-plans, etc.
CSS nous a permis de créer un design attrayant et cohérent pour notre site web. Il
offre également des fonctionnalités avancées telles que les sélecteurs, les pseudo-classes,
106
Chapitre 9 9.4. JavaScript
les transitions et les animations, qui nous ont permis de créer des effets visuels et des
transitions fluides.
9.4 JavaScript
JavaScript est un langage de programmation de haut niveau principalement utilisé
pour rendre les pages web interactives et dynamiques. Il permet d’ajouter des fonctionna-
lités avancées telles que des effets visuels, des validations de formulaires, des interactivités
en temps réel et bien plus encore.
En utilisant JavaScript, nous avons pu ajouter des fonctionnalités interactives à notre
site web. Par exemple, nous avons pu valider les formulaires côté client pour s’assurer que
les données saisies sont correctes, implémenter des boutons cliquables pour effectuer des
actions, créer des animations, manipuler et afficher des données en temps réel, etc.
JavaScript est largement utilisé et pris en charge par tous les navigateurs modernes.
Il offre une grande flexibilité et une large gamme de bibliothèques et de frameworks pour
faciliter le développement web.
9.6 Spline
Spline est un outil de conception 3D que nous avons utilisé pour créer des éléments
visuels dynamiques pour notre site web. Nous avons utilisé Spline pour concevoir le tableau
de bord, qui affiche des informations détaillées sur les pylônes. La figure 9.88 montre une
capture d’écran du tableau de bord.
9.7 Authentification
La page d’authentification est une partie essentielle de notre site web, car elle garantit
que seuls les utilisateurs autorisés peuvent accéder aux fonctionnalités du site. Cette
107
Chapitre 9 9.7. Authentification
108
Chapitre 9 9.8. Inscription
9.8 Inscription
La page d’inscription joue un rôle crucial dans notre site web, car elle permet aux
nouveaux utilisateurs de créer un compte et d’accéder aux fonctionnalités du site. Elle
offre une interface conviviale et intuitive pour faciliter le processus d’inscription.
Lorsque les utilisateurs accèdent à la page d’inscription, ils sont invités à fournir des
informations personnelles telles que leur nom, leur adresse e-mail et leur mot de passe. Ces
informations sont essentielles pour créer un compte unique et sécurisé pour chaque utili-
sateur. Des contrôles de validation sont mis en place pour s’assurer que les informations
fournies sont correctes et complètes.
Une fois que les utilisateurs ont rempli tous les champs requis et soumis le formulaire
d’inscription, leurs informations sont vérifiées et enregistrées dans la base de données.
Un processus de confirmation par e-mail peut également être mis en place pour garantir
l’authenticité de l’utilisateur.
9.9 Formulaire
9.10 Formulaire de Soumission
Nous avons créé un formulaire de soumission qui permet aux utilisateurs de saisir
des informations sur les pylônes. Les utilisateurs peuvent remplir les champs requis et
soumettre le formulaire. Les informations saisies seront ensuite enregistrées dans la base
de données. Cette fonctionnalité permet de collecter facilement des données sur les pylônes.
La figure 9.92 montre une capture d’écran du formulaire de soumission.
109
Chapitre 9 9.11. Affichage des Résultats
110
Chapitre 9 9.12. Tableau de Bord
9.13 Conclusion
En conclusion, la réalisation de notre site web a nécessité l’utilisation de plusieurs tech-
nologies clés, notamment HTML, CSS, JavaScript, Spline et Django Frontend. Chacune
de ces technologies a joué un rôle important dans la création d’une expérience utilisateur
attrayante, interactive et fonctionnelle.
Grâce à HTML, nous avons pu structurer le contenu de nos pages web et définir leur
mise en page globale. CSS nous a permis de personnaliser l’apparence visuelle de notre
site web, en ajoutant des styles et des effets visuels attrayants. JavaScript a ajouté une
dimension interactive à notre site, offrant des fonctionnalités telles que des validations de
formulaires, des animations et des interactions en temps réel.
Nous avons également utilisé l’outil Spline pour créer des visualisations graphiques dy-
namiques et captivantes. Ces visualisations ont enrichi l’expérience utilisateur en affichant
les résultats de détection de manière visuellement attrayante et facile à comprendre.
Enfin, Django Frontend nous a permis de gérer efficacement les fichiers statiques, de
structurer notre code frontend et de faciliter l’intégration avec Django. Cela a contribué
111
Chapitre 9 9.13. Conclusion
112
Conclusion Générale
113
Conclusion Générale
d’inspection des pylônes. Grâce à l’intégration de l’IA, des drones et du serveur Django,
il est possible de réaliser des inspections plus rapides, plus précises et plus fiables, contri-
buant ainsi à assurer la fiabilité et la durabilité des infrastructures essentielles. Ce projet
ouvre également la voie à de nouvelles perspectives de recherche et de développement
dans le domaine de l’inspection des infrastructures, offrant des possibilités d’application
étendues et ouvrant la voie à un avenir prometteur pour les opérations d’inspection des
pylônes et d’autres infrastructures critiques. Les avancées futures dans l’IA, la robotique
et les technologies de l’information promettent de rendre ces systèmes encore plus perfor-
mants, plus autonomes et plus intégrés, permettant ainsi une gestion efficace et proactive
des infrastructures pour répondre aux besoins de notre société en constante évolution.
114
Bibliographie
115