Lab de vision par ordinateur : pixels, seuils et comptage d’objets dans JupyterLab

Ce lab donne à chaque élève un JupyterLab à lui, avec les bibliothèques Python d’image déjà installées : Pillow pour ouvrir et modifier les images, NumPy pour les nombres et scikit-image pour les contours, l’étiquetage et la recherche d’un motif. Le dossier de travail contient cinq images que le lab dessine lui-même, des pièces, des formes, une route, un scan de page et un dégradé de gris, un notebook de départ et de petits scripts, une idée chacun.

Ce n’est pas un lab d’attaque. Chaque copie n’a aucun accès à internet ni à aucun autre élève : rien ne peut y être téléchargé et rien n’y peut atteindre quelqu’un d’autre. Il enseigne les idées qui sont sous la vision par ordinateur avec de simples pixels, sans réseaux de neurones, et il n’a pas OpenCV.

Ce que les élèves apprennent

Qu’une image est une grille de nombres : sa taille, son mode et la valeur de pixels isolés. Puis passer de la couleur au gris et compter combien de pixels tombent dans chaque tranche, choisir un seuil pour séparer le sombre du clair et voir qu’un niveau sépare neuf pièces d’un fond bruité alors qu’un autre n’y arrive pas, flouter un scan de page pour calmer ses points parasites, trouver des contours, compter des objets par étiquetage, redimensionner et recadrer en voyant ce que cela coûte en taille de fichier, et retrouver un morceau d’image dans l’image par recherche de motif. Il convient aux introductions à la vision par ordinateur, au traitement d’images et aux mathématiques appliquées ; vérifiez la formulation exacte dans l’unité de votre propre organisme certificateur, aucune n’est citée ici.

Le lancer dans votre navigateur

Le lab démarre un seul service, jupyter, qui dessine les images, écrit le notebook et les petits scripts dans son dossier de travail, et il est prêt en quelques secondes, dans les 512 Mo qu’un service peut avoir. JupyterLab ne demande aucun jeton, car la porte de la plateforme sait déjà qui l’ouvre. Le terminal à côté du lab n’a pas de Python à lui : il atteint celui du lab avec docker exec jupyter, suivi de la commande à lancer à l’intérieur. Chaque script affiche la même chose à chaque fois et enregistre une image quand c’est utile, que l’élève ouvre dans JupyterLab.

  1. Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
  2. Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez JupyterLab : vision par ordinateur avec Pillow et scikit-image.
  3. Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
  4. L’ouvrir. Sur la page du lab, la barre du lab a un lien nommé JupyterLab : appuyez dessus pour ouvrir JupyterLab dans votre navigateur, ouvrez le dossier images et double-cliquez sur start.ipynb. Appuyez ensuite sur « Ouvrir le terminal » et tapez docker exec jupyter python3 steps/count.py pour compter les pièces : la réponse est 9 objets, les neuf pièces dessinées par le lab, en trois tailles.

Que demander aux élèves de rendre

Un notebook à eux sur l’une des images qui répond à une question qu’ils ont choisie, par exemple combien de pixels passent un seuil et pourquoi ils ont choisi ce niveau, de combien un flou réduit les points parasites du scan de page, ou si un seul seuil marche sur tout le scan de page à la lumière inégale, téléchargé depuis JupyterLab avec File, Download. Puis une ou deux phrases, de leurs propres mots, sur ce qu’ils ont trouvé et ce qu’ils ont vérifié à l’œil. Rien n’est noté automatiquement : la phrase montre si c’était compris. Pour un travail plus poussé, demandez le masque dessiné à côté de l’image et un comptage comparé au nombre qu’on voit.

Une leçon de base sur ce lab

Computer Vision Basics est une petite leçon qui se fait dans ce lab. L’élève y liste les images, lit un pixel, passe une image en gris, essaie trois seuils, floute un scan bruité, compte les pièces par étiquetage, puis retrouve le même travail dans le notebook de départ.

Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.

Le code sur GitHub

Le fichier compose n’a pas de Dockerfile : il lance une seule image publique, scipy-notebook des Jupyter Docker Stacks, figée sur une étiquette datée, avec son propre compte sans privilèges et 512 Mo de mémoire. L’image est sous licence BSD-3-Clause et n’est pas distribuée par nous. Le fichier dessine chaque image à partir d’une graine fixe au démarrage : chaque copie a les mêmes nombres et rien n’est téléchargé. Les limites sont honnêtes : les images sont petites et inventées, il n’y a ni caméra ni photographie, pas de GPU, rien ne peut être installé depuis internet, et les méthodes sont les méthodes classiques, pas un réseau de neurones. Rien n’est conservé quand le lab s’arrête : l’élève télécharge son notebook avant.

En faire un travail

Indiquez dans la tâche ce qu’il faut rendre.

  1. Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-computer-vision avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier, par exemple pour dessiner d’autres images.
  2. Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
  3. Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
  4. Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.

Essayer ce lab, et ce qu’il coûte

Un compte personnel gratuit permet de suivre les leçons de base de ce lab, avec chaque mois assez de crédit gratuit pour suivre la plupart des leçons, sans carte. Pour une classe, un établissement a ses 365 premiers jours gratuits pour 50 élèves au plus, puis paie par élève et par an, tous les labs compris et les enseignants gratuits.

Questions fréquentes

Pourquoi n’y a-t-il ni jeton ni mot de passe à taper ?
La page web d’un lab ne s’atteint que par la porte de la plateforme, qui sait déjà qui vous êtes et ne laisse entrer que vous et les enseignants de votre module. JupyterLab démarre donc sans jeton. Ne le lancez pas ainsi sur une machine que d’autres peuvent atteindre.
Pourquoi le terminal utilise-t-il docker exec jupyter ?
Le terminal du lab contient curl, psql et quelques autres clients, mais pas Python. docker exec jupyter lance une commande dans le conteneur du lab, qui a Python et toutes les bibliothèques. JupyterLab a aussi son propre terminal, sous File, New, Terminal.
Les élèves peuvent-ils utiliser leurs propres photographies ?
Un élève peut envoyer une image dans JupyterLab depuis son ordinateur et les mêmes scripts l’ouvrent, mais le lab ne télécharge rien et la copie ne peut pas atteindre internet. Les nombres de cette page valent pour les images que dessine le lab. Pour les changer, faites un fork du dépôt, modifiez la façon dont le fichier compose les dessine, et proposez le fork comme lab.