lundi, octobre 27, 2014

Comment générer un histogramme des focales d'un ensemble de photos.

Je prévois acheter une nouvelle lentille pour ma caméra. Je sais que je veux une lentille rapide (au plus f2.8). Je veux aussi une lentille versatile qui couvrira une étendue maximale de longueur focale. Je sais que je ne peux avoir une lentille 18-200/2.8, ça n'existe pas. Je sais que je devrai me contenter d'une étendue plus restreinte.

Quel est le meilleur moyen de découvrir cet intervalle? Ayant toutes mes photos sur un de mes serveurs, je peux savoir quelle est la focale utilisée pour chacune d'entre elles à l'aide des données EXIF qui sont enregistrées dans le fichier de chacune des photos. Comme j'ai pas mal de photos, je ne peux faire ça manuellement, il faut automatiser.

C'est la que bash entre en jeu!

1ere étape, installer EXIF. Sous Ubuntu, rien de plus simple:
sudo apt-get install exif
2e étape, aller dans le répertoire qui contient les photos:
cd ~/Photos
3e étape, l'incantation magique:
sudo find . -iname DSC_????.JPG -print0 | xargs -0 -I {} exif -t 0x920a "{}" | grep Value | cut -d ' ' -f 4 | sort -n | uniq -c | awk '{print $2, $1}' > ~/Documents/histogrammefocale.txt
Cette étape mérite quelques explications:
  • sudo find . -iname DSC_????.JPG -print0 Trouve tout les fichiers qui correspondent au pattern des noms de fichier de mes caméras Nikon et les passe à l'étape suivante
  • xargs -0 -I {} exif -t 0x920a "{}" Extrait la longueur focale de la photo à partir des métadonnées EXIF du fichier et la passe a l'étape suivante
  • grep Value Ne garde la ligne que si elle contient "Value" et la passe à l'étape suivante
  • cut -d ' ' -f 4 Ne garde que la valeur de la focale et la passe à l'étape suivante
  • sort -n Trie toute les valeurs de focale en ordre croissant et les passe à l'étape suivante
  • uniq -c Prend la liste triée des focales et compte combien fois chaque focale est répétée. Le nombre d’occurrence suivie de la focale est retournée, une paire par ligne. ces valeurs sont passées à l'étape suivante
  • awk '{print $2, $1}' Inverse les 2 colonnes et les copies finalement dans le fichier ~/Documents/histogrammefocale.txt
Voilà donc comment je génère le fichier d'histogramme. par la suite il ne reste qu'à l'importer dans votre feuille de calcul préférée pour obtenir un beau graphique!