Vous êtes sur la page 1sur 36

Année : 2020-2021

Projet de fin d’études :


Réalisation d'un robot voiture à base Raspberry Pi 4 et la détection
des objets via une caméra

Projet réalisé par :


Youssef RAJA

Projet encadré par :


Mr.Mohammed BSISS
Introduction générale

Depuis quelques années, avec l'émergence de la cybernétique et des


technologies informatiques, les machines font de plus en plus irruption dans nos
vies quotidiennes. Ils font le ménage, transportent des personnes, désamorcent
des bombes, construisent des prothèses, secondent des chirurgiens, fabriquent
des produits, nous divertissent, nous enseignent et nous surprennent.

La robotique allie trois disciplines : mécanique, électronique, informatique. Ces


technologies concernent les machines automatisées qui peuvent prendre la place
des humains dans des environnements ou des processus de fabrication
dangereux, ou ressembler aux humains par leur apparence, leur comportement
et/ou leur cognition. De nombreux robots d'aujourd'hui sont inspirés par la
nature.

On peut constater que l’utilisation des Robots mobile propage de plus en plus.
L’intérêt indéniable de cette catégorie est d’avoir permis d’augmenter
considérablement nos connaissances sur la localisation et la navigation de
systèmes autonomes

Concernant mon projet « un robot voiture à base Raspberry Pi 4 et la détection


des objets via une caméra », son organisation sera décomposé en quatre
chapitres principaux, le premier chapitre présente les définitions générales sur
les robots, le Raspberry Pi et étudie leurs composants et le fonctionnement de
ces derniers. Le deuxième chapitre sera consacré à la description de notre
réalisation contenant la fabrication du circuit imprimé et l’écriture des
programmes.

1
def target_hist(frame):
hsv_img=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
hist=cv2.calcHist([hsv_img],[0],None,[50],[0,255])
return hist

Chapitre 1

Généralités sur la robotique et la


Raspberry Pi 4

2
Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

I.1- Introduction
Ce chapitre examine en termes d’analyse le cahier des charges et la
définition générale sur la robotique, en particulier les Robots voitures.
Ultérieurement le chapitre aborde les composants intéressant la réalisation de
notre projet, cette partie sera décomposée en trois éléments secondaires qui sont
:

 La mécanique des moteurs et le mécanisme des roues.


 L’électronique de la carte Raspberry Pi 4.
 L’informatique de la programmation du Raspberry Pi 4.

I.2- Cahier des charges


Le cahier des charges sur lequel se base notre projet, constitue le pilier
descriptif de la voiture Robot pourvue de la capacité de réaliser :

 Déplacement automatique ;
 Détection des objets via caméra ;

Et pour cette réalisation nous avons utilisé plusieurs composants


électroniques, ces composants sont des MCCs, une carte Raspberry Pi 4, Un
driver moteur L298N et une caméra Pi. Chaque composant à son rôle dans le
fonctionnement de la voiture. On a utilisé quatre MCCs qui sont reliés
respectivement avec les quatre roues de la voiture, leurs rôles sont de faire
avancer, tourner ou de faire reculer la voiture. La Raspberry sert à commander

3
le robot suivant les instructions programmées par un code après acquisition des
informations à partir d’une caméra Pi. Le driver moteur L298N joue le rôle d’un
pont qui relie la carte Raspi avec les moteurs.

Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

I.3- Généralités sur la robotique


L’origine du mot robot est « Robota » qui signifie en tchèque « travail
forcé ». C’est une machine programmable qui peut accomplir les instructions
d’une créature intelligente.

On peut distinguer trois types d’après l’histoire en correspondant à


l’évolution de cette espèce crée par l’homme :

Le premier type de machine que l'on peut appeler robot correspond aux
"Automates". Ceux-ci sont généralement programmés à l'avance et permettent
d'effectuer des actions répétitives.

Le second type de robot correspond à ceux qui sont équipés de capteurs


(en fait les sens du robot). On trouve des capteurs de température, photo-
électronique, à ultrasons pour par exemple éviter les obstacles et/ou suivre une
trajectoire. Ces capteurs vont permettre au robot une relative adaptation à son
environnement afin de prendre en compte des paramètres aléatoires qui n'aurait
pu être envisagés lors de leur programmation initiale. Ces robots sont donc bien
plus autonomes que les automates.

