Version 5, last updated by boulanni at February 11, 2010 01:20 UTC

Note importante

Tout script lancé via gimp ou run_pipeline.sh doit avoir une version de gimp >= 2.6. Certaines machines du LISA sont seulement 2.4. Maggie, brams et zappa sont 2.6.

Exemple d'appel:

dbidispatch --condor --fast --os=FC7,FC9

Exemples de filtres GIMP

Voici une sélection de filtres (intéressants, rapides, compatibles avec les images noir et blanc, automatisables, ayant un effet lisse i.e. complexité=0 => aucun changement):

image originale

dilatation

détection de bords

grille

bruit:

poivre et sel bruit corrélé bruit smooth bruit fondant bruit étalé échange de voisins

motion blur

effet néon

effet photocopie

pinch

pinch (inverse)

ondulations

whirl (tourbillon)

Le warping aurait été intéressant mais nécessite une intéraction avec l'utilisateur ou la mise en place de champs de déformations complexes (layers..). En tenant compte des effets déjà implémentés, je suggère de conserver: pinch & whirl, détection de bords, grille, bruit smooth, bruit étalé, motion blur, ondulations.

Fonctionnement

On peut accéder aux fonctionnalités de GIMP sous Python par des "python-fu scripts". Cependant, GIMP n'est pas une librairie graphique et son API ne permet que d'en contrôler l'exécutable (mode batch / no-ui possible). Par exemple on peut appeler un script par la commande suivante:

gimp -i --batch-interpreter python-fu-eval --batch - < gimp_script.py

Les plug-ins binaires n'ont pas d'interface simple et sont de toutes façons reliés à l'exécutif (progress bar, etc.). Ceci nous oblige donc à exécuter les scripts en batch sur des images pré-enregistrées pour ne pas avoir à lancer le programme à chaque fois. En dépit de cette difficulté d'interfaçage, un filtre prend ~0.007 s à exécuter sur une image JPEG grayscale 32x32, ce qui revient à ~2h pour nos 800 000 exemples.

La majorité des fonctions de GIMP sont disponibles dans l'API. On peut exécuter des filtres avec leurs paramètres, ouvrir et enregistrer des images dans les formats supportés, créer des images, ajouter/modifier des layers et les superposer selon plusieurs mode (DIVIDE, MULTIPLY, etc.) ce qui rend ce package assez pratique pour ce qu'on veut faire.

Les plug-ins et leurs paramètres sont disponibles sous GIMP, Help > Plug-in Browser (toujours ignorer le paramètre run-mode). Les autres fonctions du programme sont dans la Procedure Database (PDB) dans le menu Help > Procedure Browser. Voir aussi la documentation de GIMP-Python.

exemple de fichier "gimp_script.py" :

#!/usr/bin/env python

from gimpfu import *

fname = "test.png"

img = pdb.gimp_file_load(fname, fname)
layer1 = img.active_layer
img.disable_undo()

# Simple filters
#pdb.plug_in_noisify(img, layer1, 0, 0.4, 0, 0, 0)
#pdb.plug_in_c_astretch(img, layer1)
#pdb.plug_in_emboss(img, layer1, 10, 30, 5, 0)
pdb.plug_in_applylens(img, layer1, 2, 1, 0, 0)
#pdb.plug_in_blur(img, layer1)
#pdb.plug_in_gauss_rle(img, layer1, 9, 1, 0)

# More complex processing
#layer2 = layer1.copy()
#layer2.mode = MULTIPLY_MODE
#img.add_layer(layer2, 0)
#pdb.plug_in_solid_noise(img, layer2, 0, 0, 0, 8, 8, 8)
#img.flatten()
#layer1 = img.active_layer

pdb.gimp_file_save(img, layer1, fname, fname)

pdb.gimp_quit(0)