Skip to content

Repository files navigation

Trombino

Génération de trombinoscope en pdf automatique, à partir d'une liste et d'un ensemble de photos.

Outil en ligne de commande, calibré pour des groupes jusqu'à 20 personnes par page, pour une année d'une promo de type universitaire (20-100 ou plus personnes, réparties en plusieurs groupes).

1- Exemple de résultat (réel)

(mais avec des photos anonymisées, pour des raisons évidentes)

exemple

2 - Installation

2.1 - Outils nécessaires

  • bash (incluant le calculateur bc)
  • LaTeX, avec le package tabularx
  • Python3 & Opencv, pour l'extension de recadrage assisté (voir section "Extension")
  • ImageMagick, pour l'extension sur le traitement préalable des photos (voir section "prétraitement")

Tout ceci a été developpé sous Linux/Ubuntu et devrai donc fonctionner sans problème sur des OS basés Linux, mais ces outils étant assez commun, un usage sous Mac/OSX devrait pouvoir fonctionner également (non-testé!). Pour ceux travaillant (encore) sous Windows, je vous laisse essayer.

2.2 - Téléchargement et installation

Le plus simple consiste à cloner le dépot localement, mais pour ceux peu au fait de l'utilisation de git, une archive d'installation est prévue.

A partir du dépot, et sur une machine Debian ou dérivé, on l'installe sur la machine locale avec:

$ sudo ./install

Ceci va copier les exécutables dans /usr/local/bin/ et le fichier de configuration (fichier d'en-tête LaTeX) dans /etc/trombino/.

3 - Utilisation

Il faut avoir une liste des personnes, et prendre une photo par personne, dans l'ordre de la liste. En cas d'absence, il faut prendre une photo vide, pour conserver l'ordre.

Ensuite, un petit traitement batch des photos peut être réalisé (recadrage, augmentation de la luminosité, conversion en N&B, etc). Ceci se fait facilement avec des outils comme Imagemagik, mais ce package propose un script permettant de faire ça rapidement.

Pour le recadrage, un outil permettant de le faire facilement est proposé, voir la section "3 - Extension" ci-dessous.

Dans l'idéal, il faudrait avoir des photos de quelques dizaines de ko.

Le script peut générer le trombinoscope en deux formats, pdf (via LaTeX, si installé) et en HTML. Chaque format va générer deux fichiers, l'un global, avec tous les noms, l'autre classé par groupe:

  • trombi_global.pdf (ou .html): trombinoscope global, sur plusieurs pages;
  • trombi_groupes.pdf (ou .html): trombinoscope avec une page par groupe, avec les étudiants faisant partie de ce groupe.

(Le concept de "page" ne s'applique évidemment qu'à la version pdf)

3.1 - Données d'entrées du script

  • une liste en CSV contenant sur 3 champs: Groupe, Nom, Prénom
    A coller dans le dossier racine. Les lignes vides seront ignorées.
  • copier dans un sous-dossier photos les photos, dans l'ordre de la liste.

Attention, il doit y avoir autant de photos que de lignes dans le fichier d'entrée!

L'exécution se fait dans un terminal ouvert dans le dossier où se trouve le fichier-liste et le dossier des photos:

$ trombino

On peut avoir les options disponibles avec:

$ trombino -h

(voir ci-dessous).

3.2 - Paramétrage

  • éditer le fichier head_left.txt et y mettre ce que vous souhaitez pour l'en-tête gauche (par exemple, le nom de l'établissement, de la promo, etc.)
  • éditer le fichier head_right.txt et y mettre ce que vous souhaitez pour l'en-tête de droite. Si ce fichier est absent, l'année courante y sera imprimée.

3.3 - Syntaxe d'appel

Des valeurs par défaut sont prévues, mais on peut passer des options pour les modifier.

