Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Les bases de la vision par ordinateur

La leçon complète est à lire ici. Créez un compte gratuit pour la pratiquer dans un labo en direct.

Labo de conteneurs11 min de lecture6 commandes

Combien y a-t-il de pièces sur l'image ?

Une personne compte les pièces d'une photo en une seconde. Un ordinateur reçoit seulement une longue liste de nombres et il faut lui dire comment la transformer en « neuf pièces ». Le faire pas à pas, c'est cela, la vision par ordinateur.

À la fin de cette leçon

Remarque

Je peux lire les pixels d'une image et utiliser un seuil pour compter les objets qu'elle contient.

Mots clés

  • Pixel : un point d'une image, enregistré sous forme de nombres.
  • Mode : la façon dont les nombres sont rangés, par exemple RVB (rouge, vert, bleu) ou L (un seul niveau de gris).
  • Niveau de gris : un nombre de 0 (noir) à 255 (blanc).
  • Seuil : un niveau de gris qui sépare les pixels sombres des pixels clairs.
  • Filtre : une règle qui change chaque pixel d'après les pixels qui l'entourent, comme un flou.
  • Étiquette : un numéro donné à chaque objet séparé trouvé dans une image.

Pour commencer : ce que tu sais déjà

Remarque

Réponds dans ta tête. 1. Quelles sont les trois couleurs mélangées pour faire toutes les couleurs d'un écran ? 2. Qu'est-ce qui est plus clair, 40 ou 200, sur une échelle de 0 à 255 ? 3. Que fait > dans une comparaison ? Réponses : rouge, vert et bleu ; 200 ; il demande si le côté gauche est plus grand que le côté droit.

Avant de commencer

Remarque

Appuie sur Démarrer le lab dans la barre en haut de la leçon et attends qu'il indique qu'il est en marche. Il y a un seul conteneur, jupyter, et le terminal atteint son Python avec docker exec jupyter, qui lance une commande à l'intérieur. Le lien JupyterLab ouvre sa page web, sur le port 8888, où tu peux ouvrir les images et les voir. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l'une après l'autre, dans la même session. Pour suivre les commandes ou taper les tiennes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.

Une image est une grille de nombres

ls images liste les cinq images dessinées par le lab. Le premier script ouvre coins.png et affiche ce qu'elle contient. La réponse dit que l'image fait 320 pixels de large et 240 de haut, en mode RGB. Le pixel en 10, 10 vaut (35, 35, 35), presque noir : c'est le fond. Le pixel en 50, 50 vaut (197, 157, 62), une couleur dorée : c'est un morceau de pièce. Le niveau de gris moyen de toute l'image est 57,6, sombre, car la plus grande partie est du fond.

Commande
docker exec jupyter ls images

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Commande
docker exec jupyter python3 steps/look.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le gris garde la luminosité et perd la couleur

convert("L") donne un seul nombre à chaque pixel. Le pixel de pièce (197, 157, 62) devient 158. Le script compte ensuite les pixels dans quatre tranches de gris. 63231 sont sombres, de 0 à 63, aucun n'est au milieu et 13566 vont de 128 à 191 : deux groupes nets, le fond et les pièces. Il enregistre aussi coins_grey.png, que tu peux ouvrir dans JupyterLab.

Commande
docker exec jupyter python3 steps/grey.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un seuil sépare le sombre du clair

Un seuil transforme une image grise en un oui ou non pour chaque pixel : est-il plus clair que ce niveau ? Le script essaie trois niveaux sur 76800 pixels. Un niveau de 30 en garde 58806, presque toute l'image, car le fond dépasse 30 en beaucoup d'endroits. Un niveau de 100 en garde 13569, ce sont les pièces. Un niveau de 160 en garde 10062 et mord sur les pièces. Il enregistre le résultat du niveau 100 sous coins_mask.png : blanc là où il y a une pièce.

Commande
docker exec jupyter python3 steps/threshold.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vérifie