Enfin le dernier type de robot existant correspond à ceux disposant d'une


intelligence dite "artificielle" et reposant sur des modèles mathématiques
complexes tels que les réseaux de neurones. En plus de capteurs physiques
comme leurs prédécesseurs, ces robots peuvent prendre des décisions beaucoup
plus complexes et s'appuient également sur un apprentissage de leurs erreurs
comme peut le faire l'être humain.

On peut aussi distinguer deux types d’après sa mobilité. Ordinairement,


on catégorise comme Robot mobile l’ensemble des robots qui se déplace. Par
opposition notamment aux robots manipulateurs qui peuvent être utilisés pour
des tâches qui ne nécessite pas de déplacement (à base fixe), par exemple : des
taches de tri, d’assemblage (notamment dans le secteur automobile) ou plus
récemment pour d’autres opérations exigeant de la précision (la chirurgie).
4
Leurs appellations sont désignées par leur type de locomotion qu’ils soient à
roues, marcheurs, sous-marins ou aériens.

Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

On peut estimer que les robots mobiles à roues constituent la plus grande
partie des robots mobiles. Historiquement, leur étude est née assez tôt, suivant
celle des robots manipulateurs, au milieu des années 1970. Leur faible
complexité en a fait de bons premiers sujets d’étude pour les roboticiens
intéressés par les systèmes autonomes. Les principales raisons de ce choix
technologique sont les suivantes : les roues sont plus faciles à contrôler, elles
procurent une meilleure stabilité au véhicule, elles dissipent moins d’énergie et
elles permettent au véhicule de se déplacer plus rapidement.

Les roues présentent aussi un nombre pas mal d’inconvénients en le


comparant aux mécanismes à jambes. Elles ne marchent bien que sur des
terrains relativement plats et dont la surface est dure. Sur des terrains non
convenables, les roues doivent être plus grandes que les obstacles qu’elles
risquent de rencontrer. Dans le cas de surfaces moins stables, les roues peuvent
glisser ou s’enliser, ce qui pose des difficultés de contrôle importantes.

Un robot mobile est composé de quatre parties principales. En voici la


description :

- Une structure mécanique qui sera le squelette/Châssis du robot.

5
Fig. 1 : Châssis d’un Robot voiture

Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

- Le second élément correspond aux moteurs qui vont permettre au robot


d’effectuer réellement ses actions.

Fig. 2 : Moteur à courant continue

- La troisième partie composante d'un robot correspond aux


différents capteurs sensoriels équipant le robot pour une application
particulière.

Fig. 3 : Capteur infrarouge Fig. 4 : Caméra d’une Raspberry Pi

- Enfin le cerveau : La partie commande. C'est cette partie qui va permettre


au robot d'analyser les données provenant des capteurs et d'envoyer les
ordres relatifs aux servomoteurs.

6
Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

I.4- le Raspberry Pi 4 :

Le Raspberry Pi 4 est un mini-ordinateur qui dispose d’un système


d’exploitation. Elle s’alimente sous tension unique de 5 volts, tension sur
laquelle il peut consommer jusqu’à 1.8A selon les taches qu’il exécute, et utilise
une carte SD à la place d’un disque dur, bien que l’on puisse le brancher à un
disque dur USB. On peut modifier des documents bureautiques, surfer sur
internet, jouer à des jeux, etc. L’intérêt d’utiliser cet ordinateur est sa capacité
d’interaction avec le monde extérieur et d’exécuter plusieurs variantes du
système d’exploitation libre (GNU/Linux, Raspbian Debian ...) et des autres
logiciels compatibles.

Fig. 6 : les broches de la Raspberry Pi 4

7
Comme il est montré dans la figure ci-dessous, cette carte comporte aussi
deux ports HDMI, deux ports USB 2.0, deux ports USB 3.0, un port Ethernet,
une prise Jack et un slot MicroSD, des GPIO broches d’entrée/sortie.

Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4

Ces composants lui permettent d’être branchée à n’importe quel


périphérique (souris, clavier, écran, capteurs, autres cartes...).

Conclusion
Dans ce chapitre, dans le but d’avoir une idée du matériel qu’on va
utiliser, on a parlé de la définition générale de la robotique, les types des robots,
la différence entre eux puis on a mentionné les composants des robots mobiles.
On a aussi défini la Raspberry en parlant des composants.

