Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Prétraitement et mise à jour automatisée des images préparées

De AJLSM
Aller à la navigation Aller à la recherche

Introduction

Un nouveau script permet de générer automatiquement l'ensemble des versions des images préparées. Il est aussi capable de mettre à jour les images préparées lorsque l'image originale change.

Ce script est disponible sur le SVN à l'emplacement @pleade-libre-sdx-2.5/script-pre-traitement/ImagePretraitement/ImagePretraitement.jar


Notice :
Sur les serveurs en production, le script est toujours programmé via le crontab de l'utilisateur administrateur de Pleade. Cette information est importante pour pouvoir trouver l'emplacement des log dans n'importe quel serveur..

Principe de fonctionnement

Il s'agit d'un script java qui se lance avec la commande java -jar (compatibilité java >= 6). Pour l'automatiser complètement, il faut l'enregistrer dans le crontab.

Le script offre les fonctionnalités ci-dessous:

  • Création des versions miniature (60x60), vignette (300x300) default (2500x2500) et hidef (taux de compression 45%).
  • Regénération des images pré-taritement dont l'image originale a été mise à jour.
  • Possibilité d'utiliser vips ou imageMagick (par défaut) pour le traitement.
  • Possibilité de supprimer les images préparées pour lesquels l'image originale n'existe plus.
  • Création et journalisation des log. Possibilité de spécifier le nombre de jours de log à conserver

Exécution du script

Le script se lance de cette façon :

java -jar imagesPretraitement.jar <python> '<racines>' <pretrait> '<formats>' <vips> <delete> <logFile> <nbDaysForLog>

* <python> : emplacement absolue du script python plus. Exemple: /home/mdia/pretraitement_images_plus.py
* <racines> : entre cote, la liste des racines d'images séparée par ; . Exemple : '/home/test-images;/home/mdia/test-images2'
* <pretrait> : emplacement absolue du répertoire image préparées. Exemple : /home/mdia/test-images-preparees
* <formats> :  entre cote, la liste des formats d'images préparées à générer séparée par ; . Exemple : 'default;vignette;hidef'
* <vips> : si true travail avec vips. Sinon, travail avec imageMagick
* <delete> : Si true le script supprime les images préparées dont l'image original n'existe plus. Si false, le script indique juste les images préparées à supprimer sans rien faire.
* <LogFile> : Emplacement absolue du ficheir de log.
* <nbDaysForLog> : nombre de jours de log à conserver
Important :
Une modification des paths <racines> et <formats> peut entrainer la suppression de la totalité des images. Dans ce cas, ne surtout pas mettre le <delete> à true avant de s'assurer que le script, une fois lancé, est bien paramétré.

Exemple d’exécution du script:

java -jar ImagePretraitement.jar /home/mdia/pretraitement_images_plus.py '/home/mdia/test-images;/home/mdia/test-images2' /home/mdia/test-images-preparees 'default;vignette;hidef' vips true /home/mdia/ImagePretraitement.log 10

Exemple de programmation dans le crontab

0 20 * * * java -jar ImagePretraitement.jar /home/mdia/pretraitement_images_plus.py '/home/mdia/test-images;/home/mdia/test-images2' /home/mdia/test-images-preparees 'default;vignette;hidef' vips true /home/mdia/ImagePretraitement.log 10

Avec ce cron, le script se lance tout les jours à 20h00 et écrit ses log dans le fichier /home/mdia/test.log

Message de log par rapport au traitement des images

Quand il donne juste l'info des éléments à supprimer sans faire l'action

  • [INFO NO DELETE] Répertoire vide :
  • [INFO NO DELETE] Image originale inexistant pour :

Quand il supprime réellement

  • [INFO DELETE] Suppression répertoire vide:
  • [INFO DELETE] Suppression image préparée :

Quand il crée de nouvelles images préparées qui n'existaient pas avant

  • [INFO CREATE DEFAULT|MINIATURE|HIDEF|VIGNETTE] Création image préparée :