Astuce

Lequel des trois niveaux a séparé les pièces du fond, et pourquoi 30 a-t-il échoué ? Réponse : 100, car il se trouve dans le vide entre le fond sombre et les pièces claires ; 30 est dans le bruit du fond lui-même, il garde donc aussi une grande partie du fond.

Un flou calme le bruit

Le scan de page, scan.png, a des points parasites, comme une photocopie sale. Un flou remplace chaque pixel par une moyenne de ses voisins. Le script mesure de combien varie une zone vide de la page, sans écriture. Avant le flou, elle varie de 25,3 niveaux de gris. Après, de 4,9 seulement. Le bruit a presque disparu, et l'écriture sera aussi plus douce. Il enregistre scan_blurred.png pour que tu compares.

Commande
docker exec jupyter python3 steps/blur.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Compter des objets

Pour compter les pièces, fais le masque avec le niveau qui a marché, puis demande à scikit-image de l'étiqueter : chaque groupe de pixels blancs qui se touchent reçoit son propre numéro. La réponse est 9 objets, les neuf pièces dessinées par le lab. Les surfaces sont de trois tailles : trois de 657 pixels, trois de 1313 et trois de 2553, soit des petites, des moyennes et des grandes pièces.

Commande
docker exec jupyter python3 steps/count.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que l'ordinateur trouve tout seul le bon seuil. Ce n'est pas le cas : tu as choisi 100 parce que tu as regardé les deux groupes de niveaux de gris. Sur une image à la lumière inégale, comme scan.png, un niveau qui marche à gauche peut échouer à droite. Vérifie toujours le masque à l'œil avant de te fier à un comptage.

Le même travail dans un notebook

Ouvre JupyterLab depuis la barre et double-clique sur start.ipynb. Il fait ce que faisaient les scripts, une cellule à la fois. Clique sur une cellule et appuie sur Maj et Entrée pour l'exécuter. L'image s'affiche sous la cellule. La dernière cellule attend ta propre question : ouvre road.png ou scan.png et pose-lui une question.

Vérification finale

Astuce

Réponds sans revenir en arrière. 1. Quelle plage de nombres utilise un niveau de gris ? 2. Qu'est-ce qu'un seuil décide pour chaque pixel ? 3. Pourquoi le flou a-t-il réduit la variation de la zone vide ? 4. Combien de pièces l'étiquetage a-t-il trouvées, et comment savais-tu que c'était juste ? Réponses : de 0 à 255 ; s'il est plus clair que le niveau ; chaque pixel est devenu une moyenne de ses voisins, donc les points clairs et sombres isolés ont été ramenés vers le milieu ; 9, comme le nombre dessiné.

Pour les enseignants

Astuce

Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie de chaque élève. Le lab est un seul service, JupyterLab avec Pillow, NumPy et scikit-image, et rien ici ne se corrige tout seul : l'élève rend un notebook à lui sur l'une des images, téléchargé depuis JupyterLab, et une phrase sur ce qu'il a montré. Points clés : 1. Une image est une grille de nombres. 2. Un seuil sépare les pixels en deux. 3. Un filtre change un pixel d'après ses voisins. Erreur fréquente : se fier à un seuil ou à un comptage sans regarder le masque. Matériel : le lab et un navigateur. Conseil : demandez aux élèves de deviner chaque nombre avant d'appuyer sur Exécuter. Les images sont dessinées à partir d'une graine fixe, donc chaque copie donne les mêmes nombres, et le lab n'a ni réseau de neurones ni OpenCV. Copiez-la dans votre propre module et modifiez-la, ou créez-en une de zéro avec le menu Lab du créateur de leçons.

À propos de ce labo et de sa source: Lab de vision par ordinateur : pixels, seuils et comptage d’objets dans JupyterLab

Vous enseignez à une classe ? Proposez ces leçons à vos élèves avec correction et un labo pour chaque élève.