8
Chapitre 2

La mise en place

9
Chapitre 2 : La mise en place

II.1- Introduction
Dans ce chapitre on va commencer à mettre en place ce dont on a besoin
pour commencer à réaliser le robot voiture. Pour cela, on va faire marcher la
Raspberry, la connecter avec les moteurs et la caméra.

II.2- L’installation du OS duRaspberry :


Après le téléchargement du Raspberry Pi Imager qui transfert les fichiers
qui vont initialiser à installer le système d’exploitation dans une carte microSD
bien formatée. On devrait arriver sur cet écran qui permet de choisir parmi les
distributions disponibles :

Fig. 7 : les systèmes disponibles pour la Raspberry

10
Il nous suffit alors de cocher le système que nous souhaitons installer, ce
qui est Raspbian - c’est un système d’exploitation GNU/Linux nommé par la
fusion des mots Raspberry et Debian -, puis de cliquer sur « Installer ».

Chapitre 2 : La mise en place

On monte la carte SD après l’installation, branche l’ordinateur à un écran


avec le câble HDMI, une souris et un clavier, puis on le met en marche. On
devrait arriver sur cet écran

Fig. 8 : Desktop d’un Raspberry

II.3- Prendre control du Raspberry :


Ce n’est pas toujours pratique de brancher le Raspberry à un écran et un
clavier, pour divers projets ou celle-ci intervient par exemple dans les systèmes
embarqués, un écran et tous les autres périphériques deviennent vite
encombrant, deux des solutions qui existent c’est de communiquer avec des
commandes à distance avec des différents protocoles et serveurs ou accès
graphique à distance en utilisant VNC (Virtual Network Computing).
Pour parvenir à tel résultat, on va connecter le Raspberry et l’ordinateur
au même réseau Wifi, activer SSH et VNC dans notre Raspberry Pi puis
installer ses clients dans notre ordinateur.

11
SSH (Secure SHell) désigne à la fois un logiciel et un protocole de
communication informatique. Il permet de se connecter à distance sur une
machine en utilisant un compte utilisateur de cette dernière.
VNC, ou Virtual Network Computing, est un système permettant la prise
de contrôle à distance d’un ordinateur par un autre tout en montrant le bureau de
celle-ci. Ainsi, on peut voir en temps réel ce qui se passe sur le Raspberry Pi,
sans avoir à le brancher sur un moniteur.

Chapitre 2 : La mise en place

Activation de SSH et VNC


Par défaut, Ils sont installés sur le Raspberry Pi, mais sont désactivés
pour des raisons de sécurité. La première chose à faire sera donc d’activer SSH
et VNC sur le Raspberry Pi.

Procédure :
1. Démarrer la "Raspberry Pi"
2. Se connecter au terminal avec CTRL+ALT+T
3. Saisir la commande "sudo raspi-config" puis valider.
4. sélectionner "Interfacing Options"
5. Sélectionner l’option "ssh"
6. Sélectionner le choix "Enable".
7.Le même pour "VNC"
7. Confirmer le message par "Ok".
8. Terminer la configuration avec le bouton "Finish".

12
Fig.9 : Raspberry Pi paramètres

Installation du client SSH sur ordinateur


Pour réaliser la communication entre les différentes machines, et après
l'avoir activé sur le Raspberry, il ne reste plus qu'à l’installer sur l’ordinateur.

Chapitre 2 : La mise en place

La solution qui est proposée c’est d’installer un logiciel nommé Putty.


(C’est un logiciel open source disponible avec le code source, développé et pris
en charge par un groupe de volontaires).
Ce programme aide à se connecter à distance à des serveurs en utilisant les
protocoles SSH en entrant l’IP adresse de la Raspberry dans le champ « Host
Name ».

Fig.10 : Interface Putty

Après avoir entré l’IP


Adresse de le Raspberry, une
invite de commande qui nous

13
permet de saisir nos commandes s’affiche, il faut mettre le login et le mot de
passe qui sont par défaut :
- Login : Pi
- Mot de passe : Raspberry

Fig.11 : Invite de command de Putty

Chapitre 2 : La mise en place

Installation de VNC

On peut télécharger le client de VNC Viewer dans le site officiel, après


installation on peut concrétiser la connexion en entrant l’IP Adresse du
Raspberry

Fig.12 : connexion à partir du VNC Viewer

