Images, métadonnées et encapsulage XMP ou IPTC

Bonjour,

J’utilise, depuis quelques temps, Exiftool pour encapsuler de l’information, sous la forme de métadonnées IPTC/IIM ou XMP, dans des images fixes. Pour pouvoir traiter un très grand nombre d’images, j’ai améliorer un petit programme en PERL qui permet, depuis un fichier de type texte structuré (un tableau de données donc), d’écrire des informations sous la forme de métadonnées embarquées dans l’image. Dans la mise en place de corpus en SHS, l’utilisation des programmes en PERL n’est plus « à la mode » à l’heure du tout web : c’est dommage car ce langage est très pratique pour traiter de gros volume de données.

Le programme en question est simple : pour chacune des images, il encapsule les informations structurées correspondantes. ces informations sont présentes sous forme de lignes dans le tableau. Les champs, qui structure les informations, sont déterminés par les colonnes du fichier. C’est pour cela que j’utilise le format CSV (Comma-separated values) pour mon petit tableau. Les informations sont donc disposées de la façon suivante :

Cals

La 1ère ligne contient principalement le nom des champs IPTC (title, date, etc.) ou XMP. Je renvois le lecteur au site de Ph. Harvey qui liste l’ensemble des type de champs qu’il possible de gérer avec Exiftool.

A partir de ce tableau et avec le programme PERL, il est donc possible d’écrire les informations, selon leurs champs, dans chacune des images listée dans la première colonne.

Pour faire fonctionner ce petit programme PERL, que j’ai nommé cn2sv-CSVtoXMP.pl, il faut un environnement PERL installé sur son ordinateur. Sous Linux ou Unix, PERL est en standard. Sous Windows, je conseille d’installer le logiciel Active Perl. Il suffit de l’installer à la racine de C:\. (dans C:\Perl par exemple). Il est important d’installer Active Perl avec toutes ses options.

Il faut ensuite créer, par exemple, un répertoire « C:\Perl\eg\CSVtoXMP » et y mettre le contenu de cette archive zip que j’ai préparé pour plus de facilité et qui contient :

  • un répertoire « lib » contenant les librairies perl
  • un répertoire « img » contenant les images à traiter
  • le script exiftool-CSVtoXMP.pl qui va faire le travail
  • le programme exiftool.pl (version PERL d’exiftool) de Ph. Harvey
  • le fichier data.csv contenant les méta-données à en-capsuler dans les images

Redémarrez ensuite votre ordinateur.

Une fois le fichier data.csv conforme avec vos besoins. Il suffit de lancer l’outil en utilisant une ligne de commande sous DOS (ou Linux). Sous windows, « démarrez »> »Executer »> »cmd » ; puis « cd Perl\eg\CSVtoXMP ». Ensuite vient le temps du lancement du programme à proprement parlé : exiftool-CSVtoXMP.pl data.csv img ou « exiftool-CSVtoXMP.pl » = le nom de l’outil ; « data.csv » = le nom du fichier csv ; « img » = le nom du répertoire contenant les images.

Bon encapsulage de métadonnées ! Pour les plus mordus, je met ci-dessous le code PERL de Ph Harvey que j’ai utilisé et simplifié.

#!/usr/bin/perl -w
use strict;
BEGIN {
# add script directory to include path
my $exeDir = ($0 =~ /(.*)[\\\/]/) ? $1 : '.';
unshift @INC, "$exeDir/lib";
}
use Image::ExifTool;

my $txt = shift or die
"Lancement du script : exiftool-CSVtoXMP.pl 
NOMDUFICHIERCSV [NOMDUREPERTOIREDESIMAGES]\n";

open FILE, $txt or die "Erreur d'ouverture de $txt\n";
my $dir = shift || '';
$dir .= '/' if $dir;

