1. Livres & vidéos
  2. Le Machine Learning et l'IA générative avec Python
  3. Le Deep Learning avec OpenCV
Extrait - Le Machine Learning et l'IA générative avec Python De la théorie à la pratique (2e édition)
Extraits du livre
Le Machine Learning et l'IA générative avec Python De la théorie à la pratique (2e édition)
9 avis
Revenir à la page d'achat du livre

Le Deep Learning avec OpenCV

Objectif du chapitre

Ce chapitre aborde OpenCV, une bibliothèque dédiée à de la vision par ordinateur. Nous allons découvrir un certain nombre de fonctionnalités de cette bibliothèque à travers plusieurs exemples simples.

À la fin de ce chapitre, le lecteur aura abordé :

  • l’installation d’un environnement de travail pour OpenCV ;

  • le chargement et manipulation des images ;

  • le travail avec les flux vidéo ;

  • la réalisation des opérations de bases et des opérations avancées sur des images ;

  • la détection d’objets dans les images :

  • la reconnaissance faciale sur les images et les vidéos :

  • le fait de traquer des positions sur des vidéos :

  • l’utilisation du modèle YOLO.

Introduction à OpenCV

Aujourd’hui, OpenCV est l’un des outils les plus populaires et les plus utilisés dans le domaine de la vision par ordinateur et du traitement d’images. Créée en 2000 par Intel, cette bibliothèque open source a été conçue pour rendre la vision par ordinateur plus accessible à tous, que ce soit dans le milieu industriel, universitaire, ou tout simplement pour les développeurs. Elle permet de manipuler des images et des vidéos avec une grande flexibilité, tout en offrant une vaste panoplie d’algorithmes et de fonctionnalités qui permettent de répondre à des besoins variés. Que ce soit pour la reconnaissance faciale, la détection d’objets, l’analyse de mouvements, ou même la reconstruction d’images en trois dimensions, OpenCV s’impose comme une solution de référence.

Sa force ? Elle est gratuite, libre d’utilisation, et fonctionne sur une large gamme de systèmes d’exploitation tels que Windows, Linux, MacOS, Android, iOS. Ce qui la rend particulièrement attrayante, c’est qu’elle est adaptée aussi bien pour des applications commerciales que pour des projets personnels, et elle est largement adoptée par de nombreux secteurs métiers. Avec des millions d’utilisateurs dans le monde entier, OpenCV est aujourd’hui...

L’architecture d’OpenCV

L’une des grandes forces d’OpenCV, c’est son architecture modulaire. Elle est composée de différents modules, chacun étant spécialisé dans un domaine particulier du traitement d’images et de la vision par ordinateur. Cette approche modulaire permet aux utilisateurs de n’utiliser que les parties d’OpenCV qui sont pertinentes pour leur projet, tout en évitant de surcharger leur application avec des fonctionnalités inutiles. Voici la liste des modules les plus utilisés d’OpenCV :

  • Core : le module Core est le cœur d’OpenCV. Il gère les opérations de base telles que la gestion des matrices, des vecteurs, et des types de données. Ce module est essentiel pour toutes les autres fonctionnalités de la bibliothèque, car il pose les bases du traitement des images et des vidéos. Par exemple, c’est dans ce module que l’on trouve les fonctions qui permettent de charger et de sauvegarder des images, ou de convertir des images entre différents formats (par exemple, du RGB au niveau de gris).

  • Imgproc : ce module est entièrement dédié au traitement des images. Il permet de réaliser des opérations telles que le lissage d’images, l’amélioration du contraste, la détection des contours, ou encore les transformations...

Installer et tester OpenCV

Pour installer OpenCV, nous allons commencer par la création d’un environnement virtuel avec venv. En effet, dans le chapitre précédent, nous avons vu comment utiliser Anaconda pour la création et la gestion des environnements virtuels Python. Dans ce chapitre, nous allons voir une autre façon de création d’un environnement virtuel Python en utilisant l’outil natif à Python et qui est venv. Suivez les quelques étapes ci-dessous pour créer un environnement virtuel :

 Lancez un terminal dans votre VSCode. Dans ce terminal, positionnez-vous dans le dossier contenant les exercices de ce chapitre, soit le dossier 05-02.

 Exécutez la commande suivante :

python -m venv open_cv_env 

À la fin de l’exécution de cette commande, un nouveau dossier portant le nom open_cv_env sera créé sous le dossier en cours. Ce dossier contient toutes les informations nécessaires pour le bon fonctionnement de votre environnement virtuel open_cv_env.

 Pour activer cet environnement virtuel, exécutez la commande suivante :

.\open_cv_env\Scripts\activate 

Cela devrait vous afficher une nouvelle invite de commande dans le nom commence par (open_cv_env). Cela indique que votre environnement virtuel open_cv_env est actif.

 Exécutez la commande suivante pour installer OpenCV :

pip install opencv-python...

Manipuler les images avec OpenCV

Nous allons commencer notre apprentissage OpenCV avec quelques exemples de code où nous allons réaliser des opérations de bases sur des images avec cette bibliothèque.

1. Charger une image

