Application Deep Learning pour Signalisation
Application Deep Learning pour Signalisation
UNIVERSITE D’ANTANANARIVO
----------------------
ECOLE SUPERIEURE POLYTECHNIQUE
-----------------------
MENTION TELECOMMUNICATION
MEMOIRE
en vue de l’obtention du
DIPLOME de Licence
Domaine : Sciences de l’Ingénieur
Mention : Télécommunication
Parcours : Radiocommunication (RC)
Président :
M. ANDRIAMIASY Zidora
Examinateur :
Directeur de mémoire :
Avant toute chose, je rends grâce à Dieu qui m’a donné la force, courage et surtout la santé
afin de bien mener à la réalisation de ce projet.
Mes vifs remerciements à tous les enseignants et les personnels administratifs de l’ESPA.
J’exprime toute ma reconnaissance envers ma famille, mes amis et tous ceux qui ont contribué
à l’accomplissement de ce travail.
i
TABLE DES MATIERES
REMERCIEMENTS ................................................................................................................. i
NOTATIONS ............................................................................................................................ v
1.3 Définitions........................................................................................................................ 3
ii
2.2.2 Caractéristiques ....................................................................................................... 20
iii
3.3.4 Jupyter notebook ..................................................................................................... 42
ANNEXES ............................................................................................................................... 60
BIBLIOGRAPHIE ................................................................................................................. 66
RENSEIGNEMENTS ............................................................................................................ 68
iv
NOTATIONS
1. Minuscule latine
𝑤𝑖 Poids synaptiques
X Variable
Y Variable
Z Variable
2. Majuscule latine
C Contraste
M Niveau de gris
N Nombre de pixel
X Variable
v
Y Variable
3. Minuscule grecque
𝞼 Fonction softmax
4. Abréviations
IA Intelligence artificielle
OS Operating System
vi
PNG Portable Network Graphic
RCNN Region-basedCNN
vii
INTRODUCTION GENERALE
Depuis déjà longtemps et surtout à Madagascar, le transport routier revêt une grande
importance : il joue un rôle essentiel dans la connectivité nationale en permettant de relier
différentes régions et dans la distribution des marchandises. Les routes sont actuellement le
principal moyen pour accéder aux services de santé et d’éducation. De plus, ce secteur crée
des emplois que ce soit direct ou indirect dans le pays et favorise l’épanouissement des autres
secteurs d’activités comme le tourisme. Malgré l’importance du transport routier, de
nombreux problèmes sont souvent rencontrés dans ce domaine. L’accident est un des
principaux défis et de plus en plus fréquent. Les idées proposées pour solutionner à ce
problème se concentrent souvent sur le renouvèlement et l’amélioration des infrastructures
routiers alors que d’autres projets sont envisageable vu l’innovation technologique de nos
jours.
Ainsi, nous avons décidé de proposer dans cet œuvre un projet applicable dans le domaine du
transport routier. Il s’agit d’un système qui a pour but de détecter et d’identifier les panneaux
de signalisation que l’on trouve dans la plupart des routes d’où le titre : « REALISATION
D’UNE APPLICATION DETECTRICE DE PANNEAUX DE SIGNALISATION EN
UTILISANT LE DEEP LEARNING ». L’élaboration de cette application nécessite plusieurs
notions comme le traitement d’image, la vision par ordinateur et le plus important :
l’intelligence artificielle.
Pour en savoir plus, nous allons suivre le plan suivant : tout d’abord, nous allons voir l’état de
l’art sur l’intelligence artificielle ; ensuite, il y aura une explication de la détection d’image en
utilisant l’IA ; après, des connaissances de base sur les outils de programmations seront
introduites pour nous conduire enfin à la conception de l’application détectrice de panneaux
de signalisation.
1
CHAPITRE 1
ETAT DE L’ART SUR L’INTELLIGENCE ARTIFICIELLE
1.1 Introduction
« Je propose que l’on considère la question, ’Une machine peut-elle pensée ?’ » disait Le
professeur Alan Turing en 1950. Cette question du célèbre chercheur Alan Turing a soulevé
un certain nombre d’hypothèse faisant référence à un nouveau concept qui est l’Intelligence
artificielle ou IA. Actuellement, l’IA se présente comme un moyen pour faciliter diverses
tâches des êtres humains. Comme dans la réalisation, nous allons implémenter un mécanisme
d’intelligence artificielle, il est important d’avoir des notions sur cette dernière et sur ses
domaines d’application.
1.2 Historique
Pendant l’année 1950 et 1960, les chercheurs en IA ont réussi à développer des programmes
informatiques capables de résoudre des problèmes simples tels que la résolution de problèmes
mathématiques, la reconnaissance de caractères et l’aide à la prise de décision.
L’Intelligence Artificielle a connu un progrès relativement lent dans les années 1970 et 1980
dû à des complexités des tâches à accomplir et à des difficultés à obtenir des ordinateurs
suffisamment puissants pour gérer de grands ensembles de données. Cependant, cette période
a vu l'émergence de nouvelles approches pour résoudre les problèmes d'IA, notamment
l'apprentissage automatique, la recherche en logique et les systèmes experts.
2
Dans les années 1990, l'IA a connu un renouveau grâce à la montée en puissance des
ordinateurs et à l'essor d'Internet. Cette période a vu la naissance de nouveaux domaines de
recherche, tels que l'apprentissage profond et les réseaux neuronaux.
1.3 Définitions
1.3.1 Etymologiquement
L’intelligence est la capacité d’un être à comprendre, apprendre, raisonner, résoudre des
problèmes et s’adapter à de nouvelles situations. Il existe une multitude d’intelligence si on se
réfère à la théorie d’intelligences multiple proposé par le professeur Howard Gardner.
« Artificielle » dans l’intelligence artificielle veut dire « conçu par et créé pour les humains ».
[3]
L’intelligence artificielle est donc une discipline scientifique qui étudie et développe des
théories, des techniques et des systèmes d’application utilisés pour simuler l’intelligence
humaine.
- L’intelligence artificielle est définie par Marvin Minsky, qui fut un pionnier de l’IA,
comme : « la construction de programmes informatiques qui s'adonnent à des tâches
qui sont pour l'instant, accomplies de façon plus satisfaisante par des êtres humains car
elles demandent des processus mentaux de haut niveau tels que : l'apprentissage
perceptuel, l'organisation de la mémoire et le raisonnement critique ». [1]
- Selon John McCarthy, le scientifique qui a inventé le terme « intelligence artificielle »
en 1956, l’IA est « la science et l’ingénierie de la création de machines intelligentes,
en particulier des programmes informatiques intelligents ».
3
1.3.3 Autres définitions
L'intelligence artificielle (IA) se définit par un domaine de l'informatique qui se concentre sur
la création de systèmes informatiques capables d'exécuter des tâches qui nécessitent
normalement l'intelligence humaine. L'objectif de l'IA est de développer des machines
capables de penser, d'apprendre, de raisonner, de reconnaître des motifs, de comprendre le
langage naturel, de percevoir l'environnement, de résoudre des problèmes complexes et
d'interagir avec les humains de manière naturelle.
Une autre définition très simple de l’intelligence artificielle est que c’est l’effort visant à
automatiser les tâches intellectuelles normalement effectuées par les humains. [4]
Plus précisément, le machine learning est un des domaines de recherche principal de l’IA qui
permet aux ordinateurs d’apprendre à partir des données et d’améliorer leurs performances au
fil du temps sans être explicitement programmés.
L’apprentissage supervisé se concentre sur la conception d’un modèle reliant des données
d’apprentissage à un ensemble de valeurs de sortie. Cela veut dire qu’on fournit à l’algorithme
d’apprentissage des données comportant des solutions désirées, qui sont les étiquettes.
Pour ce faire, le modèle fait correspondre toutes les entrées aux sorties et effectue une
évaluation simple sur les sorties dans le but de classifier les données inconnues.
4
Prenons l’exemple d’un modèle qui prédit les jours appropriés pour faire des exercices. Cette
prédiction se fait à partir des variables ou attributs appelés « caractéristiques d’une
observation » ou « features » en anglais. Dans le cas présent, les caractéristiques peuvent être
le temps, la température ou encore la vitesse du vent. Chaque état de ces caractéristiques
correspond à une étiquette disant si on doit faire des exercices ou pas. (Régression)
Ce type d’apprentissage conçoit un modèle basé sur des données d’entrées non-étiquetées. Le
système est donc autodidacte puisqu’il doit trouver tout seul les points communs entre les
données d’apprentissage.
En effet, les algorithmes d’apprentissage non supervisé modélisent des échantillons très
similaires, calculent la similarité entre les échantillons nouveaux et existants pour pouvoir
prédire et classifier les échantillons nouveaux en fonction de leur similarité.
5
suffit pour que le système soit capable d’identifier les personnes qui figurent sur chaque
photo.
L’apprentissage par renforcement diffère totalement des types d’apprentissages qu’on a vus
précédemment car au lieu d’utiliser des données, on fait appel à des expériences. Le modèle
apprenne donc un comportement à partir de l’environnement dans le but de maximiser la
valeur de la fonction de signal de récompense ou bien renforcement.
Pour pouvoir concevoir un système basé sur l’apprentissage automatique, trois éléments sont
nécessaires voire primordiaux : les points d’entrées, l’exemple des résultats prévus à la sortie
et une façon de mesurer l’efficacité de l’algorithme.
- Points de données à l’entrée : Ce sont les données à traiter et à tester dans le modèle.
Par exemple, si la tâche consiste à identifier des images, les données d’entrée peuvent
être des images.
- Exemples de résultats prévus à la sortie : Ce sont les solutions ou bien réponses
attendues générées par le modèle. Dans le cas d’un modèle qui traite et identifie les
images, ces exemples de résultats peuvent être les classes des images ou bien le nom
des images.
- Une façon de mesurer l’efficacité de l’algorithme : Elle s’agit d’un moyen pour
déterminer la différence entre la sortie actuelle de l’algorithme et sa sortie attendue.
Ceci est nécessaire afin d’ajuster le fonctionnement de l’algorithme du modèle : cette
étape d’ajustement est appelée « apprentissage ».
6
1.4.2.2 L’algorithme du machine learning
Dans la programmation classique, les humains doivent saisir des règles et des données à
traitées selon ces règles et en sortent des réponses tandis qu’avec l’apprentissage automatique,
les humains n’ont qu’à saisir les données avec les réponses attendues de ces données pour que
le programme puisse générer les règles. En plus, ces règles peuvent être réutilisées avec de
nouvelles données pour produire des réponses originales. Cette grande différence est illustrée
par les deux figures ci-dessous.
7
Figure 1.01 : Figure 1.02 : Algorithme du Machine Learning
L’apprentissage automatique est une des approches révolutionnaires depuis l’année 1990, elle
a permis de résoudre de nombreux problème jusqu’à ce jour. Voici quelques tâches
principales résolues par ce concept :
1.4.3.1 Classification
Les algorithmes de classification sont utilisés lorsque la variable à prédire est discrète. Ces
variables d’entrées peuvent être des valeurs réelles ou discrètes. Il est courant que les modèles
de classification prédisent des valeurs continues comme les probabilités d’appartenance à
chaque classe de sortie. Une probabilité prédite peut être convertie en une valeur de classe en
sélectionnant l'étiquette de la classe qui présente la probabilité la plus élevée.
8
1.4.3.2 Régression
Quand le modèle de Machine Learning doit prédire une valeur continue ou bien une variable
dépendante basée sur un ou plusieurs caractéristiques d’entrées, on fait appel à l’algorithme
de régression.
Les algorithmes de régression sont utilisés pour modéliser la relation entre les entrées et la
sortie et faire des prédictions basées sur cette relation. En général, le but de la régression est
de créer un modèle capable de prédire avec précision la sortie en fonction des caractéristiques
d’entrée et de bien comprendre la relation sous-jacente entre les caractéristiques d’entrée et la
sortie. [7]
La technique de régression s’applique dans divers domaines comme la prédiction des prix de
voiture, prédiction de température ou encore les épargnes.
1.4.3.3 Clustering
Le clustering se base sur la similarité des données d’entrées. Il utilise un algorithme qui a pour
but de diviser des données ou des points de données en « cluster » de telle sorte que les
données possédant des points communs se regroupent entre elles.
C’est une méthode d’apprentissage non supervisé qui constitue une technique courante
d’analyse de données statistiques utilisée dans de nombreux domaines.
C’est une nouvelle approche d’apprentissage favorisée par les critères suivants :
9
Le terme « deep » dans le deep lerning n’est pas une référence à une quelconque forme de
compréhension plus profonde obtenue par l’approche ; il représente plutôt cette idée de
couches successives de représentations. Le nombre de couches d’un modèle de données
s’appelle la profondeur du modèle et plus de modèle est profond, plus il est précis.
Depuis déjà longtemps, les humains ont compris que leur capacité de réfléchir vient du
cerveau, un organe fascinant composé d’environ 100 milliards de cellules nerveuses : les
neurones. Ces neurones constituent un réseau câblé très précis et sont constitués de trois
parties : le corps cellulaire, les dendrites et l’axone.
Le corps cellulaire est le centre de contrôle du neurone, son rôle est d’effectuer la somme des
informations qui lui parviennent. Il traite ensuite les informations et renvoie le résultat sous
forme de signaux électrique, du corps cellulaire à l’entrée des autres neurones au travers de
son axone. L’axone sert donc de moyen de transport pour les signaux émis par le neurone.
Quant aux dendrites, ils sont les récepteurs principaux des neurones, par lesquelles transite
l’information venue de l’extérieur vers le corps cellulaire. On remarque que le lien physique
entre deux neurones se fait grâce aux synapses.
10
𝑥𝑛 : entrées
𝑦𝑚 : sorties
𝑊1
𝐸1
Σ Sortie
𝐸𝑛
𝑊𝑛
Seuil
11
𝐸𝑖 : Entrées
𝑊𝑖 : Poids synaptiques
a. Poids synaptiques
Ce sont des coefficients de pondération accordés à chacune des entrées permettant de faire
une modification importante de certaines valeurs par rapport aux autres entrées.
L’apprentissage consiste alors à trouver leurs valeurs optimales afin d’obtenir la sortie voulue.
b. Fonction d’agrégation
Elle s’agit d’une fonction qui permet de calculer une unique valeur à partir des entrées et des
poids correspondants. Il en existe plusieurs types mais les plus utilisées sont les suivantes :
- La somme pondérée
Elle consiste à calculer la somme de toutes les entrées. Le calcul de distance toutes les entrées
multipliées par leur poids c’est-à-dire :
∑ 𝐸𝑖 ∗ 𝑊𝑖
(1.01)
𝑖=1
𝐸𝑖 : Entrées
𝑊𝑖 : Poids synaptiques
- Calcul de distance
Le calcul des distances consiste plutôt à comparer les entrées aux poids (qui sont les entrées
attendues par le neurone), et calculer la distance entre les deux. Dans ce cas la distance est
donnée par :
∑(𝐸𝑖 − 𝑊𝑖 )2
(1.02)
𝑖=1
𝐸𝑖 : Entrées
𝑊𝑖 : Poids synaptiques
12
c. Seuil
Le seuil ou bien le biais est une valeur qui sert à indiquer quand le neurone doit agir.
d. Fonction d’activation
C’est une fonction qui a pour rôle d’associer à chaque valeur agrégée une valeur de sortie
dépendant du seuil, ce qui veut dire qu’après avoir obtenu la valeur donnée par la fonction
d’agrégation, le neurone compare cette dernière avec le seuil et décide de la sortie en utilisant
cette fonction. [9]
Il y a plusieurs types de fonction d’activation mais les plus utilisées sont : la fonction de
Heaviside, la fonction sigmoïde et la fonction softmax.
- La fonction Heaviside
Elle s’agit d’une fonction permettant d’obtenir des sorties binaires : 1 sil la valeur agrégée
calculée est plus importante que le seuil, 0 dans le cas contraire.
0 𝑠𝑖 𝑥 < 0 (1.03)
𝐻(𝑥) = {
1 𝑠𝑖 𝑥 ≥ 1
Son avantage est qu’elle peut résoudre des problèmes de classification en indiquant qu’un
objet appartient ou non à une classe donnée. Toutefois, la fonction Heaviside n’arrive pas à
indiquer à quel point une valeur est forte.
- La fonction sigmoïde
Cette fonction est une des fonctions d’activations réputées et est définie par la relation
mathématique :
1 (1.04)
𝑓(𝑥) =
1 + 𝑒 −𝑥
La fonction sigmoïde est une fonction dérivable ce qui lui permet de résoudre le problème de
la fonction Heaviside puisque cette dérivabilité permet de savoir vers quelle direction aller pour
améliorer les résultats.
13
- La fonction softmax
𝑒 𝑧𝑗 (1.05)
𝜎(𝑧)𝑗 =
∑𝐾
𝑘=1 𝑒
𝑧𝑘
K : nombre d’entrées
Le perceptron fonctionne comme suit : les entrées et les poids génère une valeur grâce à la
fonction d’agrégation ou fonction de combinaison. Si cette valeur dépasse le seuil indiqué, un
signal est produit et dans le cas contraire, aucun résultat n’est émis.
Dans ce réseau, les neurones sont liés entre eux par des liens de connexions par lesquels
circulent les informations sur les données d’entrées.
Un réseau de neurone comprend ; une couche d’entrée, une couche de sortie et différentes
couches cachées. Les données sont transmises d’une couche à une autre, C’est-à-dire que les
résultats de calculs sont transmis d’un neurone à l’autre, et chacune des couches conserve un
état interne appelé signal d’activation.
14
Couche d’entrée Couche de sortie
Couches cachées
Le but d’un réseau de neurone est de trouver les valeurs idéales et appropriées pour chacun de
ses paramètres. Initialement, les poids du réseau se voient attribuer des valeurs aléatoires.
Ensuite on effectue la normalisation des données pour faciliter leur manipulation. Après, on
procède à la permutation des données d’entrainement et chaque couche traitera les données en
fonction des poids affectés. Puis on obtient une prédiction qui peut être très différente de la
sortie souhaitée. Le rôle de la fonction de coût ou bien fonction de perte est de calculer
l’erreur de prédiction du réseau par rapport à la réponse correcte. L’optimiseur peut
maintenant utiliser cette erreur comme signal de rétroaction pour ajuster un peu la valeur des
paramètres, dans une direction qui réduira la perte pour l’exemple actuel
L’apprentissage d’un réseau de neurone se fait en plusieurs étapes illustrées par la figure
suivante :
15
Entrées x
Couche
Poids (transformation de données)
Poids Couche
(transformation de données)
Fonction de coût
Erreur
Les réseaux de neurone récurrents ont été créés dans les années 1980. Ils sont utilisés pour
traiter des séquences de données car ils possèdent des connexions récurrentes qui leur
permettent de conserver des informations sur les états précédents. Cela veut dire qu’il existe
non seulement des liens d'une couche vers les suivantes, mais aussi vers les couches
précédentes. Une autre façon de penser les RNN est qu’ils ont une « mémoire » qui capture
l’information sur ce qui a été calculé jusqu’ici.
Théoriquement, les RNN peuvent utiliser des informations dans des séquences arbitrairement
longues, mais dans la pratique, on les limite à regarder seulement quelques étapes en arrière.
Les réseaux de neurone convolutifs désignés par l’acronyme CNN, de l’anglais Convolutional
Neural Network, sont des réseaux particulièrement adaptés à la vision par ordinateur, car ils
16
utilisent des opérations de convolution pour extraire des caractéristiques des images. Les
premières versions ont été développées par Yann LeCun aux Bell Laboratories vers 1989.
Les centaines de couches présentes dans un réseau CNN effectuent des opérations qui
modifient les données dans l’objectif d’apprendre les caractéristiques spécifiques à ces
données. [5]
De nos jours, l’intelligence artificielle est versatile c’est-à-dire qu’il s’applique dans divers
secteurs. Le figure 1.07 ne montre qu’une partie du domaine d’application de l’intelligence
artificielle actuellement puisqu’aujourd’hui, ce concept fait partie de la vie de tous les jours et
de l’industrie. L’IA a le potentiel de transformer de nombreux aspects dans la vie humaine,
elle permet l’automatisation de diverses tâches et une prise de décision rapide et améliorée.
Ce domaine solutionne de nombreux problèmes complexes dans plusieurs domaines comme
dans la santé, la sécurité et contribue surtout à résoudre des problèmes dans l’échelle
mondiale. [3]
17
Contenu d’article Circuit intégré
Système expert
Service client
intelligent
Technologies de
Système de BDD
recommandation
…
…
1.7 Conclusion
18
CHAPITRE 2
DETECTION D’OBJET DANS UNE IMAGE
2.1 Introduction
La détection d’objet est une discipline inclue dans le concept de la vision par ordinateur. Elle
peut être appliquée dans de nombreux domaines que ce soit dans la vie quotidienne ou dans
les industries et entreprises. L’implémentation du mécanisme de la détection d’objet nécessite
beaucoup de notions sur les images, sur les étapes de détection à suivre et dans ce chapitre,
noua allons en aborder certaines d’entre elles. Tout d’abord, nous allons parler des images,
ensuite nous allons expliquer les étapes de la vision par ordinateur et à la fin, l’influence de
l’intelligence artificielle sur le concept de la détection d’objet.
2.2.1 Définition
2.2.1.1 Image
Une image est une représentation d’une personne, d’un objet par la peinture, la sculpture, le
dessin, la photographie, le film, etc. [11]
Elle peut être décrite sous la forme d’une fonction I(x,y) de brillance analogique continue,
définie dans un domaine borné, tel que x et y sont les coordonnées spatiales d’un point de
l’image et I est une fonction d’intensité lumineuse et de couleur.
Image
y
Figure 1.09 : Figure 2.01 : Image analogique
(x,y) : coordonnées spatiales d’un point de l’image
Sous cet aspect, l’image est inexploitable par la machine, ce qui nécessite sa numérisation.
19
2.2.1.2 Image numérique
L’image numérique, désignée aussi par le terme scène, est très différents des images obtenues
à l’aide d’un appareil photo classique, ou dessinées sur du papier.
C’est une image dont la surface est divisée en éléments de tailles fixes appelés cellules ou
pixels. Chacun de ces éléments possède comme caractéristique un niveau de gris.
Une image numérique est représentée par une matrice bidimensionnelle de valeurs
numériques 𝑓(𝑥, 𝑦) où x et y sont les coordonnées cartésiennes d’un point de l’image et
𝑓(𝑥, 𝑦) définit le niveau de gris en un point. [11]
2.2.2 Caractéristiques
2.2.2.1 Pixel
Le pixel est le plus petit élément que peuvent manipuler les matériels et logiciels d’affichage
ligne ou d’impression. Il peut recevoir une structure et une quantification. [11]
Pour les images 3D, le pixel est appelé « voxel », et représente un volume élémentaire.
2.2.2.2 Dimension
20
La dimension se présente sous forme de matrice dont les éléments sont des valeurs
numériques représentatives des intensités lumineuses (pixels). Donc la dimension D d’une
image est le nombre de ligne A multiplié par le nombre de colonne B de cette matrice.
𝐷 =𝐴∗𝐵 (2.01)
2.2.2.3 Résolution
C’est la clarté ou la finesse de détails atteinte par un moniteur ou une imprimante dans la
production d’images. Sur les moniteurs d’ordinateurs, la résolution est exprimée en nombre
de pixels par unité de mesure (pouce ou centimètre). On utilise aussi le mot résolution pour
désigner le nombre total de pixels affichables horizontalement ou verticalement sur un
moniteur ; plus grand est ce nombre, meilleure est la résolution.
2.2.2.4 Bruit
Un bruit (ou parasite) dans une image est considéré comme un phénomène de brusque
variation de l’intensité d’un pixel par rapport à ses voisins, il provient de l’éclairage des
dispositifs optiques et électroniques du capteur.
2.2.2.5 Histogramme
L’histogramme des niveaux de gris ou des couleurs d’une image est une fonction qui donne la
fréquence d’apparition de chaque niveau de gris (couleur) dans l’image. Pour diminuer
l’erreur de quantification, pour comparer deux images obtenues sous des éclairages différents,
ou encore pour mesurer certaines propriétés sur une image, on modifie souvent l’histogramme
correspondant.
Il permet de donner un grand nombre d’information sur la distribution des niveaux de gris
(couleur) et de voir entre quelles bornes est repartie la majorité des niveaux de gris (couleur)
dans les cas d’une image trop claire ou d’une image trop foncée.
Il peut être utilisé pour améliorer la qualité d’une image (Rehaussement d’image) en
introduisant quelques modifications, pour pouvoir extraire les informations utiles de celle-ci.
21
Voici quelques exemples d’histogramme :
M : le niveau de gris
D’après les histogrammes de la figure 1.3, on peut déjà soutirer les informations suivantes :
- L’image possédant l’histogramme b est une image trop sombre car la majeure partie
de pixel se trouve dans les bas niveaux de gris.
- L’image possédant l’histogramme h est une image trop claire car la majeure partie de
pixel se trouve dans les hauts niveaux de gris.
- L’image possédant l’histogramme m est une image floue qui manque de contraste car
la majeure partie de pixel se trouve dans les moyens niveaux de gris.
- L’image possédant l’histogramme e est une image qui manque de nuance
intermédiaire car la majeure partie de pixel se trouve dans les niveaux de gris
extrêmes.
Les contours représentent la frontière entre les objets de l’image, ou la limite entre deux
pixels dont les niveaux de gris représentent une différence significative. Les textures décrivent
22
la structure de ceux-ci. L’extraction de contour consiste à identifier dans l’image les points
qui séparent deux textures différentes.
2.2.2.7 Luminance
Le mot luminance est substitué au mot brillance, qui correspond à l’éclat d’un objet et une
bonne luminance se caractérise par :
2.2.2.8 Transparence
Elle s’agit d’une caractéristique qui définit le niveau d’opacité des éléments de l’image et il
est possible de voir à travers l’image des éléments graphiques situés derrière celle-ci.
2.2.2.9 Contraste
Le contraste est l’opposition marquée entre deux régions d’une image, plus précisément entre
les régions sombres et les régions claires de cette image. Il est défini en fonction des
luminances de deux zones d’images. [11]
Soient L(1) et L(2) les degrés de luminosité respectivement de deux zones voisines A(1) et
A(2) d’une image, le contraste C est défini par le rapport :
𝐿1 − 𝐿2 (2.02)
𝐶=
𝐿1 + 𝐿2
Une image binaire est une matrice rectangulaire dont les éléments valent 0 ou 1. Lorsque l'on
visualise une telle image, les zéros sont représentés par des noirs et les unes par des blancs.
Le niveau de gris est la valeur de l’intensité lumineuse en un point. La couleur du pixel peut
prendre des valeurs allant du noir au blanc en passant par un nombre fini de niveaux
intermédiaires.
23
Pour représenter les images à niveaux de gris, on attribue à chaque pixel de l’image une
valeur correspondant à la quantité de lumière renvoyée. Cette valeur peut être comprise entre
0 et 255. Chaque pixel n’est donc plus représenté par un bit, mais par un octet. Pour cela, il
faut que le matériel utilisé pour afficher l’image soit capable de produire les différents
niveaux de gris correspondant.
Le nombre de niveaux de gris dépend du nombre de bits utilisés pour décrire la " couleur " de
chaque pixel de l’image. Plus ce nombre est important, plus les niveaux possibles sont
nombreux.
La plus fréquente représentation d’image utilisée par les applications multimédias est l’image
couleur. Pour ce faire, chaque pixel possède une couleur décrite par la quantité de rouge (R),
vert (G) et bleu (B).
Chacune de ces trois composantes est codée sur l’intervalle [0, 255], ce qui donne 16 777 216
couleurs possibles. [12]
Ces 256 couleurs sont choisies parmi les 16 millions de couleurs de la palette RVB et pour
chaque image, le programme recherche les 256 couleurs les plus pertinentes.
Un avantage de ce type de codage est que l’image occupe 3 fois moins de place qu’avec un
codage 24 bits. Toutefois, on constate que l’image est moins nuancée.
Le codage d’une image en couleurs 24 bits ou le codage Rouge, Vert, Bleu (RVB) est le plus
utilisé. Chaque couleur est codée sur 1 octet = 8 bits. Chaque pixel sur 3 octets c'est à dire 24
bits : le rouge de 0 à 255, le vert de 0 à 255, le Bleu de 0 à 255. On peut ainsi obtenir
256*256*256 = 16777216 couleurs.
Le principe de ce codage repose sur la synthèse additive des couleurs : on peut obtenir une
couleur quelconque par addition de ces 3 couleurs primaires en proportions convenables.
24
2.2.4 Format d’une image
Une image vectorielle est décrite à l’aide de courbes et d’équations mathématiques. C’est-à-
dire que les données sont représentées par des formes géométriques simples qui sont décrites
d'un point de vue mathématique.
Une image matricielle est formée d'un tableau de points ou pixels. Plus la densité des points
est élevée, plus le nombre d'information est grand et plus la résolution de l'image est élevée.
Corrélativement la place occupée en mémoire et la durée de traitement seront d'autant plus
grandes.
Les images vues sur un écran de télévision ou une photographie sont des images matricielles.
On obtient également des images matricielles à l'aide d'un appareil photo numérique, d'une
caméra vidéo numérique ou d'un scanner
2.2.5 Vidéo
La vidéo est une succession d’images animées défilant à une certaine cadence afin de créer
une illusion de mouvement pour l’œil humain.
Elle peut être analogique (signal continu d’intensité de luminance) ou numérique (suite de
trames ou images).
2.3.1 Définition
La vision par ordinateur est une discipline informatique qui consiste à mettre en œuvre des
outils et techniques pour permettre à un ordinateur d’interpréter un élément visuel c’est-à-dire,
de créer des descriptions intelligentes et utiles de séquences et de scènes visuelles, ainsi que
des objets au moyen d'opérations menées sur des images ou des vidéos.
La détection d’objet fait partie des applications de la vision par ordinateur donc elle suit les
étapes de cette dernière.
25
2.3.2 Etapes de la vision par ordinateur
C’est une phase très importante dans le processus de la vision par ordinateur puisqu’elle
permet de simplifier les étapes de traitement et d’analyse.
L’étape d’acquisition nécessite plusieurs outils dont l’éclairage, les cartes d’acquisition (carte
ajoutée à un ordinateur pour la numérisation de sons et d'images en provenance de sources
externes), les caméras et les scanners.
- Principe
Tout d’abord, des sources lumineuses éclairent une scène composée d’objets, ensuite chaque
objet absorbe et renvoie cette énergie lumineuse, puis le capteur d’images effectue son rôle en
transformant l’énergie lumineuse renvoyée dans sa direction en un signal électrique. Cette
transformation est basée sur l’effet photoélectrique, il permet à un photon incident d’arracher
des électrons à des éléments sensibles ou photosites d'une matrice de petits capteurs
élémentaires.
- Capteurs
On distingue deux types de capteurs : les capteurs CCD et les capteurs CMOS. Les capteurs
CCD sont inventés dans en 1970 par Willard S. Boyle et George Smith. Le mécanisme de ces
capteurs est le suivant : les photons sont reçus sur l’électrode semi-transparente et sont
transformés en électron par effet photoélectrique. Les électrons sont ensuite collectés dans la
zone désertée. À la fin de l'exposition, grâce à un jeu de variation de potentiel cyclique
résultant d'une horloge externe, les charges sont transportées de photosite en photosite et
envoyées dans un registre de sortie. Finalement, les charges sont transformées en tension. Ce
signal sera, à l'extérieur du CCD, amplifié et numérisé. Le second type de capteur CMOS sont
apparus dans les années 80, il a le même principe de base que le capteur CCD à la seule
différence que pour un capteur CMOS ; à l'intérieur de chaque photosite, la charge générée est
directement convertie en tension utilisable.
26
2.3.2.2 Traitement
Cette phase est souvent appelée prétraitement. Elle regroupe l’ensemble des techniques
permettant d’améliorer l’image. Comme les parasites accompagnent la première phase, il est
important d’appliquer quelques traitements afin de les réduire.
- La modification d’histogramme
- Le filtrage
L’objectif avoué du filtrage est d’éliminer les perturbations induites par les procédés
d’acquisitions d’image et aux problèmes de transmission ainsi de réduire les variations
d’intensité au sein de chaque région de l’image tout en respectant l’intégrité de la chaîne
originale comme les transitions entre les régions homogènes. Toutefois, les éléments
significatifs de l’image doivent être préservés au mieux. [11]
2.3.2.3 Analyse
L’objectif de cette phase est l’extraction d’information caractéristique contenue dans l’image.
- La classification d’objet : une méthode qui consiste à catégoriser l’image entière dans
une classe
- La détection d’objet : une technique qui permet de localiser des instances dans une
image, en dessinant un rectangle autour de chacune d’elle ;
- La segmentation d’objet : elle constitue la base de la classification et la détection
d’objet.
27
2.3.2.4 Interprétation
Un objet désigne une entité définie dans un espace à trois dimensions, soit naturel, soit
fabriqué par l’homme (artefact), qui a une fonction précise, désignable par une étiquette
verbale.
La détection d'objets est une technique de vision par ordinateur qui permet d'identifier et de
localiser des objets dans des images ou des vidéos. Plus précisément, la détection d'objet
dessine des cadres de délimitation autour des objets détectés, ce qui nous permet de localiser
ces objets (ou de savoir comment ils se déplacent) dans une scène donnée.
La détection d’objet et la reconnaissance d’image sont deux concepts que l’on confonde
souvent, il est important donc de connaitre la différence entre ces deux principes avant de
savoir plus sur la détection d’objet.
La détection d’objet consiste à localiser et à identifier des objets spécifiques dans une image
ou une vidéo. Cela implique de détecter les positions et déplacements des objets en encadrant
28
chacun avec une boîte englobante (bounding box). Une application permettant d’identifier et
d’interpréter les feux tricolores se sert du concept de détection d’objets, l’intelligence
artificielle dans cette application se concentre sur les feux tricolores, leur formes et couleurs
sans nécessairement reconnaitre tout le reste de la scène.
La méthode de Viola et Jones a été réalisée par les chercheurs Paul Viola et Michael Jones en
2001. [13]
Elle fait partie d’une grande découverte dans le domaine de la détection des objets dans une
image. Même si au tout début, elle est conçue pour la détection du visage, elle peut également
servir pour la détection d’autres objets.
Dans l’algorithme original, une fenêtre de détection de taille initiale 24px par 24px est utilisée
pour balayer l’image et déterminer si un visage y est présent. Une fois l’image parcourue
entièrement, la taille de la fenêtre est augmentée d’un facteur multiplicatif de 1,25 et le
balayage recommence, en décalant d’un pixel, jusqu’à ce que la fenêtre fasse la taille de
l’image. Ce décalage peut être changé afin d’accélérer le processus, mais un décalage d’un
pixel assure une précision maximale.
Apart la méthode de Viola et Jones, il y aussi d’autres méthodes comme le détecteur de coins,
la transformation de caractéristiques invariantes d’échelle (SIFT), les fonctionnalités robustes
accélérées (SURF) et beaucoup d’autres encore qui possèdent des fonctionnalités conçues à la
main utilisées dans la détection d’objets.
29
2.6.2 Détection d’objet et le deep learning
Avec le deep learning, des modèles pré-entraînés sont conçus afin de gérer la tâche de
détection d’objet. Ces derniers sont déjà entraînés avec des centaines de milliers de contenus
visuels pour optimiser automatiquement la précision de la détection par la suite.
Les premiers modèles de détection d’objets basés sur l’apprentissage profonde peuvent être
classés en deux :
Les détections d’objets à deux étages suivent les deux étapes suivantes : la première est la
proposition de régions et la seconde étape est la classification et affinement de la proposition.
- RCNN
Le réseau neuronal convolutif basé sur une région a été proposé par Ross Girshick et d’autres
auteurs. En 2014, il a été l’une des premières approches réussies d’apprentissage en
profondeur pour détecter des objets.
- Fast R-CNN
En 2015, le rapide- RCNN a été proposé par Ross Girshick pour pouvoir améliorer la vitesse
et la précision de la détection d’objet. Fast R-CNN fonctionne en utilisant un seul CNN
partagé pour extraire des fonctionnalités de l’image entière. Ensuite, il utilise les régions
d’intérêts ou en anglais « Region of Interest » pooling pour extraire des caractéristiques de
longueur fixe pour chaque proposition de région. Ces vecteurs de caractéristiques sont
introduits dans un ensemble de couches entièrement connectées qui effectue la classification
des objets et la régression du cadre de délimitation.
- Faster R-CNN
Une nouvelle approche a été avancé par Shaoqing Ren avec d’autres chercheurs en 2015 : le
Faster R-CNN, il représente une avancée majeure dans la détection d’objet avec le deep
learning.
30
Le réseau neuronal convolutif basé sur une région plus rapide fonctionne en utilisant tout
d’abord un réseau de proposition de région (RPN) pour générer des propositions de région
directement à partie des fonctionnalités du CNN. Le RPN partage des couches convolutives
avec le réseau de détection d’objets, ce qui lui permet d’être formé de bout en bout avec le
reste du réseau. Une autre particularité du Faster R-CNN est qu’il a introduit une nouvelle
fonction de perte permettant d’optimiser la classification des objets et la régression du cadre
de délimitation.
Les modèles YOLO et SSD font partie de ces détecteurs d’objets en un étage.
- YOLO
Les modèles YOLO divisent une image en grille et prédit les cadres de délimitation et les
probabilités de classe pour chaque cellule de la grille. Le principe est d’examiner l’image
entière en une seule fois d’où son nom.
- SSD
SSD prédit plusieurs cadres de délimitation et scores de classe pour ces cadres en un seul
passage. Pour cela il utilise plusieurs cartes de caractéristiques de différentes couches du
réseau pour prédire les détections à différentes échelles.
2.7 Conclusion
Ce second chapitre nous a permis d’en savoir plus sur les images, sur la vision par ordinateur
et surtout sur la détection des objets. Les avancées sur l’intelligence artificielle, plus
précisément sur le deep learning ont permis au domaine de la détection de s’évoluer de plus
en plus. Il existe divers modèles de détection d’objets que ce soit à un étage ou à deux et ils ne
cessent de s’améliorer de jour en jour et on peut voir sa perspective surtout dans l’internet des
objets. (Voir annexe 1)
31
CHAPITRE 3
OUTILS DE PROGRAMMATION POUR LA CONCEPTION DE L’APPLICATION
3.1 Introduction
Le système d’exploitation Android est actuellement l’OS le plus utilisé dans le monde faisant
tourner des smartphones, tablettes, montres connectées, télévisions interactives, et bien
d’autres. Lancé en 2003, il a été ensuite racheté par Google en 2005. [20]
3.2.1.2 Caractéristiques
a. Open source
Android est une plateforme open source, ce qui signifie que tout le monde peut apporter des
améliorations à ce système. Dans ce projet, on s’intéresse surtout à la conception
d’application pour ce système. Il existe plusieurs IDE (Environnement de développement
intégré) pour le développement Android et nous allons en savoir plus sur l’un d’eux qui est
l’Android Studio.
b. Version
32
Figure 1.13 : Figure 3.01 : Liste des versions d’Android avec la date de première version stable
c. Architecture
- Un noyau linux : Android est basé sur un kernel linux. Cela permet aux applications
d’avoir un système de gestion de mémoire et de processus stable, performant, sécurisé
et surtout multitâches.
- Des bibliothèques : Ces bibliothèques fournissent les fonctionnalités de bas niveau
d’Android.
- Une machine virtuelle adaptée : Elle se compose de la machine virtuelle Dalvkit basée
sur une architecture de registre et des bibliothèques internes.
- Un framework applicatif : Le framework applicatif sert à fournir des API permettant la
création des applications riches en introduisant la notion de service.
- Des applications qui peuvent se trouver dans des appareils, dans les navigateurs web,
…
33
Figure 1.14 : Figure 3.02 : Architecture Android
d. Outil de développement
− SDK Android : Le SDK (Software Development Kit) Android est un ensemble d’outils
que met à disposition Google afin de nous permettre de développer (créer et maintenir)
des applications pour Android : API (interfaces de programmation), exemples de code,
documentation, émulateur.
− Le débogueur « ADB » : Le SDK Android contient un débogueur appelé « Android
debug bridge » ou aussi « ADB », qui permet de connecter un appareil Android virtuel ou
réel, dans le but de gérer le périphérique ou de déboguer votre application.
− IDE (Environnement de développement intégré) : Android Studio … [14]
a. Composants applicatifs
34
- Service : C’est un logiciel autonome prévu pour durer (contrairement aux activités,
fournisseurs de contenus, récepteur d’intentions) effectuant des tâches en arrière-plan
sans interaction directe avec les utilisateurs.
- Intention : C’est un message système qu’on peut qualifier d’événement permettant aux
composants de l’application de demander des actions d’autres composants comme
démarrer une activité ou lancer un service.
- Manifeste : C’est le point de départ de toute application Android puisqu’il permet de
déclarer ce que l’application contient (activités, services...). Il précise aussi comment
ces composants sont reliés à Android et les permissions de l’application (contrôle de la
webcam, accès aux réseaux, accès au service de localisation...)
- Gadget graphique : Widget est un terme résultant de la contraction des termes
windows et gadget et concrètement, c’est un composant d’interface graphique
- XML : C’est un langage de balisage extensible pour structurer des données.
- Positionnement XML : il permet de concevoir les interfaces plus simples qu’en
langage Java et permet concrètement d’instancier les widgets.
- Ressources : ces sont des fichiers tels que les images, les icônes, les chaînes de
caractères et les mises en pages qui sont séparés du code source et permettent une
personnalisation facile de l’interface utilisateur.
- Gradle Build System : il s’agit d’un outil de compilation et de gestion des
dépendances qui automatise la construction de l’application et la gestion de ses
bibliothèques. [13]
Le cycle de vie d’une activité Android décrit les différentes étapes par lesquelles une activité
passe, de sa création à sa destruction. Les principales étapes sont les suivantes : [13][15]
- onCreate() :Méthode exécutée quand l’activité est créée et dans laquelle la vue XML
et des données sont initialisées.
- onStart() : Méthode appelée après onCreate() ou après onRestart() lorsque l’activité a
été arrêtée, mais est actuellement à nouveau affiché à l’utilisateur.
- onRestart() : Méthode appelée après onStop() lorsqu’on redémarre l’activité.
- onResume() : Méthode appelée après onRestoreInstanceState() , onRestart ou onPause
pur que l’activité commence à interagir avec l’utilisateur.
- onPause() : Méthode appelée lorsque l’activité passe en arrière-plan.
35
- onStop() : Méthode appelée pour que l’activité ne soit plus visible pour l’utilisateur.
- onDestroy() : Méthode appelée pour effectuer le nettoyage finale avant suppression
d’une activité.
36
3.2.2 L’IDE Android Studio
3.2.2.1 Installation
Pour utilise l’environnement de développement intégré Android Studio, il faut exécuter les
différentes étapes suivantes :
Il existe de nombreuses versions d’Android Studio et la dernière version stable actuelle est
l’Android Studio Giraffe. Cela est dû au fait que les concepteurs veulent introduire de
nouvelles améliorations et d’autres nombreuses fonctionnalités à l’IDE.
3.2.2.2 Configuration
L’IDE Android Studio utilise de nombreux paquets que l’on doit tout d’abord installer et
mettre à jours.
Après lancement d’Android Studio, il faut vérifier la version du SDK installé, la version de
l’API (Application Programming Interface), la version de l’OS permettant de développer et
les éventuelles mises à jour.
Après avoir installé et configurer l’IDE Android studio, on peut accéder à la création de notre
projet, on remplit les informations concernant ce dernier y compris le choix de langage de
programmation.
Pour l’Android Studio, on peut choisir soit le langage Java soit le langage Kotlin.
3.2.2.4 L’interface
Pour pouvoir concevoir un logiciel ou application Android, le codage se fera sur une une
interface graphique comportant quatre (04) sections.
37
4
2
1
(3) : la prévisualisation de l’interface (non disponible que si l’on n’est pas à une ressource
3.2.3.1 Historique
Le langage Java a été mis au point par James Gosling chez Sun Microsystems au début des
années 1990 et signifie café en argot américain, dans le cadre d’un projet de développement
de logiciel pour des appareils électroniques de grande consommation : télévisions,
magnétoscopes, grille-pain …. Les objectifs de l’époque étaient la concision, la rapidité,
l’efficacité et la portabilité. Java est devenu ainsi un langage idéal pour la distribution
d’exécutables via le Web. [14]
3.2.3.2 Caractéristique
Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme
succès : [16]
38
a. Langage interprété et compilé
- Langage compilé
Un langage est dit compilé si avant d’être exécuté, un logiciel spécialisé se charge de
transformer le code du programme en langage machine. Et un programme écrit en java avec
une extension java est compilé par un compilateur appelé javac existant dans l’outil JDK, en
un bytecode d’extension class.
- Langage interprété
Le langage java peut aussi être un langage interprété, c’est-à-dire que les instructions
envoyées sont « transcrites » en langage machine au fur et à mesure de leur lecture. Dans ce
cas le bytecode peut être interprété (exécuter) sous n’importe quel système d’exploitation par
le JVM (Java Virtual Machine)
b. Langage simple
Le choix de ses auteurs a été d'abandonner des éléments mal compris ou mal exploités des
autres langages tels que la notion de pointeurs (pour éviter les incidents en manipulant
directement la mémoire), héritage multiple et la surcharge des opérateurs, ... [16]
La programmation par objets consiste essentiellement à structurer les applications selon les
types de données. L’expérience montre que l’on obtient ainsi des logiciels fiables, évolutifs et
faciles à maintenir. [17]
Comme la plupart des langages récent, java est orienté objet. Chaque fichier source contient la
définition d'une ou plusieurs classes qui sont utilisées les unes avec les autres pour former une
application. Java n'est complètement objet par il définit des types primitifs (entier, caractère,
flottant, booléen, ...).
3.3.1 Définition
TensorFlow est la bibliothèque de logiciels open source deuxième génération de Google pour
l'informatique numérique. Le cadre informatique de TensorFlow prend en charge divers
algorithmes d'apprentissage en profondeur et de multiples plateformes informatiques,
garantissant ainsi une grande stabilité du système. [3]
39
Sorti en 2017, Google Tensorflow est donc une bibliothèque d’apprentissage automatique
permettant de créer et d’entraîner des modèles, en particulier des réseaux de neurones
profonds, pour diverses tâches.
3.3.2 Caractéristiques
3.3.2.1 Evolutivité
L’évolutivité de Tensorflow réside sur le fait qu’il est capable de gérer des projets de petite à
grande échelle. Il peut s’adapter à différents volumes de données et traiter des tâches
complexes.
Le GPU est une unité de traitement conçue pour accélérer les calculs liés au graphisme, à la
vidéo et à d’autres tâches intensives en parallèle. TensorFlow peut l’utiliser afin d’augmenter
la vitesse de calcul. Les GPU sont optimisés pour effectuer de multiples opérations en
parallèle, ce qui les rend idéaux pour les tâches d'apprentissage automatique, y compris les
réseaux de neurones profonds, qui impliquent des calculs intensifs.
TensorFlow offre une puissance de calcul élevée grâce à son optimisation pour l'exécution de
calculs sur des architectures distribuées et parallèles. Cela permet aux utilisateurs de traiter
rapidement des ensembles de données complexes et de former des modèles d'apprentissage
automatique sophistiqués.
3.3.2.4 Multilingue
3.3.2.5 Multi-plateforme
On dit que Tensorflow est multiplateforme car elle peut être utiliser sur différentes
plateformes matérielles et systèmes d’exploitation.
3.3.2.6 Distribué
40
est distribué puisqu’il peut exécuter des calculs sur plusieurs machines en réseau, permettant
ainsi de gérer des tâches complexes et volumineuses plus efficacement.
3.3.3.1 Historique
Python est un langage de programmation dont la première version est sortie en 1991. Créé par
Guido van Rossum, il a voyagé du Macintosh de son créateur, qui travaillait à cette époque au
Centrum voor Wiskunde en Informatica aux Pays-Bas, jusqu'à se voir associer une
organisation à but non lucratif particulièrement dévouée, la Python Software Foundation,
créée en 2001. Ce langage a été baptisé ainsi en hommage à la troupe de comiques les «
Monty Python ». [18]
3.3.3.2 Caractéristiques
a. Langage interprété
Python est un langage de programmation interprété, c'est-à-dire que les instructions que vous
lui envoyez sont « transcrites » en langage machine au fur et à mesure de leur lecture.
b. Langage portable
Un des avantages du langage interprété est sa portabilité puisque Python est censé fonctionner
aussi bien sous Windows que sous Linux ou Mac OS, et on ne devrait avoir à effectuer aucun
changement dans le code pour le passer d'un système à l'autre.
c. Langage simple
La syntaxe de Python est très simple et, combinée à des types de données évolués (listes,
dictionnaires...), conduit à des programmes à la fois très compacts et très lisibles. À
fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les
canons standards) est souvent de 3 à 5 fois plus court qu’un programme C ou C++ (ou même
Java) équivalent, ce qui représente en général un temps de développement de 5 à 10 fois plus
court et une facilité de maintenance largement accrue.
41
3.3.4 Jupyter notebook
Les notebooks jupyter sont des cahiers électroniques qui peuvent rassembler du texte, des
images, des formules mathématiques, du code informatique exécutable. Ils sont manipulables
interactivement dans un navigateur web.
Au tout début, jupyter a été développé pour les langages de programmation Julia, Python et R
(d’où le nom jupyter) mais actuellement, les notebooks Jupyter supportent près de 40
langages différents.
3.3.4.1 Installation
Pour installer Jupyter notebook, il suffit d’installer le navigateur Anaconda qui est un
installateur gratuit.
3.3.4.2 Interface
La cellule est l’unité de base du jupyter notebook, c’est-à-dire que dedans on peut soit écrire
des codes ou utiliser le langage à balise Markdown.
42
Figure 1.18 : Figure 3.06 : Interface Jupyter notebook
3.3.5 Tensorflow object detection
3.3.5.1 Définition
Développé par Google, Tensorfow Objet Detection ou TFOD permet de créer, former et
déployer des modèles de détection d’objets en utilisant Tensorflow.
3.3.5.2 Etapes
La détection des objets peut faire appel à de nombreuses dépendances à l’instar des
bibliothèques openCV, os, …
Les images à entrainés doivent être étiquetés pour faciliter l’entrainement et le test durant la
détection de l’objet.
43
- SSD et YOLO : Une famille de modèles de détection d’objets qui appartient à la
famille de modèle de détection en une seule étage. Il est conçu pour détecter des objets
dans une image en une seule passe.
- R-CNN : Une famille de modèle de détection d’objets en deux étapes. L’évolution de
ces modèles a généré une nouvelle version évoluée de ce dernier qui se nomme Fast
R-CNN.
La structuration des dossiers et fichiers dans la manipulation de tensorflow est très important
puisqu’on en utilise plusieurs.
e. Configuration de l’entraînement
Dans cette étape, on définit les hyperparamètres pour l’entraînement comme le taux
d’apprentissage, le nombre d’itération, la taille des lots, etc.
44
f. Entraînement du modèle
Cela consiste à exécuter l’entrainement en alimentant les images annotées dans le modèle et à
ajustez les poids su modèle afin qu’il apprenne à détecter les objets.
g. Inférence
Utilisation du modèle entraîné pour détecter des objets dans de nouvelles images en passant
les images à travers le réseau neuronal.
h. Post-traitement
On applique des techniques de post-traitement pour filtrer les détections, supprimer les
doublons et améliorer la précision.
i. Déploiement
Intégration du modèle entraîné dans une application, site web, logiciel ou autre système pour
la détection d’objet en temps réel.
3.4 Conclusion
Les plateformes Android studio et de Google Tensorflow sont des atouts pour les utilisateurs.
La conception d’application Android est devenue plus facile avec Android Studio et
l’implémentation des apprentissages automatique et approfondie est devenue plus rapide et
moins encombrante avec Google Tensorflow. Toutefois, la manipulation de ces outils
nécessite différentes connaissances surtout sur les langages de programmations, sur les
différentes mis à jour des outils utilisés dans les plateformes.
45
CHAPITRE 4
CONCEPTION DE L’APPLICATION SIGNA-CAM
4.1 Introduction
Actuellement, la détection des objets peut s’appliquer dans la vie de tous les jours. Pour notre
cas, l’étude se concentre sur le domaine du transport routier. L’objectif est de créer une
application mobile qui pourra détecter et identifier les panneaux de signalisation. Cette
application nommée « Signa-Cam » sera une aide pour les conducteurs d’automobile.
Vu que quelques notions sur l’intelligence artificielle, la détection d’objets et les outils
nécessaires pour la création d’une application ont été déjà introduites dans les chapitres
précédents, dans ce dernier chapitre, nous utiliserons ces connaissances afin de concevoir une
application dotée d’une aptitude et sera capable d’identifier de nombreux panneaux de
signalisation.
C’est une application qui utilise la caméra d’un téléphone mobile et quand un des panneaux
de signalisation se trouve dans son champ de vision, l’écran du téléphone affichera un
bounding box avec le pourcentage de sureté du modèle et le nom de la plaque correspondante.
4.3.1 Ordinateur
RAM : 8,00 Go
4.3.2 Téléphone
Pour faire des tests sur l’applications, l’utilisation d’un téléphone mobile ayant les
caractéristiques suivantes était nécessaire :
CPU :1.8GHz
RAM : 2.00 GB
Version d’Android : 11
46
4.3.3 Maquette de panneaux de signalisation
Une petite maquette de panneaux de signalisation faite à partir de cartons et de papier a été
conçu pour simuler le fonctionnement de l’application.
47
4.4 Environnement logiciel
Les logiciels et plateformes décrits dans le chapitre précédent sont les principaux outils
utilisés dans la conception de l’application.
Nous avons donc installé tout d’abord python 3.9 comme éditeur
48
Et depuis jupyter notebook, nous avons installé la version recente de tensorflow.
Nous avons aussi téléchargé et installé la version la plus récente d’Android studio pour la
conception de l’application mobile.
Durant l’installation des outils, nous avons rencontré des messages expliquant qu’il y a des
dépendances à télécharger pour le bon fonctionnement des applications. La plupart d’entre
eux ont été installé bel et bien. Toutefois, certains outils comme le cuDNN et CUDA n’ont
pas été installé à cause de nos environnements matériels.
49
4.5 Etapes
Et les interfaces de l’application Signa-Cam sont conçu à partir d’Android studio et sont
représentées par les deux figures suivantes.
50
Figure 1.26 : Figure 4.09 : Interface principale de l’application
Sur la figure 4.03, le bouton « Detect » sert à lancer la caméra du téléphone afin de
commencer la détection.
Le collecte de données est une phase très importante pour la détection d’objets parce qu’on
doit entrainer le modèle avec de nombreuses données d’entraînement et on doit aussi le tester
avec des données de test.
Pour ce faire, nous avons collecter 100 images par panneaux de signalisation dont 70%
d’entre elles sont des données d’entraînement et les restes sont destinées au test.
51
Figure 1.27 : Figure 4.10 : Quelques données collectées
Dans le premier chapitre, la section sur le type d’apprentissage a mis l’accent sur l’importance
des étiquettes de données en intelligence artificielle et visiblement cette étape consiste à
étiqueter chacune des données collectées.
« LabelImg » était l’outil d’annotation d’image utilisé dans cette étape. Il est écrit en python
et utilise Qt pour son interface graphique. Les images étiquetées sont sauvegardées sous
format xml.
L’importance d’une arborescence bien structurée a été bien insistés dans le troisième chapitre
expliquant google Tensorflow. Nous avons donc pris la peine de bien élaborer les chemins
d’accès pour ne pas se perdre pendant l’entrainement.
52
paths = {
'SCRIPTS_PATH': os.path.join('Tensorflow2','scripts'),
'APIMODEL_PATH': os.path.join('Tensorflow2','models'),
'PRETRAINED_MODEL_PATH':os.path.join('Tensorflow2', 'workspace','pre-trained-
models'),
L’entraînement d’un modèle sur tensorflow nécessite une carte d’étiquette dans le but de faire
correspondre chaque étiquette de données à une valeur entière. C’est un fichier d’extension
pbtxt utilisé non seulement dans le processus d’apprentissage mais surtout durant la détection
des images. La figure suivante montre un extrait du label Map utilisé.
item {
name:'Stop'
id:1
}
item {
name:'VirageDroite'
id:2
}
item {
name:'DoubleSens'
id:3
}
53
4.5.2.5 Téléchargement du modèle
Le MSCOCO dataset contient 91 catégories d‟objets communs avec 82 d'entre eux ayant plus
de 5 000 instances étiquetées. Au total, le jeu de données contient 2500000 instances
étiquetées dans 328000 images. [5]
Le choix s’est porté sur le MobileNet puisqu’il promet une détection plus rapide et plus
simple. C’est un mécanisme qui naît de la combinaison de l’algorithme de classification
MobileNet et l’incroyable framework SSD.
Les fichiers TFRecord sont des formats de fichiers binaires spécifiques utilisés principalement
avec Tensorflow. Ils sont conçus pour stocker et échanger des données d’apprentissage
automatique de manière efficace.
Pour permettre un accès rapide et efficace aux données d’entraînement et pour faire un pré-
traitement et alimentation direct des données dans un modèle Tensorflow, l’utilisation des
fichiers TFRecord sont très important et idéale.
model {
ssd {
num_classes: 90
image_resizer {
fixed_shape_resizer {
}
}
54
Il faut aussi modifier le variable « fine_tune_check » pour indiquer le chemin d’accès au
modèle.
fine_tune_checkpoint: "PATH_TO_BE_CONFIGURED/model.ckpt"
Il est important aussi d’indiquer dans le modèle le chemin du label map et le chemin du
fichier train.record.
label_map_path: "PATH_TO_BE_CONFIGURED"
input_path: "PATH_TO_BE_CONFIGURED"
Puisque toutes les configurations sont déjà effectuées, nous puvons passer à l’entrainement du
modèle. Pour ce faire nous avons lancé le script suivant sut cmd.
python Tensorflow2\models\research\object_detection\model_main_tf2.py --
model_dir=Tensorflow2\workspace\models\my_ssd_mobnet --
pipeline_config_path=Tensorflow2\workspace\models\my_ssd_mobnet\pipeline.
config --num_train_steps=2000
Pour pouvoir évaluer le modèle, nous avons lancé sur l’invité de commande le script suivant.
python Tensorflow2\models\research\object_detection\model_main_tf2.py --
model_dir=Tensorflow2\workspace\models\my_ssd_mobnet --
pipeline_config_path=Tensorflow2\workspace\models\my_ssd_mobnet\pipeline.
config --checkpoint_dir=Tensorflow2\workspace\models\my_ssd_mobnet
55
Figure 1.29 : Figure 4.12 : Evaluation de l’apprentissage sur cmd
Nous avons aussi utilisé Tensorboard pour évaluer les graphes et l’évaluation de
l’entraînement. Nous avons constaté qu’au début de l’entraînement, l’erreur est descendue de
0.7 à 0.2.
56
Pour pouvoir diminuer les erreurs, nous avons opté sur le redimensionnement des images et
l’augmentation de données.
Nous avons lancé le modèle avec des images existant dans le dossier test et ensuite nous
avons effectué des tests en temps réel avec la webcam et on a pu recueillir les images
suivantes.
57
4.5.3 Implémentation du modèle dans l’application mobile
Avant de penser à introduire un modèle d’intelligence artificielle dans une application, il faut
effectuer quelques opérations pour que le modèle soit compatible au nouvel environnement
qui l’attend.
Comme nous allons utiliser le modèle dans le logiciel Android, nous allons exporter les
fichiers d’entrainement en Tensorflow lite.
Nous avons donc créé un dossier du nom « assets » et on a copié dedans le label map utilisé
durant l’entrainement avec le dossier d’extension .tflite.
4.6 Conclusion
58
CONLUSION GENERALE
Le taux d’accident d’automobile dans la plupart des pays en voie de développement et surtout
à Madagascar ne cesse d’augmenter et même si la solution la plus évidente que l’on trouve est
l’amélioration et rénovation des infrastructures routières, nous pouvons explorer d’autres
domaines pour non seulement réduire les problèmes rencontrés dans le transport routier mais
surtout optimiser et faciliter la vie des êtres humains en automatisant certaines tâches.
L’application de détection de panneaux de signalisation peut être utilisée pour aider les
conducteurs, pour les signaler des comportements adaptés au changement d’environnement
qui l’entoure et pour les prévenir des dangers. Toutefois la conception de « Signa-Cam »
requiert beaucoup de notions dans le domaine de l’IT y compris l’Intelligence Artificielle qui
est une technologie émergente qui ne fait qu’évoluer actuellement. Apart l’IA, la détection
d’objets qui est un sous domaine de la vision par ordinateur est aussi un des prérequis
nécessaires dans la conception de l’application Signa-Cam. Combinée au deep learning, la
puissance de la détection d’objet augmente et son domaine d’application s’élargisse. Ces
notions sont purement théoriques jusqu’à ce qu’on les applique dans des logiciels et des
plateformes sous forme de code et c’est la raison pour laquelle nous avons parlé de google
tensorflow et d’Android Studio dans la troisième partie. Ces applications font parties des plus
utilisées et se présentent comme un grand atout surtout pour les développeurs. Brièvement, la
conception de l’application détectrice de panneaux de signalisation est devenue un projet
faisable avec nombreuses compétences basées généralement sur l’intelligence artificielle, la
détection d’image et quelques outils de programmation. Toutefois, on peut constater que
l’application de signa can est réduit à un usage précis et que l’apprentissage supervisé
implémenté dans ce système n’est pas vraiment le type d’apprentissage en vogue et plus que
rentable de nos jours. Face à ce défi, nous avons déjà envisagé un projet permettant de
déployer l’application Signa-Cam : Est-il possible de connecter une application de détection
de panneaux de signalisation à des appareils électroniques pour permettre aux appareils
d’adopter des comportements rapidement sans l’aide des humains ? La perspective du projet
dans cet œuvre est de l’introduire dans le mécanisme de l’internet des objets pour que
l’application Signa-Cam lui-même soit capable de faire freiner automatiquement ou de
ralentir automatiquement les voitures si elle est combinée avec d’autres composants.
59
ANNEXES
ANNEXE 1
INTERNET DES OBJETS
Les prémices de l’Internet des Objets remontent aux années 1980 et 1990, lorsque des
chercheurs ont commencé à explorer les possibilités de connecter des appareils et des capteurs
à des réseaux informatiques.
Une des premières applications connues de l’IoT est née à l’université de Cambridge en 1991
(Université Carnegie Mellon aux USA dans les annéées 1980) bien que le terme « Internet de
Objets » ait été introduit plus tard. Il s’agissait d’une caméra pointée sur une cafetière et
connectée au réseau local de l’université, chaque informaticien pouvait connaitre en temps
réel la disponibilité de café depuis son écran.
Dans les années 2000, le terme « Internet des Objets » a été popularisé par Kevin Ashton qui
est un chercheur au MIT (Massachusetts Institute of Technology) et aussi cofondateur du
Centre d’identification par radiofréquence (RFID) de l’Auto-ID Labs. Il a utilisé ce terme afin
de décrire la technologie de communication entre les objets physiques et les systèmes
informatiques. Les travaux et recherches de Kevin Ashton ont contribué à la reconnaissance
de l’importance de l’IdO et ont suscité un intérêt croissant dans le domaine.
Au cours des années suivantes, de nombreux entreprises et chercheurs ont effectué des
recherches visant à développer l’Internet des Objets. Plusieurs universités et des instituts de
recherche du monde entier ont mené des travaux de recherche novateurs dans ce domaine.
L’internet des objets peut se définir par l’interconnexion des objets physiques par des réseaux
de communication. Dans ce réseau internet, les objets sont dotés d’une capacité de connexion,
d’acquisition, de transfert et de traitement de données venant de son environnement.
60
C’est un réseau des objets physiques qui embarque des technologies pour communiquer et
interagir avec l’environnement externe selon leurs états internes dans le but d’acheminer ces
informations vers les infrastructures existantes. [23]
L’internet des objets vise à joindre le monde physique et le monde numérique comme illustre
la figure 1.1. On désignera par « monde numérique » tous les systèmes manipulant des
données numériques ainsi que les réseaux permettant l’échange des données et le « monde
physique » est l’ensemble de tous les systèmes vivants ou artificiels que nous côtoyons et qui
interagissent entre eux par divers effets physiques. Le concept de l’internet des objets se
réduit à briser la frontière entre ces deux mondes.
L’Internet des Objets peut être considéré comme un monde dans le lequel les objets se
communiquent entre eux ou avec des appareils électroniques et des systèmes informatiques
afin de satisfaire les besoins humains et de faciliter leurs tâches. [22]
La figure 1.01 nous montre les trois dimensions de l’IdO : la communication peut se faire non
seulement en tout lieu et en tout moment mais aussi avec n’importe quel objet.
61
Figure 1.33 : Figure A1.2 : La nouvelle dimension de l’internet des objets
A1.5 Architecture
Même si l’architecture d’une solution IdO varie d’un système à un autre, l’architecture à trois
couches reste la plus élémentaire. Les trois couches sont : [22]
- La couche perception
Elle comprend tous les appareils et objets comme les capteurs et actionneurs qui détectent et
recueillent des informations sur l’environnement.
- La couche réseau
Appelée aussi « couche d’agrégation ». Une fois que les données sont collectées, elles sont
transmises à des passerelles et des dispositifs d’agrégation et c’est la couche réseau qui est
responsable de la connexion et du transport des données issues des capteurs et actionneurs.
- La couche application
C’est dans cette couche que les données agrégées sont traitées, analysées et utilisées pour
permettre aux utilisateurs de prendre de meilleures décisions ou effectuer des actions.
Elle est chargée de fournir à l’utilisateur des services spécifiques et applications intelligentes.
62
A1.6 La détection d’objet et l’internet des objets
Dans le domaine de l’Internet des objets, le concept de détection d’objet peut être utilisé pour
améliorer la capacité de collecte de données et de prise de décision. Ce système fonctionne
comme suit : [24]
- Capteurs connectés :
On a vu précédemment qu’un système IoT utilise des capteurs comme objets. Pour détecter
les objets, on doit utiliser comme capteurs et cela peut être des caméras, des capteurs de
proximité, des capteurs de mouvement, des capteurs infra rouges, etc. Ces derniers peuvent
être intégrés dans des appareils mobiles, des véhicules, des drones ou d’autres dispositifs.
- Collecte de données
Les capteurs détectent les objets et collectent des données correspondantes telles que des
images, des distances, des niveaux de proximité, etc. Ces données peuvent être prétraitées
localement sur les appareils ou bien transmises à un serveur distant pour un traitement plus
avancé.
- Connectivité
Les données de détection d’objets peuvent être transmises à un serveur, plateformes à d’autres
systèmes par divers protocoles de connectivité comme le Wi-Fi, le Bluetooth, le réseau
cellulaire ou d’autres technologies de connectivité sans fil pour un traitement ultérieur.
Des analyses de données doivent être effectuées en temps réel ou postériori afin d’extraire des
informations utiles. Actuellement, des algorithmes d’analyse et l’intelligence artificielle sont
utilisés pour reconnaitre les objets, leur position, leur taille, leur mouvement, …
- Interaction et rétroaction
Dans la plupart des cas, les système IoT interagissent avec d’autres dispositifs ou systèmes.
Prenons l’exemple des actionneurs qui agit directement au monde physique ou bien changer
son état en fonction des informations recueillies. Les utilisateurs peuvent également recevoir
des notifications ou des avertissements sur des plateformes pour leur mettre au courant.
63
ANNEXE2
EXTRAIT DU CODE DE L’ENTRAINEMENT
import PIL
def resize(input_path, folder):
output_path=f'C:/Users/USER/Tensorflow
detection/TFODCourse/Tensorflow2/workspace/images/output/{folder}'
os.makedirs(output_path, exist_ok = True)
dirs = os.listdir(input_path)
for item in dirs:
item_path = os.path.join(input_path, item)
if os.path.isfile(item_path):
im = Image.open(item_path)
64
A2.3 Lancement de la détection en temps réel
cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
while cap.isOpened():
ret, frame = cap.read()
image_np = np.array(frame)
input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)
detections = detect_fn(input_tensor)
num_detections = int(detections.pop('num_detections'))
detections = {key: value[0, :num_detections].numpy()
for key, value in detections.items()}
detections['num_detections'] = num_detections
# detection_classes should be ints.
detections['detection_classes'] = detections['detection_classes'].astype(np.int64)
label_id_offset = 1
image_np_with_detections = image_np.copy()
viz_utils.visualize_boxes_and_labels_on_image_array(
image_np_with_detections,
detections['detection_boxes'],
detections['detection_classes']+label_id_offset,
detections['detection_scores'],
category_index,
use_normalized_coordinates=True,
max_boxes_to_draw=1,
min_score_thresh=.8,
agnostic_mode=False)
cv2.imshow('object detection', cv2.resize(image_np_with_detections, (300, 400)))
if cv2.waitKey(10) & 0xFF == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
65
BIBLIOGRAPHIE
05 février 2018.
circulation avec priorité aux véhicules d’urgence utilisant le deep learning et l’IOT »,
2022
7 avril 2023
[11] M. A. Rakotomalala,, « Traitement Numérique des Images », Cours L3- TCO, Ment.
66
[12] Gaio, « Images », www.crdp.ac-grenoble.fr/image/general/general.htm. Janvier 2020.
http://inforef.be/swi/python.htm
2012
recherche sur une grille hexagonale modifiée », Université Larbi Ben M’Hidi d’Oum
El Bouaghi, AU : 2021-2022
67
RENSEIGNEMENTS
Nombre de pages : 63
Nombre de figures : 33
Directeur de mémoire : Nom et prénom : RAJAONARISON Tianandrasana Roméo
Adresse e-mail : [email protected]
Numéro de téléphone : +261346476110
68
RESUME
L’intelligence artificielle et vision par ordinateur sont tous les deux des domaines très vastes
et de plus en plus en évolution actuellement. La combinaison des deux disciplines peut
conduire à une invention puissante et rentable dans différents secteurs. Nous avons donc
conçu une application qui utilise à la fois : le deep learning qui est un concept englobé dans
l’IA et la détection d’objets qui est un élément composant de la vision par ordinateur. Il s’agit
d’une application qui sert à détecter et à identifier les différentes plaques de signalisation qui
se trouvent sur les routes terrestres. La conception de l’application s’est faite à partir de
plusieurs outils comme Android Studio, Anaconda, Tensorflow, Opencv et beaucoup d’autres.
En somme, la réalisation d’une application détectrice de panneaux de signalisation s’avère
être un projet qui pourra révolutionner la qualité du transport routier.
ABSTRACT
Artificial intelligence and computer vision are both very broad fields, and both are evolving
rapidly. Combining the two disciplines can lead to powerful and profitable inventions in
different sectors. We have therefore designed an application that uses both : the deep learning
which is concept embraced by AI, and object detection which is component of computer
vision. The application is used to detect and identify the various road signs on land routes.
The application was designed using tools such as Android studio, Anaconda, Tensorflow,
OpenCV and many others. All in all, the creation of a traffic sign detection application is
providing to be a project that could revolutionize the quality of road transport.