Quand il met à jour une image préparée dont l'image original a changé

  • [INFO UPDATE DEFAULT|MINIATURE|HIDEF|VIGNETTE] Mise à jour image préparée

Quand une image originale ne peut pas être traitée

  • Erreur [0][!!IMAGE ILLISIBLE!!]
  • Syntax error:
  • ou d'autres messages d'erreurs

Prétraitement manuel

Le script python "seul" peut-être lancé manuellement, directement dans la console.

Exemple de syntaxe du script Windows :

pretraitement_images.py \
  -–source=E:\diskE \
  -–collection=FRAD064003_IR0001\BIARRITZ_1\3E18351 \
  --cible=C:\img-preparees\diskE \
  --format=miniature \
  --max-width=1 \
  --max-height=1 \
  --width=60 \
  --height=60 \
  --quality=70

Il peut être nécessaire de lancer le script en forçant le pré-traitement.

Exemples de syntaxe du script Linux :

pretraitement_images_plus.py  \
 -–source=/var/data2/images2 \
 -–collection=1R \
 --cible=/var/data/images-preparees \
  --format=hidef \
  --quality=45 \
  --verbose=5 \
  --force \
  --vips

Exemple d’exécution du script en console :

python /home/ajlsm/script-pre-traitement/bin/pretraitement_images_plus.py --source=/var/data2/images2 --collection=1R --cible=/var/data/images-preparees --format=hidef --quality=45 --verbose=5 --force --vips

Autre exemple :

pretraitement_images_plus.py  \
 -–source=/var/data/images \
 -–collection=SCH \
 --cible=/var/data/images-preparees \
  --format=hidef \
  --quality=45 \
  --verbose=5 \
  --force \
  --vips

Exemple d’exécution du script en console :

python /home/ajlsm/script-pre-traitement/bin/pretraitement_images_plus.py --source=/var/data/images --collection=SCH --cible=/var/data/images-preparees --format=hidef --quality=45 --verbose=5 --force --vips

Paramètres

Voici les paramètres obligatoires et les paramètres optionnels :