La mise à jour

14
Maintenant qu’on peut manipuler la carte à distance, il faut qu’on mise à
jour le système d’exploitation et tous les logiciels qui sont déjà installés en
utilisant la commande « apt-get update » et c’est préférable de l’utiliser chaque
fois qu’on installe un programme.
« apt-get » est un outil de commande qui permet de gérer les paquets sous
Linux. Sa tâche principale est de récupérer les informations et les paquets des
sources authentifiées pour les installer.

Chapitre 2 : La mise en place

II.4-Controleur des moteurs L298N:


Afin de contrôler les moteurs à partir du Raspberry d’une façon pratique
dans les deux sens et sans changer le branchement des fils, il faut un
intermédiaire entre le Raspberry et les moteurs.
Le L298N est un double pont en H qui lui permet de faire passer le
courant soit dans un sens ou d’un autre, ce qui donne la possibilité d’avoir le
résultat voulu.

15
Fig.13 : L298N

1 et 14- positif “+” du moteur 1 et 2


2 et 13- Ground “-“ du moteur 1 et 2
3- Cavalier 12v (permet d’alimenter le régulateur interne de 5V)
4-alimentation jusqu’à 35V
5- Ground à brancher sur le Raspberry
6-Sortie 5V
7 et 12- ENA Moteur 1 et ENB moteur 2 (permet de gérer la vitesse)

Chapitre 2 : La mise en place

II.3- Python :
Le Raspberry Pi nous donne la possibilité de le relier à une multitude des
composants externes (capteurs, actionneurs…), mais pour faire fonctionner tous
ces éléments, il faudra écrire des programmes spécifiques qui seront écrit en
Python.
On peut aussi écrire ces programmes en utilisant un autre langage de
programmation (Java, C++, Scratch…), mais on a opté pour Python car il est
très facile de s'y mettre, très convivial pour les débutants et c’est le langage de
programmation officielle qui a été pris en charge comme langue d’apprentissage
éducatif sur le Raspberry Pi.
Installation de Python en Raspberry :
Pour qu’on puisse installer Python, Cette commande suffit :
$ sudo apt-get install python3-dev

Fig.14: Installation de python

16
Les bibliothèques en Python :
En Python, une bibliothèque est un nombre de routines, qui peuvent être
déjà compilées et prêtes à être utilisées par des programmes, chacune a ses
propres usages qui rendent la programmation facile (Traitement du texte,
traitement d’images…)
Pour installer une bibliothèque, on utilise la commande « Pip », un
utilitaire fourni avec Python et qui permet d'installer simplement les
bibliothèques déposées sur l'index des paquets Python Pypi.

Chapitre 2 : La mise en place

Programmation des entrées / sorties avec python :


Toutes les broches qui sont marquées GPIO dans la Figure 6 en haut
peuvent être programmées comme entrées/sorties. Dans ce sens, il faut qu’on
installe le module GPIO qui fournit une classe pour les contrôler. Pour cela on
doit exécuter la commande "sudo apt-get install python-rpi.gpio"
Remarque : Sudo est un programme pour les systèmes d'exploitation
informatiques de type Unix qui permet aux utilisateurs d'exécuter des
programmes avec les privilèges de sécurité d'un autre utilisateur, par défaut
l'Administrateur.
Avant d’utiliser les broches, on doit indiquer au module GPIO la
numérotation de ces derniers. Le Raspberry Pi autorise deux numérotations :
- GPIO.BOARD fait référence à la numérotation physique des broches ;
- GPIO.BCM, la numérotation électronique de la puce.

Conclusion

17
Dans ce chapitre dédié à la mise en place du Raspberry Pi, On est arrivé à
le manipuler à distance, trouver une solution pour contrôler les moteurs et
donner une définition générale de Python et on a vu comment utiliser les
broches GPIO pour contrôler les composants électroniques à l’aide de langage
de programmation python comme préparation à réaliser le projet.

Chapitre 3

La détection des objets via caméra Pi

18
Chapitre 3 : La détection des objets via Caméra Pi

