URL: https://linuxfr.org/news/whoswho-le-trombinoscope-facile Title: WhosWho : le trombinoscope facile Authors: YvanM Ysabeau Date: 2021-12-09T00:39:09+01:00 License: CC By-SA Tags: python, gtk, opencv et imagemagick Score: 5 WhosWho est un logiciel permettant de réaliser facilement des trombinoscopes, comme utilisés dans les collèges, lycées ou universités. Fonctionnant sur Linux, il est codé en Python, utilise GTK3, s’appuie sur ImageMagick pour la mise en page et sur OpenCV pour le recadrage automatique des photos. ![Logo WhosWho](https://framagit.org/Yvan-Masson/WhosWho/-/raw/master/WhosWho/data/icons/hicolor/scalable/apps/whoswho.svg) ---- [Dépôt sur Framagit](https://framagit.org/Yvan-Masson/WhosWho/) [Exemple de trombinoscope](https://framagit.org/Yvan-Masson/WhosWho/-/blob/master/example%20output.pdf) ---- Le besoin ========= J’ai travaillé quelques années dans un lycée agricole. La réalisation des trombinoscopes se faisait à mon arrivée par un logiciel propriétaire, dont le rôle de base est de simplifier la gestion d’un domaine Active Directory : on lui donnait la liste des élèves au format CSV, et pour chacun on pouvait fournir une photo. Ça marchait plutôt bien mais : - il fallait une photo du visage de chaque élève, correctement cadrée. Ça a l’air tout simple mais ce n’est pas forcément évident : les photos d’identité fournies à l’inscription sont souvent trop anciennes, donc il faut reprendre en photo tous les élèves, dont la moitié préfère se cacher sous une table plutôt que d’être pris en photo ; - il fallait sélectionner manuellement (oui, avec la souris) la photo pour chaque élève ; - c’est un logiciel non libre :-( Et puis un jour ce logiciel fut abandonné, il fallait trouver une alternative. Le besoin me semblait simple (comme souvent me direz-vous), mais les logiciels libres y répondant n’étaient pas nombreux… En fait, je n’en ai trouvé qu’un : [block_faces](https://moodle.org/plugins/view.php?plugin=block_faces), un module pour l’environnement d’apprentissage [Moodle](https://moodle.org/). C’est probablement une bonne solution, mais je rêvais d’une solution dans l’esprit « [KISS](https://fr.wikipedia.org/wiki/Principe_KISS) » donc je n’ai même pas pris le temps de l’essayer. La technique ============ ImageMagick ----------- J’ai eu la bonne idée d’aller voir du côté d’ImageMagick, que je connaissais de réputation comme « le coutil suisse » du traitement d’image, et j’y ai trouvé *exactement* ce dont j’avais besoin : la commande [montage](https://imagemagick.org/script/montage.php). `montage` permet de mettre en page des images avec des `labels`, en précisant assez finement la géométrie de l’ensemble. Exemple tiré du lien précédent : ```sh montage -label %f -frame 5 -background '#336699' -geometry +4+4 rose.jpg red-ball.png frame.jpg ``` Ce qui donne, à partir des images `rose.jpg` et `red-ball.png` le résultat suivant (ici le label est `%f`, soit le nom de l’image) : ![exemple_ImageMagick](https://imagemagick.org/image/frame.jpg) En parcourant la [documentation d’ImageMagick](https://imagemagick.org/), je découvrais dans la foulée un autre utilitaire fort utile, [convert](https://imagemagick.org/script/convert.php), qui non seulement permet de changer le format d’une image (pour passer de JPG à PDF par exemple) mais aussi de la redimensionner (ou même d’appliquer d’autres effets si l’envie vous en prend). Malgré mon peu de compétences en programmation, l’idée de faire un petit logiciel répondant à mon besoin devenait envisageable. Je décidais de me lancer avec Python. OpenCV ------ À mon propre étonnement, j’arrivais assez vite à quelque chose de fonctionnel. Grisé par le succès, je rêvais maintenant que mes photos se recadrent toute seules : je n’arrivais toujours pas à prendre les photos correctement cadrées sur le visage, et faire ça à la main après coup est vraiment fastidieux. En cherchant de quoi faire de la détection de visage, je trouvais [OpenCV](https://opencv.org/). L’utilisation me paraissait très complexe, mais je tombais heureusement sur la bibliothèque Python [Willow](https://github.com/wagtail/Willow/) qui simplifie à l’extrême le traitement d’image de base (rotation, découpe…) et la détection de visage. Le résultat =========== Après l’ajout d’une interface graphique en GTK3 (fastoche ; hum…), WhosWho était né ! ![capture d’écran](https://framagit.org/Yvan-Masson/WhosWho/-/raw/master/screenshot.png) Il suffit de lui fournir un répertoire contenant les photos des élèves et, idéalement, un fichier CSV contenant leur nom et prénom (l’ordre des élèves dans le fichier CSV devant correspondre à l’ordre des photos lorsqu’on les trie par nom de fichier). WhosWho a été conçu pour s’adapter aux cas d’usage qui me semblaient habituels : - on peut changer l’intitulé du trombinoscope ; - on peut préciser qu’un élève n’a pas de photo, et une image « par défaut » sera utilisée (on peut d’ailleurs la changer si on le souhaite) ; - il est possible de corriger ou d’aider à la reconnaissance des visages, qui n’est pas parfaite (et même très étonnante parfois) ; - différents formats sont possibles, en 150 et 300ppp : - A4, portrait, 4x5 - A4, portrait, 5x6 - A4, landscape, 6x4 - A4, landscape, 7x4 - A3, portrait, 6x8 - A3, landscape, 9x6 - on peut choisir de trier les élèves par nom ou par prénom ; - si l’utilisation d’un fichier CSV est trop complexe pour l’utilisateur, il est possible de s’en passer complètement. Les perspectives ================ Je pense être le seul à me servir de ce logiciel, une fois par an, pour quelques trombinoscopes d’une université. Je suppose que le code est très mal structuré, mais je n’ai pas les compétences et encore moins le temps pour améliorer ça. Ça n’empêche que je suis sûr que ce logiciel pourrait profiter à d’autres presque en l’état, si deux défauts étaient corrigés : - bien qu’internationalisé, aucune traduction n’est publiée (le français est fait mais pas commité) : je voulais utiliser [Weblate](https://hosted.weblate.org/) pour faciliter le travail des traducteurs, mais n’ai pas eu le temps de le faire ; - la méthode d’installation actuelle via `pip` est trop compliquée pour beaucoup de monde. J’avais fait la promotion de WhosWho [sur la liste de diffusion debian-edu](https://lists.debian.org/debian-edu/2020/05/msg00018.html) dans l’espoir de voir apparaître un paquet Debian, mais sans succès. J’ai tenté de créer un paquet [Flatpak](flatpak.org/) pour le distribuer via [Flathub](flathub.org/), mais je suis resté coincé sur une erreur de nom d’application et d’icône manquante… Si vous avez des compétences sur l’un de ces sujets et l’envie d’aider, n’hésitez pas à me contacter !