Paramètres obligatoires :

    -s SOURCE, --source=SOURCE 
               Dossier source
                        action="store"
                        type="string"
                        dest="source"

    -c COLLECTION, --collection=COLLECTION 
               (Collection d'images)
                        action="store"
                        type="string"
                        dest="collection"

    -b CIBLE, --cible=CIBLE 
               Dossier cible
                        action="store"
                        type="string"
                        dest="cible"

    -f FORMAT, --format=FORMAT 
               Dossier cible
                        action="store"
                        type="string"
                        dest="format"
                        default="hidef"


Paramètres optionnels :

    -o MODE, --mode=MODE 
               Le mode
                        action="store"
                        type="string"
                        dest="mode"
                        default="multiple"

    -e IPATH, --iPath=IPATH 
               Le chemin du fichier à traiter. A utiliser si l'argument mode est à single
                        action="store"
                        type="string"
                        dest="iPath"

    -w MAX-WIDTH, --max-width=max-width 
               Largeur maximale au-dela de laquelle on pre-traite l'image originale (en pixels) [defaut: 2200]
                        action="store"
                        type="int"
                        dest="maxwidth"
                        default="2200"

    -l MAX-HEIGHT, --max-height=MAX-HEIGHT 
               Hauteur maximale  au-dela de laquelle on pre-traite l'image originale (en pixels) [defaut: 2200]
                        action="store"
                        type="int"
                        dest="maxheight"
                        default="2200"

    -r MAX-RESOLUTION, --max-resolution=MAX-RESOLUTION 
               Resolution maximale pour un original (en pixels) [defaut: -1]
                        action="store"
                        type="int"
                        dest="maxres"
                        default="-1"

    -m MIN-RESOLUTION, --min-resolution=MIN-RESOLUTION 
               Resolution minimale pour un original (en pixels) [defaut: -1]
                        action="store"
                        type="int"
                        dest="minres"
                        default="-1"

    -i WIDTH, --width=WIDTH 
               Largeur de la conversion (en pixels) [defaut: 2000]
                        action="store"
                        type="int"
                        dest="width"
                        default="2000"

    -g HEIGHT, --height=HEIGHT 
               Hauteur de la conversion (en pixels) [defaut: 2000]
                        action="store"
                        type="int"
                        dest="height"
                        default="2000"

    -j DXTILE, --dxtile=DXTILE 
               DZI, largeur d'une tuile [defaut: 512]
                        action="store"
                        type="int"
                        dest="dxtile"
                        default="512"

    -k DYTILE, --dytile=DYTILE 
               DZI, hauteur d'une tuile [defaut: 512]
                        action="store"
                        type="int"
                        dest="dytile"
                        default="512"

    -q QUALITY, --quality=QUALITY 
               Taux de compression de la conversion (de 0 a 100) [defaut: 70]
                        action="store"
                        type="int"
                        dest="quality"
                        default="70"

    -d DEPTH, --depth=DEPTH 
               Intensite de la conversion (8 ou 16 bits) [defaut: 8]
                        action="store"
                        type="int"
                        dest="depth"
                        default="8"

    -x force, --force
               Forcer le pre-traitement malgrel'existance de l'image pre-traitee
                        action="store_true"
                        type="force"

    -t compter, --compter
               Desactiver la conversion, effectue un simple comptage des images qui seront pre-traitees
                        action="store_true"
                        type="compter"

    -n CONVERT-EXEC, --convert-exec=CONVERT-EXEC 
               L'excutable pour la conversion [defaut: convert]
                        action="store"
                        type="string"
                        dest="convertexec"
                        default="convert"

    -a MAGICKSLICER-EXEC, --magickslicer-exec=MAGICKSLICER-EXEC 
               Chemin vers l'exécutable Magick Slicer à utiliser pour la conversion [defaut: convert]
                        action="store"
                        type="string"
                        dest="magickslicerexec"
                        default="magick-slicer.sh"

    -y IDENTIFY-EXEC, --identify-exec=IDENTIFY-EXEC 
               L'excutable pour l'identification des images [defaut: identify]
                        action="store"
                        type="string"
                        dest="identifyexec"
                        default="identify"

    -v VERBOSE, --verbose=VERBOSE 
               Niveau de verbosite (0-5).
               Niveau 0 : aucun message.
               Niveau 1 : Dates de debut et de fin, suivi du pre-traitement.
               Niveau 2 : Idem 1 plus compte prealable des images a traiter [defaut].
               Niveau 3 : Idem 2 plus message de debogage.
               ...
                        action="store"
                        type="int"
                        dest="verbose"
                        default="5"

    -p pyramidal, --pyramidal
               Traitement pyramidal des images (Requiert ImageMagick >= 6.4.7-10
                        action="store_true"
                        type="pyramidal"

    -z deepzoom, --deepzoom 
               Traitement deepzoom (dzi) des images (Requiert magick-slicer.sh au même niveau ou à indiquer avec le paramétre -a ou --magick-slicer
                        action="store_true"
                        type="deepzoom"

    -u vips, --vips 
               Traitement pyramidal en utilisant vips à la place de ImageMagick (Requiert Vips >= 8.x.x
                        action="store_true"
                        type="vips"
Paramètres obligatoires :

obligatoires.add_option("-s", "--source",
    action="store",  type="string", dest="source",
    help="Dossier source")
obligatoires.add_option("-c", "--collection",
    action="store",  type="string", dest="collection",
    help="Collection d'images")
obligatoires.add_option("-b", "--cible",
    action="store",  type="string", dest="cible",
    help="Dossier cible")
obligatoires.add_option("-f", "--format",
    action="store",  type="string", dest="format",
    help="Dossier cible")

Paramètres optionnels :

optionnels.add_option("-o", "--mode",
    action="store",  type="string", dest="mode", default="multiple",
    help="Le mode")
obligatoires.add_option("-e", "--iPath",
    action="store",  type="string", dest="iPath",
    help="Le chemin du fichier à traiter. A utiliser si l'argument mode est à single")
optionnels.add_option("-w", "--max-width",
    action="store",  type="int", dest="maxwidth", default=2200,
    help="Largeur maximale pour un original (en pixels) [defaut: 2200]")
optionnels.add_option("-l", "--max-height",
    action="store",  type="int", dest="maxheight", default=2200,
    help="Hauteur maximale pour un original (en pixels) [defaut: 2200]")
optionnels.add_option("-r", "--max-resolution",
    action="store",  type="int", dest="maxres", default=-1,
    help="Resolution maximale pour un original (en pixels) [defaut: -1]")
optionnels.add_option("-m", "--min-resolution",
    action="store",  type="int", dest="minres", default=-1,
    help="Resolution minimale pour un original (en pixels) [defaut: -1]")
optionnels.add_option("-i", "--width",
    action="store",  type="int", dest="width", default=2000,
    help="Largeur de la conversion (en pixels) [defaut: 2000]")
optionnels.add_option("-g", "--height",
    action="store",  type="int", dest="height", default=2000,
    help="Hauteur de la conversion (en pixels) [defaut: 2000]")
optionnels.add_option("-j", "--dxtile",
    action="store",  type="int", dest="dxtile", default=512,
    help="DZI, largeur d'une tuile [defaut: 512]")
optionnels.add_option("-k", "--dytile",
    action="store",  type="int", dest="dytile", default=512,
    help="DZI, hauteur d'une tuile [defaut: 512]")
optionnels.add_option("-q", "--quality",
    action="store",  type="int", dest="quality", default=70,
    help="Taux de compression de la conversion (de 0 a 100) [defaut: 70]")
optionnels.add_option("-d", "--depth",
    action="store",  type="int", dest="depth", default=8,
    help="Intensite de la conversion (8 ou 16 bits) [defaut: 8]")
optionnels.add_option("-x", "--force",
    action="store_true", dest="force", help="Forcer le pre-traitement malgre"
"l'existance de l'image pre-traitee.")
optionnels.add_option("-t", "--compter",
    action="store_true", dest="compter",
    help="Desactiver la conversion, effectue un simple comptage des images \
qui seront pre-traitees")
optionnels.add_option("-n", "--convert-exec",
    action="store",  type="string", dest="convertexec", default="convert",
    help="L'excutable pour la conversion [defaut: convert]")
optionnels.add_option("-a", "--magickslicer-exec",
    action="store",  type="string", dest="magickslicerexec", default="magick-slicer.sh",
    help="Chemin vers l'exécutable Magick Slicer à utiliser pour la conversion [defaut: convert]")
optionnels.add_option("-y", "--identify-exec",
    action="store",  type="string", dest="identifyexec", default="identify",
    help="L'excutable pour l'identification des images [defaut: identify]")
optionnels.add_option("-v", "--verbose",
    action="store",  type="int", dest="verbose", default=2,
    help="Niveau de verbosite (0-3).\n\
Niveau 0 : aucun message.\n\
Niveau 1 : Dates de debut et de fin, suivi du pre-traitement.\n\
Niveau 2 : Idem 1 plus compte prealable des images a traiter [defaut].\n\
Niveau 3 : Idem 2 plus message de debogage.")
optionnels.add_option("-p",  "--pyramidal", 
    action="store_true", dest="pyramidal",  help="Traitement pyramidal des images (Requiert ImageMagick >= 6.4.7-10")
optionnels.add_option("-z",  "--deepzoom", 
    action="store_true", dest="deepzoom",  help="Traitement deepzoom (dzi) des images (Requiert magick-slicer.sh au même niveau ou à indiquer avec le paramétre -a ou --magick-slicer")
optionnels.add_option("-u",  "--vips", 
    action="store_true", dest="vips",  help="Traitement pyramidal en utilisant vips à la place de ImageMagick (Requiert Vips >= 8.x.x")
optparser.add_option_group(obligatoires)
optparser.add_option_group(optionnels)