III.1-Introduction :
La vision par ordinateur est un domaine informatique qui permet aux
machines non seulement de voir mais aussi de traiter et d'analyser des images et
des vidéos numériques.
Un grand domaine d'application de la vision par ordinateur est la
détection d'objets, c'est-à-dire la capacité d'un ordinateur de localiser et
d'identifier des objets dans une image. Grâce au deep learning, les ordinateurs
peuvent, à partir de grands ensembles de données d'images, apprendre à
reconnaître et à suivre des objets vus dans des images et des vidéos avec une
grande précision.
L'objectif de la détection d'objets est de détecter toutes les instances
d'objets d'une classe connue, comme par exemple personnes, voitures ou
visages dans une image.
Cependant, une grande puissance de calcul est encore nécessaire pour
exécuter efficacement les tâches visuelles et, sur un appareil aux ressources
matérielles limitées, l'exécution d'un système de détection d'objets peut s'avérer
difficile. Le Raspberry Pi est un petit ordinateur, pas plus grand qu'une carte de
crédit. Ce type d’ordinateur n'a pas la puissance de calcul des ordinateurs de

19
bureau traditionnels, mais en raison de leur faible coût et de leur taille, il est
souvent préférable de les utiliser pour certaines tâches.

III.2- La Méthode :
Il n'existe pas de méthode optimale à utiliser dans un système de
détection d'objets. De nouvelles méthodes sont présentées en permanence,
chacune prétendant être plus performante que les autres. Ainsi que les systèmes
de détection d'objets construits avec du matériel similaire ont montré des
performances médiocres auparavant. C'est pourquoi les résultats devraient
montrer que le Raspberry Pi 4 seul aura du mal à atteindre des vitesses plus
élevées sans sacrifier beaucoup de précision.
Il existe de nombreuses méthodes de détection d'objets qui pourraient être
testées dans le cadre de ce projet. Mais en raison du temps limité, on va tester
qu’une.

Chapitre 3 : La détection des objets via Caméra Pi

OpenCV
Le logiciel de ce projet consiste un script écrit en langage de Python. Il y
en a plusieurs cadres de deep learning open source qui peuvent être utilisés pour
la détection d'objets, tels que Tensorflow ou OpenCV. Pour ce projet, la
bibliothèque open source de vision par ordinateur OpenCV a été choisie pour
gérer cette tâche.
C’est une énorme bibliothèque open-source pour la vision par ordinateur,
l'apprentissage automatique et le traitement d'images. OpenCV supporte une
grande variété de langages de programmation comme Python, C++, Java, etc. Il
peut traiter des images et des vidéos pour identifier des objets, des visages ou
même l'écriture d'un être humain.
Les fonctions fournies par cette bibliothèque sont également nécessaires
dans le processus de développement de l'application de suivi d'objets. Il existe
de nombreuses possibilités, mais dans le cadre de ce projet, l'accent est mis sur
l'acquisition de trames à partir d'un flux de caméra en direct, le seuillage de
l'image en utilisant les plages de l'espace couleur HSV, la recherche de taches et
l'utilisation de leurs contours détectés dans une image binaire
Les Fonctions OpenCV les plus pertinentes pour la détection d'objets à base
de couleur :

20
Nom de la fonction Courte description
Vérifie si les éléments du tableau de
pixels d'une image se trouvent entre
inRange
les éléments de deux autres tableaux
(limites inférieure et supérieure)
imshow Affiche une image.
Convertir une image (matrice de
pixels) dans un autre format.
cvtColor Dans ce projet, il est utilisé pour
convertir chaque image capturée de la
caméra de BGR à HSV.
Recherche les contours de toutes les
zones possibles dans une image
binaire et les stocke dans un vecteur
findContours
de points
(les pixels les plus externes des zones
blanches).

Chapitre 3 : La détection des objets via Caméra Pi

Prend en entrée un vecteur de points


formant le contour d'une région et
contourArea
calcule la valeur de sa surface
(nombre de pixels)
Utilisée sur une image binaire, cette
fonction agrandit la zone couverte par
erode les pixels noirs, éliminant la plupart
du bruit
(pixels blancs isolés aléatoires)
Utilisé sur une image binaire après
« erode » pour agrandir les zones de
dilate pixels blancs, ce qui permet à toutes
les zones assez grandes de
retourner à leur taille d'origine.

HSV :
L'espace couleur HSV se compose de trois descripteurs différents, qui
sont toujours le nombre minimum pour classifier une couleur, le premier étant
"hue" la teinte qui décrit une couleur que l'œil humain peut voir. Le deuxième
est la saturation, qui décrit la pureté d'une couleur ou, dans le domaine de la