my $exifTool = new Image::ExifTool;
my @tags;
while (<FILE>) {
chomp;
# split up values found in this line (assume tab delimiter)
my @values = split /\t/, $_;
next unless @values;
unless (@tags) {
$values[0] eq 'filename' or die "'filename' introuvable\n";
shift @values;
@values or die "Pas d'attribut\n";
@tags = @values;
print "Enregistrement des attributs : @tags\n";
next;
}
my $file = $dir . shift(@values);
unless (-e $file) {
warn "$file non présent\n";
next;
}
@values >= @tags or die "Pas de valeur pour l'attribut : $file\n";
my $tag;
$exifTool->SetNewValue();   # clear old values
# set new values for all tags
foreach $tag (@tags) {
my $val = shift @values;
$exifTool->SetNewValue($tag, $val);
}
# update the file
my $result = $exifTool->WriteInfo($file);
if ($result == 1) {
print "$file mise à jour\n";
} elsif ($result == 2) {
print "$file non mise à jour\n";
} else {
print "$file - erreur d'écriture!\n";
last;
}
}
# end

Bon dimanche.

Stéphane.

digital humanities : le tournant et la eSHSgrid

L’école thématique sur la préservation et diffusion numériques des sources de la recherche en sciences humaines et sociales, organisée par les centres de ressources numériques du CNRS propose une formation aux humantiés numériques (digital humanities) en matière d’édition de sources pour la recherche scientifique en sciences humaines et sociales. Les 30 personnes qui sont ici suivent plusieurs ateliers sur l’informatisation des données manuscrites, iconographiques, orales.

La communauté des digitals humanities se structure, se parle, travaille. La mise en ligne de collections iconographies, la création d’entrepôts de données « images » et « visuelles » (y compris les modèles 3D) n’est plus envisagé sans la structuration de l’information : fichiers RAW, fichiers TIF, vignettes à la volée en JPEG, calculateurs de rendu, métadonnées XMP (ou encore en IPTC), EXIF, MIX, METS, DC. Belle avancée ! Les choses doivent encore se préciser mais le numérique est aujourd’hui au cœur d’un très grand nombre , c’est le « digital turn » ou tournant digital proposé par Paul Bertrand. Les sources numérisées vont laisser la place – de plus en plus – aux sources numériques structurées, c’est aujourd’hui une quasi-réalité et presque du passé et le XML, les normes, l’open-source sont au coeur du digital turn. Un e-chercheur sera l’utilisateur de ces corpus hybrides structurés, virtualisés, accessibles à tous les chercheurs au travers, tel les données du LHC, d’une eSHSgrid et constitué, non pas pour une utilisation individuelle, mais génératrice de publications multiples, papiers, mais aussi de plus en plus elles-mêmes électroniques. Cette eSHSgrid garantie le socle d’accessibilité aux données.

Le wiki de l’Ecole est actualisé en permanance par les participants.

Stéphane.

Schéma XMP / IPTC parseur

Bonsoir,

Dans le développement du CN2SV, j’ai programmé un parser XMP, IPTC à partir de la librairie « PHP JPEG Metadata Toolkit » de E. Hunter. Le schéma XMP est prometteur même s’il est lié à Adobe. Mais la programmation d’un programme en php lisant les méta-données IPTC est facile et la technologie est mure aujourd’hui. L’IPTC a adopté XMP comme schéma de la toute dernière version de son standard de description des photographies : IPTC Core (http://www.iptc.org/IPTC4XMP/). Avec l’utilisation massive des appareils photos numériques, qui truffent leurs images de méta-données, il est temps d’offrir aux utilisateurs d’intergiciel (middlewares) en php, jsp, java, asp, la possibilité de lire ces données et de les enrichir.

Un simple parseur IPTC en PHP (PHP 3 >= 3.0.6, PHP 4, PHP 5) :

 function output_iptc_data( $image_path ) { 
   $size = getimagesize ( $image_path, $info);      
    if(is_array($info)) {        
     $iptc = iptcparse($info["APP13"]);        
     foreach (array_keys($iptc) as $s) {            
     $c = count ($iptc[$s]);            
      for ($i=0; $i <$c; $i++) {            
       echo $s.' = '.$iptc[$s][$i].' - ';           
      }        
     }    
    } 
  }

(source : site www.php.net)

Nous allons intégrer un lecteur/editeur IPTC/XMP à Iceberg. Je tiens d’ailleurs à remercier Romain et Frédéric, les deux développeurs contractuels du CN2SV qui font un travail formidable.

A bientôt,
Stéphane.

« IPTC Core » est la propriété intellectuelle de IPTC. XMP, Photoshop and Creative Suite (CS) sont des marques commerciales de la société Adobe Systems Inc.