|
|
||
|---|---|---|
| .. | ||
| lab | ||
| README.md | ||
README.md
Introduction à la Vision par Ordinateur
La Vision par Ordinateur est une discipline dont l'objectif est de permettre aux ordinateurs d'acquérir une compréhension de haut niveau des images numériques. C'est une définition assez large, car comprendre peut signifier de nombreuses choses différentes, y compris trouver un objet sur une image (détection d'objet), comprendre ce qui se passe (détection d'événements), décrire une image en texte, ou reconstruire une scène en 3D. Il existe également des tâches spéciales liées aux images humaines : estimation de l'âge et des émotions, détection et identification de visages, et estimation de la pose en 3D, pour n'en nommer que quelques-unes.
Quiz avant le cours
L'une des tâches les plus simples de la vision par ordinateur est la classification d'images.
La vision par ordinateur est souvent considérée comme une branche de l'IA. De nos jours, la plupart des tâches de vision par ordinateur sont résolues à l'aide de réseaux neuronaux. Nous allons en apprendre davantage sur le type spécial de réseaux neuronaux utilisés pour la vision par ordinateur, les réseaux neuronaux convolutionnels, tout au long de cette section.
Cependant, avant de passer l'image à un réseau neuronal, dans de nombreux cas, il est judicieux d'utiliser certaines techniques algorithmiques pour améliorer l'image.
Il existe plusieurs bibliothèques Python disponibles pour le traitement d'images :
- imageio peut être utilisé pour lire/écrire différents formats d'image. Il prend également en charge ffmpeg, un outil utile pour convertir des images de trames vidéo.
- Pillow (également connu sous le nom de PIL) est un peu plus puissant et prend également en charge certaines manipulations d'images telles que le morphing, les ajustements de palette, et plus encore.
- OpenCV est une bibliothèque de traitement d'images puissante écrite en C++, qui est devenue la norme de facto pour le traitement d'images. Elle dispose d'une interface Python pratique.
- dlib est une bibliothèque C++ qui implémente de nombreux algorithmes d'apprentissage automatique, y compris certains des algorithmes de vision par ordinateur. Elle dispose également d'une interface Python et peut être utilisée pour des tâches difficiles telles que la détection de visages et de points de repère faciaux.
OpenCV
OpenCV est considérée comme la norme de facto pour le traitement d'images. Elle contient de nombreux algorithmes utiles, implémentés en C++. Vous pouvez également appeler OpenCV depuis Python.
Un bon endroit pour apprendre OpenCV est ce cours Learn OpenCV. Dans notre programme, notre objectif n'est pas d'apprendre OpenCV, mais de vous montrer quelques exemples de quand cela peut être utilisé, et comment.
Chargement des Images
Les images en Python peuvent être représentées de manière pratique par des tableaux NumPy. Par exemple, les images en niveaux de gris de taille 320x200 pixels seraient stockées dans un tableau de 200x320, et les images couleur de la même dimension auraient une forme de 200x320x3 (pour 3 canaux de couleur). Pour charger une image, vous pouvez utiliser le code suivant :
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Traditionnellement, OpenCV utilise un encodage BGR (Bleu-Vert-Rouge) pour les images couleur, tandis que le reste des outils Python utilise le plus traditionnel RGB (Rouge-Vert-Bleu). Pour que l'image apparaisse correctement, vous devez la convertir en espace colorimétrique RGB, soit en échangeant les dimensions dans le tableau NumPy, soit en appelant une fonction OpenCV :
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Les mêmes fonctions cvtColor function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space.
You can also use OpenCV to load video frame-by-frame - an example is given in the exercise OpenCV Notebook.
Image Processing
Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including:
- Resizing the image using
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Blurring the image using
im = cv2.medianBlur(im,3)orim = cv2.GaussianBlur(im, (3,3), 0) - Changing the brightness and contrast of the image can be done by NumPy array manipulations, as described in this Stackoverflow note.
- Using thresholding by calling
cv2.threshold/cv2.adaptiveThreshold, qui sont souvent préférables à l'ajustement de la luminosité ou du contraste. - Application de différentes transformations à l'image :
- Transformations affines peuvent être utiles si vous devez combiner rotation, redimensionnement et déformation de l'image et que vous connaissez la position source et destination de trois points dans l'image. Les transformations affines gardent les lignes parallèles.
- Transformations de perspective peuvent être utiles lorsque vous connaissez les positions source et destination de 4 points dans l'image. Par exemple, si vous prenez une photo d'un document rectangulaire avec un smartphone sous un certain angle, et que vous souhaitez obtenir une image rectangulaire du document lui-même.
- Comprendre le mouvement à l'intérieur de l'image en utilisant le flux optique.
Exemples d'utilisation de la Vision par Ordinateur
Dans notre Notebook OpenCV, nous donnons quelques exemples de quand la vision par ordinateur peut être utilisée pour effectuer des tâches spécifiques :
- Prétraitement d'une photographie d'un livre en braille. Nous nous concentrons sur la façon dont nous pouvons utiliser le seuillage, la détection de caractéristiques, la transformation de perspective et les manipulations NumPy pour séparer les symboles braille individuels pour une classification ultérieure par un réseau neuronal.
![]() |
![]() |
![]() |
|---|
Image provenant de OpenCV.ipynb
- Détection de mouvement dans une vidéo à l'aide de la différence de trame. Si la caméra est fixe, alors les trames du flux de la caméra devraient être assez similaires les unes aux autres. Puisque les trames sont représentées sous forme de tableaux, il suffit de soustraire ces tableaux pour deux trames consécutives afin d'obtenir la différence de pixels, qui devrait être faible pour des trames statiques et devenir plus élevée lorsqu'il y a un mouvement substantiel dans l'image.
Image provenant de OpenCV.ipynb
-
Détection de mouvement à l'aide du Flux Optique. Le flux optique nous permet de comprendre comment les pixels individuels sur les trames vidéo se déplacent. Il existe deux types de flux optique :
- Flux Optique Dense calcule le champ vectoriel qui montre pour chaque pixel où il se déplace
- Flux Optique Sparse est basé sur la prise de certaines caractéristiques distinctives dans l'image (par exemple, les contours), et la construction de leur trajectoire d'une trame à l'autre.
Image provenant de OpenCV.ipynb
✍️ Notebooks d'exemple : OpenCV essayez OpenCV en action
Faisons quelques expériences avec OpenCV en explorant le Notebook OpenCV
Conclusion
Parfois, des tâches relativement complexes telles que la détection de mouvement ou la détection de bout de doigt peuvent être résolues uniquement par la vision par ordinateur. Ainsi, il est très utile de connaître les techniques de base de la vision par ordinateur, et ce que des bibliothèques comme OpenCV peuvent faire.
🚀 Défi
Regardez cette vidéo de l'émission AI pour en savoir plus sur le projet Cortic Tigers et comment ils ont construit une solution basée sur des blocs pour démocratiser les tâches de vision par ordinateur via un robot. Faites des recherches sur d'autres projets similaires qui aident à intégrer de nouveaux apprenants dans le domaine.
Quiz après le cours
Revue & Auto-étude
Lisez-en plus sur le flux optique dans ce super tutoriel.
Devoir
Dans ce laboratoire, vous allez filmer une vidéo avec des gestes simples, et votre objectif est d'extraire les mouvements haut/bas/gauche/droite en utilisant le flux optique.
Avertissement :
Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.