21
vision par ordinateur, combien cette couleur est mélangée au blanc et la
troisième est "Value" la valeur (ou luminosité), qui représente au contraire
l'ampleur du noir dans notre couleur. Par conséquent, Une couleur avec une
faible valeur semble plus sombre ou simplement noire
La raison pour laquelle on utilise ici le format de pixel HSV au lieu de
RGB, est que l'espace couleur HSV sépare les informations de couleur
(saturation) de l'intensité lumineuse (valeur). En ignorant la valeur dans les
paramètres de seuillage, il est toujours possible de détecter n'importe quelle
couleur dans une image, à condition d'utiliser les bonnes valeurs de teinte et de
saturation.

III.3- Installation des logiciels :


Pour que le logiciel OpenCV s’installe dans le Raspberry, on doit
configurer quelques éléments pour assurer une installation correcte.

Chapitre 3 : La détection des objets via Caméra Pi

III.3-1- Installation de CMake :


C’est un système extensible et open-source qui gère le processus de
construction dans un système d'exploitation et d'une manière indépendante du
compilateur.

CMake est un utilitaire de configuration. Il génère les fichiers du projet


en fonction de besoins, des bibliothèques installées et du matériel disponible sur
la machine qu’on a besoin pour installer OpenCV.
Et puisque l’installation de CMake est en snap (Un format spécifique
défini comme une image), il faut installer snapd (Un programme nécessaire à
l'exécution de snaps)
 Commande pour installer snapd : $ sudo apt install snapd

22
Fig.15 : Installation snapd

 Commandes pour installer CMake : $ sudo snap install cmake –classic

Fig. 16 : Installation CMAKE

Chapitre 3 : La détection des objets via Caméra Pi

III.3-2- Installation de Numpy


OpenCV a besoin de NumPy pour fonctionner. C’est le paquetage
fondamental pour le calcul scientifique en Python. Il s'agit d'une bibliothèque
Python qui fournit un objet tableau multidimensionnel, divers objets dérivés
(tels que les tableaux masqués et les matrices) et un assortiment de routines
pour des opérations rapides sur les tableaux.
Pour l’installer, on utilise la commande $ pip install numpy
Remarque : pip est un gestionnaire de paquets pour Python. Cela signifie
que c'est un outil qui vous permet d'installer et de gérer des bibliothèques et des
dépendances supplémentaires qui ne sont pas distribuées dans le cadre de la
bibliothèque standard, On peut l’installer par la commande :
$ sudo apt-get install python-pip

III.3-3- Installation de libopencv:

23
Il s'agit d'un métapaquet qui fournit le paquet de développement
nécessaire au développement d'OpenCV (Open Computer Vision).
On peut l’installer par la commande :
$ sudo apt-get install libopencv-devpython-opencv

III.3-4- Installation d’OpenCV


Maintenant qu'on a tout préparé pour l'installation d'opencv. On peut la
commencer. On va télécharger le code source d'OpenCV et le compiler sur
notre Raspberry Pi en utilisant CMake.
Cette ligne de commande permet de télécharger le code source :
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.0.zip
OpenCV a quelques paquets préconstruits pour python qui nous aideront à
développer des choses plus facilement, appelés OpenCV contrib. On va donc le
télécharger en utilisant une commande similaire à celle présentée ci-dessous :
wget -O opencv_contrib.zip
https://github.com/opencv/opencv_contrib/archive/4.0.0.zip

Chapitre 3 : La détection des objets via Caméra Pi

Fig.17: Téléchargement de OpenCV

Puis on va décompresser les fichiers avec les commandes $ unzip


opencv.zip et $ unzip opencv_contrib.zip
L’étape qui suit est de créer la direction dans laquelle on peut configurer la
façon dont l'Open CV doit être compilé en utilisant ces commandes :
24
$ cd ~/opencv-4.0.0 $ mkdir build $ cd build

Fig.18: Creation d’un repertoire

Après, on doit compiler les fichiers avec l’outil CMake dans le répertoire
qu’on a créé comme suit

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.0/modules \
-D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D WITH_TBB=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..
Chapitre 3 : La détection des objets via Caméra Pi

Après Configuration on doit voir le texte “Configuring done”


et “Generating done” comme indiqué ci-dessous.

Fig.19 : configuration complète

25
Pour la dernière étape, la compilation, on doit utiliser la commande $
Make –j4
Le programme commencera à construire OpenCV et vous pourrez
voir la progression en pourcentage. Le processus prendrait environ 30-40
minutes.
Remarque : La commande "make -j4" utilise les quatre cœurs pour compiler
OpenCV, pour utiliser qu’un cœur on peut utiliser « make –j1 » mais cela
prendra encore plus de temps.
Enfin, on peut vérifier si la bibliothèque a été ajoutée avec succès en
exécutant une simple commande python

Fig.20 : Test pour opencv

On ne devrait pas recevoir d'erreur après avoir fait cela.

Chapitre 3 : La détection des objets via Caméra Pi

Conclusion
Dans ce chapitre, on a parlé de la vision des ordinateur en donnant une
définition, on a exploré les méthodes en faisant connaissance aux logiciels dont
on a besoin et on a installé les bibliothèques et le logiciel qui vont nous
permettre de traiter la vidéo qu’on va capter par la caméra
Dans le chapitre qui suit on va commencer à réaliser le projet en liant les
composants et coder les programmes.

26
Chapitre 4
27
La Réalisation

IV.1-Introduction :
Dans ce chapitre, on va aborder la réalisation de notre robot voiture en
deux parties, la première sera de le monter physiquement et la deuxième sera de
coder le programme qui va nous permettre d’identifier un objet et le suivre.

IV.2- Montage :

Le but de l'opération est de relier le Raspberry pi 4 avec les quatre


moteurs à courant continue, pour faire cela on a besoin de brancher les moteurs
au moteur driver L298N et ce dernier avec le Raspberry Pi
Puisque le moteur driver n’a que deux ports pour les moteurs, on va
brancher deux moteurs dans chaque port, et le montage sera comme montré
dans cette figure :

28
Fig.21 : Montage

Comme il est montré dans la figure, on a branché les broches du L298N


comme suit : (On a choisi la numérotation électronique)

- enA = 25; in1A = 24; in2A = 23;


- enB = 4; in1B = 22; in2B = 27;

IV.3-Partie Logicielle :
Caméra Pi :
La capture de la vidéo directement à partir du module caméra du Raspberry
Pi est simple avec OpenCV et ne nécessite pas de pilotes supplémentaires ou
d'autres logiciels.

Préparation de l'image capturée pour la détection d'objets


La première étape pour rendre l'image facilement lisible est de la convertir
en un espace couleur HSV qui est beaucoup plus facile à seuiller (cv2.
cvtColor).
La deuxième étape est le seuillage qui, dans ce cas, consiste simplement à
itérer dans un tableau de pixels de l'image capturée contenant des valeurs HSV
29
et à définir un seuil. L'image capturée contenant des valeurs HSV et en fixant
les valeurs de ces pixels à 0 si leurs valeurs sont inférieures à une limite
inférieure ou 255 lorsque les valeurs sont supérieures à une limite supérieure,
créant ainsi une image binaire. Les limites sont spécifiées par des scalaires
contenant les limites actuellement définies pour la teinte, la saturation et la
valeur.
La troisième étape, l'érosion et la dilatation. Cette étape est facultative car
l'application utilise déjà la vérification conditionnelle des valeurs d'aire pour
déterminer si une région est suffisamment grande ou petite pour être considérée
comme un objet.

FIG.

Le choix d'une plage HSV correspondante fait partie intégrante de


l'utilisation de l'application de détection d'objets créée.

Les valeurs de teinte sont comprises entre 0 et 179. Les chiffres sont des
estimations approximatives de là où une couleur se termine et où une autre
commence, tandis que le "tuyau" représente sa nature continue, ce qui signifie
que si la limite inférieure est définie pour être plus élevée que la limite
supérieure sur la barre de contrôle, la gamme ne se terminera pas à 179, mais
progressera plutôt vers 0.

30
Fig.22 Image avant et après les 3 étapes

Dans ce cas, la gamme de teintes sélectionnée était comprise entre 0 et 38, ce


qui correspond à peu près à l'orange ou au jaune (couleur de la porte sur
l'image). La limite inférieure de la saturation a également été relevée pour tenir
compte des conditions d'éclairage actuelles.

Recherche d'objets sur une image préparée :


Après le seuillage de l'image capturée en une image binaire, le programme
peut commencer à chercher des "blobs" - régions de pixels blancs - et les
stocker en mémoire s'ils sont considérés comme des objets. Pour trouver ces
régions, les bibliothèques d'OpenCV disposent d'une fonction nommée
findContours
Ensuite, le programme recherche dans l'image les contours, qui sont
essentiellement des vecteurs de points qui forment une séquence de points
entourant une zone de couleur unique. Dans le cas d'objets courbes (par
exemple, circulaires), ces vecteurs contiendront une grande quantité de points,
afin de créer l'illusion de formes lisses, alors qu'en même temps, la fonction
modifie également l'image source de sorte que moins de points doivent être
acquis. A l'inverse, lors de la recherche du contour d'un objet rectangulaire,
seuls quatre points sont nécessaires (un pour chaque coin), puisqu'une ligne
droite peut être tracée de l'un à l'autre, formant finalement un rectangle.