$ trombino [-hs] [-l fichier_liste] [-p dossier_photos] [-o nom_pdf] [-c nb_cols]

  • -l: pour spécifier un autre nom du fichier csv d'entrée (liste des étudiants)
  • -p: pour indiquer un autre dossier pour les photos
  • -o: pour donner un autre nom au fichier pdf généré (sans extension!!)
    Par exemple, -o aaa produira les deux fichiers aaa_global.pdf et aaa_groupes.pdf
  • -c: pour modifier le nombre de colonnes. La taille des photos est automatiquement ajustée.
  • -s: permute nom - prénom
  • -f: permet de spécifier le séparateur de champs du fichier "liste". C'est ',' par défaut. On peut le changer pour des ';' avec -f ";". A noter que l'usage de l'espace (ASCII 32) est déconseillé, comme il est probable d'avoir des étudiants avec des noms composés.
  • -w: Génère les deux versions en web (html)
  • -x: pas de génération en pdf (utile si LaTeX pas installé)
  • -h: affiche cette aide
  • -d: active le mode "debug", ce qui imprimera le nom du fichier de la photo avec la photo (utile en cas d'erreur nom/photo)

3.4 - En cas d'erreur

Plusieurs situations peuvent mener le programme à l'échec. Une erreur fréquente se produit lorsque le nombre de noms n'est pas égal au nombre de photos (lorsqu'on a oublié d'insérer une photo vide en cas d'absence par exemple). Dans ce cas, le trombi n'est pas généré, mais un message d'erreur est affiché, et le programme génère dans un sous-dossier BUILD/matching la série de photos avec en surimpression le nom correspondant. Ceci permet de vérifier rapidement si noms et photos correspondent, et voir à quel endroit il y a un décalage.

Pour les autres erreurs n'amenant pas à un échec, on peut ajouter au lancement le flag -d qui va provoquer des messages supplémentaires à l'exécution, qui peuvent indiquer la nature du problème. Ce mode va également ajouter dans le trombinoscope produit le nom du fichier image ajouté avec chaque nom.

4 - Exemple/demo

Des données de démo dont incluses, vous pouvez tester directement. Il y a:

Tapez la commande suivante dans le dossier racine, une fois le repo cloné:

$ ./trombino

Ceci doit vous donner dans un fichier trombi.pdf, similaire à celui qui est fourni (trombi_exemple.pdf).

Vous pouvez aussi essayer ceci pour voir les mêmes données en 5 colonnes:

$ ./trombino -c 5

5 - Extension optionnelle: recadrage assisté

5.1 - Introduction

L'un des problèmes que l'on rencontre avec cette approche est le fait qu'il nécessite en pratique un "cropping" des photos. En effet, en général le cadrage fait qu'il est peu pratique d'avoir dès la prise de vue un cadrage type "photo d'identité". Le cropping peut se faire à la main, photo par photo, à l'aide d'un outil ad hoc, mais c'est évidemment fastidieux. On peut aussi l'automatiser via un script (utilisant par exemple imagemagick) qui prend chaque photo et lui applique un cropping fixe, mais il faut alors prédéterminer la bonne "bounding box", ce qui prend du temps. Sans compter que on aura toujours des étudiants qui sont un peu trop à gauche, un peu trop à droite, et donc le cropping identique pour toutes les photos va générer soit des "coupages de têtes", soit des images avec un cadrage un peu trop "large".

Depuis 2024/09, une extension utilisant Python3 et la bibliothèque OpenCv est incluse dans ce projet et permet d'avoir un cropping assisté, par une détection de visage dans la photo.

5.2 - Outils nécessaires

Il faut donc avoir ces deux outils installé localement (Python3 est en général déjà présent). Pour Opencv, l'installation est assez facile, via:

$ pip install opencv-python

Ceci a été testé avec la version 4.5.5, mais devrait aussi fonctionner avec des versions 3.

Il faudra aussi installer un autre paquet Python:

pip install opencv-contrib-python --upgrade

5.3 - Utilisation

L'utilisation se fait via l'appel du programme autocrop depuis le dossier courant. Ce programme prend deux arguments:

  • Le premier est le nom du dossier dans lequel se trouve les photos brutes.
  • Le second est le nom du dossier dans lequel seront placés les images "croppées" (sera crée s'il n'existe pas).

Par exemple:

$ autocrop src dst

Ce programme est un script bash qui lance pour chaque fichier du dossier de photos le programme Python trombino_autocrop_gui.py. Ce dernier va lancer lancer une cascade de classifieurs pour tenter de trouver un visage (voir https://docs.opencv.org/3.4/d1/de5/classcv_1_1CascadeClassifier.html pour des détails), avec des valeurs de paramètres par défaut. Si les paramètres par défaut ne trouvent pas de visage, alors une interface graphique est démarrée (basée sur le module "HighGui" de OpenCV). Des sliders permettent d'ajuster les paramètres, le plus important étant l'échelle ("scale"). Une fois un visage trouvé, il faut alors appuyer sur "espace" pour sauvegarder l'image recadrée.

Dans le cas où il s'agit d'une photo vide, un appui sur ESC va sauvegarder la photo telle quelle.

6 - Script de prétraitement par lot des photos

Ce package inclut un script permettant de réaliser de façon rapide différents traitements sur un ensemble de photos. Il s'appuie sur ImageMagick, très facilement installable avec

$ sudo apt install imagemagick

Motivation:

Très souvent, les photos ont une résolution très élevée, nullement nécessaire pour un simple trombinoscope. De plus, le poids de ces photos va alourdir considérablement la taille des pdf générés. Il est donc pertinent de réduire la taille des photos de façon à avoir un pdf final de taille raisonnable.

De même pour la couleur: les photos en N&B sont en général largement suffisantes pour reconnaitre les personnes, il est donc souvent inutile d'inclure des photos en couleur dans le trombi. Cela allègera le poids du pdf final.

Enfin, les photos peuvent avoir une luminosité faible ou un contraste insuffisant, qui risque de rendre les photos peu lisibles en impression.

Le programme bphotos permet de corriger ces défauts de façon rapide. On donne en argument:

  1. le nom du dossier contenant les photos
  2. le nom du dossier destination (qui sera crée s'il n'existe pas)
  3. Une commande parmi les 3 suivantes:
  • B pour corriger luminosité et contraste. Il faut donner un 4è et un 5è argument dans la plage [-100;+100], la valeur 0 correspondant à aucune modification.
  • W pour convertir en N&B
  • R pour reduire la taille des photos. il faut donner un 4è argument qui sera le taux de réduction en %.

Exemples:

  • $ bphotos src dst R 20 va générer des images dans un dossier dst dont la taille sera -20% de celles présentes dans le dossier src
  • $ bphotos src dst W va convertir les photos présentes dans le dossier src en N&B et les placer dans le dossier dst
  • $ bphotos src dst B 20 10 va augmenter la luminosité de 20% et le contraste de 10%

Si vous avez un nombre de photos considérables, et en particulier pour la modification de luminosité et contraste, il pourra être pertinent de faire d'abord des essais sur un nombre réduit de photos et de trouver de façon empirique les bons réglages.

About

Génération de trombinoscope

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages