URL: https://linuxfr.org/news/whoswho-le-trombinoscope-facile Title: WhosWho : le trombinoscope facile Authors: YvanM Ysabeau đ§¶ et BenoĂźt Sibaud Date: 2021ćčŽ12æ09æ„T00:39:09+01:00 License: CC By-SA Tags: python, gtk, opencv, imagemagick, flatpak et trombinoscope Score: 53 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.  ---- [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 couteau 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) :  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Ă© !  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 !