31
Fig.23 : points de contour d'un demi-cercle et d'un rectangle

Après avoir recueilli des informations sur tous les blobs de l'image en les
donnant des indices, le programme peut alors calculer la taille de la zone (cv2.
contourArea) et les coordonnées centrales pour les zones à l'intérieur de chaque
contour. Il les compare pour qu’on travaille qu’avec le plus grand contour et
l’entourer d’un rectangle avec la fonction « boundingRect ».

Les mouvements de la voiture :


Maintenant qu'on reconnaît l'objet, il est temps pour la voiture robot de se
déplacer vers l'objet et il sera en mesure de le faire en travaillant sur le centre de
cet objet comme indiqué ci-dessous :
Au début, lorsqu'aucun objet n'a été détecté auparavant, la voiture
continue de tourner à gauche jusqu'à ce qu'elle aperçoive l'objet et enregistre les
coordinations.

32
Puis vérifie si la coordonnée x est au centre, sinon il se déplace pour la
mettre au centre, de cette façon le robot fera face directement à l'objet.
Lorsque la voiture fait directement face à l'objet, elle avance tout en
vérifiant que la coordonnée x est au centre.

La distance de l'objet est prise en compte en calculant la longueur et la


largeur du rectangle qui entoure la balle (puisque notre objet est une balle de
tennis) :
- Si le rectangle est petit alors l'objet est loin, la voiture est programmée
pour se déplacer rapidement.
- Si le rectangle est grand alors l'objet est proche et la voiture change sa
vitesse pour se déplacer plus lentement.
Jusqu'à ce que le rectangle atteigne une certaine taille, ce qui signifie
que l'objet est juste devant la voiture, la voiture s'arrête.