Avant de pouvoir travailler sur des images avec OpenCV, il est nécessaire de charger ces images en mémoire. Le code suivant, voir le fichier 02_Charger_une_image.py, permet de charger l’image image_01.jpg.

import numpy as np  
import cv2  
  
img = cv2.imread("Data\\image_01.jpg")  
cv2.namedWindow("Image")  
cv2.imshow("Image", img)  
cv2.moveWindow("Image", 0, 0)  
cv2.waitKey(0)  
cv2.destroyAllWindows() 

Voici une explication détaillée de ce code instruction par instruction :

1. img = cv2.imread("Data\\image_01.jpg") 

Cette instruction est utilisée pour lire une image à partir du fichier spécifié (ici, Data\\image_01.jpg). La fonction imread() retourne une matrice, un tableau NumPy, représentant l’image. Chaque élément du tableau contient des valeurs pour les canaux de couleur (généralement BGR pour les images en couleur avec OpenCV). Avec cette instruction l’image sera chargée en mémoire sous la forme d’une structure de données utilisable par OpenCV.

2. cv2.namedWindow("Image") 

La méthode cv2.namedWindow() crée une fenêtre dans laquelle l’image peut être affichée. Le nom de la fenêtre ("Image") est passé en paramètre et sera utilisé comme identifiant pour cette fenêtre. Cette fenêtre peut être manipulée ultérieurement. Par exemple, on peut la redimensionner ou la déplacer comme on le fait plus loin dans ce code. Si cette fonction n’est pas appelée, OpenCV créera une fenêtre par défaut.

3. cv2.imshow("Image", img) 

L’instruction cv2.imshow() affiche l’image dans la fenêtre spécifiée. Le premier argument est le nom de la fenêtre où l’image sera affichée (ici "Image"). Le second argument est l’image elle-même (ici, img, qui contient l’image chargée précédemment avec...

La détection et la reconnaissance d’objets

Dans cette section, nous allons réaliser quelques exemples où seront utilisés des modèles de reconnaissance d’objets dans les images, mais aussi, des modèles de détection et de suivi d’objets dans les vidéos.

1. La détection faciale sur une image

Notre prochain exemple utilise le modèle haarcascade_frontalface_default.xml pour détecter la présence de visage humain dans une image. Voici le code, voir le fichier 10_Développer_la_détection_faciale.py.

import cv2  
 
img = cv2.imread("Data\\image_03.jpg",1)  
 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
 
path = "haarcascade_frontalface_default.xml"  
 
face_cascade = cv2.CascadeClassifier(path)  
 
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.10, 
minNeighbors=5, minSize=(40,40))  
  
 
for (x, y, w, h) in faces:  
    cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)  
 
cv2.imshow("Image",img)  
cv2.waitKey(0)  
cv2.destroyAllWindows() 

Après la lecture de l’image image_03.jpg, la méthode cv2.cvtColor() convertit une image d’un espace colorimétrique à un autre. L’attribut cv2.COLOR_BGR2GRAY permet de convertir l’image en niveaux de gris, ce qui simplifie le traitement pour des algorithmes tels que Haar Cascade utilisé ici. En effet, les images en niveaux de gris réduisent les dimensions des données et facilitent l’analyse des caractéristiques.

L’instruction cv2.CascadeClassifier(path) charge le modèle Haar Cascade, utilisé pour détecter des objets dans les images.

L’instruction faces = face_cascade.detectMultiScale(gray, scaleFactor=1.10, minNeighbors=5, minSize=(40,40)) est la plus importante dans cet exemple. Elle utilise la méthode detectMultiScale() qui permet la détection de plusieurs objets dans une image. Voici la définition de ses paramètres :

  • gray : image en niveaux de gris à analyser.

  • scaleFactor=1.10 : facteur d’échelle utilisé pour réduire la taille de l’image à chaque itération de détection. Une valeur proche de 1.0 améliore la précision, mais augmente...

Conclusion

Ce chapitre nous a permet d’aborder OpenCV. Vous avez sans doute remarqué la simplicité avec laquelle OpenCV peut être utilisée pour réaliser des traitements avancés sur les images et les vidéos. En effet, via des exemples de très petite taille et relativement faciles à aborder, nous avons vu comment appliquer quelques opérations de bases sur les images, puis nous avons développé des exemples pour appliquer des modèles de reconnaissance et de suivi d’objets dans les images, tout ça avec seulement quelques lignes du code Pyton ! Un des points les plus importants à retenir de ce chapitre est que OpenCV est une bibliothèque de choix lorsque nous souhaitons capturer et travailler sur un flux vidéo afin d’appliquer des modèles déjà prêts. Ces modèles peuvent être développés en utilisant TensorFlow que nous avons eu l’occasion d’aborder ou avec d’autres frameworks tels que PyTorch que nous allons aborder au chapitre suivant. Pour un projet donné donc, nous pouvons utiliser TensorFlow ou PyTorch pour entraîner un modèle puis utiliser OpenCV afin de capturer les images en temps réel et appliquer nos modèles sur ces images. Pour finir et comme exemple d’exercice que vous pouvez réaliser afin d’améliorer votre...