33
Si l'objet se déplace, la variable "last" se transforme en un certain nombre
dépendant de la direction dans laquelle l'objet a été vu pour la dernière fois à
l'écran, puis tourne à droite si la cible a été vue pour la dernière fois à droite.

Conclusion générale :
L'identification d'objets par filtrage des couleurs (valeurs HSV des pixels)
n'est qu'une des nombreuses méthodes qui peuvent être utilisées pour un tel
système. La détection d'objets à l'aide de couleurs est une méthode efficace,
surtout lorsqu'il s'agit d'objets qui n'ont généralement pas de caractéristiques ou
coins distinctes. Ces objets peuvent être des ballons ou d'autres objets ronds et
colorés.
Le problème principal lié à l'utilisation des couleurs, ou plus précisément
des valeurs de pixels, est l'effet d'un éclairage irrégulier, auquel un ordinateur
peut être très sensible, alors que l'œil humain ne peut détecter qu'une légère
différence. Le cause est l’incapacité de l’ordinateur de s’adapter aux nouvelles
conditions en raison de lumières naturelles.
OpenCV et Python possèdent tous les deux de bibliothèques vastes, avec
des possibilités infinies en ce qui concerne les opérations visuelles, le traitement
des images, la gestion de la mémoire et bien d'autres choses encore. Il est donc
tout à fait nécessaire de mener des recherches plus approfondies dans ce
domaine. Bien que le projet actuellement développé a été réalisé conformément
aux attentes fixées au début de ce travail, une compréhension plus large (ou plus

34
spécifique) des outils utilisés est nécessaire pour créer des systèmes sans défauts
et rentables.

35

Vous aimerez peut-être aussi