Sortie de G'MIC 3.0 : Une troisième dose pour un traitement efficace de vos images !

Posté par  (site web personnel) . Édité par Anonyme, Benoît Sibaud, palm123 et theojouedubanjo. Modéré par Ysabeau 🧶. Licence CC By‑SA.
104
17
déc.
2021
Graphisme/photo

Une nouvelle version majeure (numérotée 3.0.0) de G’MIC (GREYC’s Magic for Image Computing), cadriciel libre pour le traitement des images, a été publiée le 9 décembre 2021. Ce projet, distribué sous licence libre CeCILL, est développé principalement dans l’équipe IMAGE du GREYC, laboratoire de recherche en Sciences et Technologies de l’Information et de la Communication (Unité Mixte de Recherche CNRS / ENSICAEN / Université de Caen).

gmic_teaser

La dernière dépêche LinuxFr.org sur ce logiciel avait été publiée il y a plus de deux ans, en août 2019. Depuis, de nouvelles fonctionnalités ont vu le jour. Dans cette dépêche, nous proposons d’en détailler quelques-unes parmi les plus significatives.

C’est le moment de se préparer une boisson chaude, de s’installer bien confortablement dans le canapé et de se laisser conter deux ans de développement d’un projet libre dynamique !
N. D. A. : cliquez sur les images de la dépêche pour en visualiser des versions de meilleure résolution.

Sommaire

1. G’MIC en un peu plus de 3.0.0 mots

G’MIC est un cadriciel (framework) libre pour la manipulation et le traitement des images numériques.
Il propose des interfaces utilisateurs variées pour la manipulation algorithmique (automatisée ou semi-automatisée) d’images et de signaux génériques, qui vont du signal 1D simple jusqu’aux séquences d’images volumiques 3D à nombre de canaux quelconque (ce qui inclut de fait les images couleurs classiques). Le cœur de ce projet repose sur la définition d’un langage de script spécialisé (le « langage G’MIC ») et sur une implémentation libre de son interpréteur associé. Ce langage métier a été spécifiquement élaboré pour faciliter le prototypage et l’implémentation de nouveaux algorithmes et opérateurs de traitement d’images. Les utilisateurs du cadriciel peuvent ainsi appliquer des opérateurs parmi les centaines déjà prédéfinis, mais ont également la possibilité d’écrire leurs propres pipelines complexes de traitement et les rendre accessibles dans les différentes interfaces utilisateurs du projet. G’MIC est donc, par essence, un cadriciel ouvert, extensible et en évolution constante.

G’MIC logo
Fig. 1.1 : logo du projet G’MIC, cadriciel libre pour le traitement d’images, et sa mascotte « Gmicky » (réalisée par David Revoy).

Le projet G’MIC est développé depuis 2008, principalement par deux membres de l’équipe IMAGE du laboratoire GREYC : David Tschumperlé (Chargé de Recherche CNRS, responsable de l’équipe) et Sébastien Fourey (Maître de Conférences ENSICAEN). L’équipe IMAGE, l’une des six équipes du GREYC, est composée d’une cinquantaine de membres (chercheurs, enseignants‐chercheurs, doctorants, post-doctorants et ingénieurs), tous spécialisés dans les domaines de l’algorithmique et des mathématiques du traitement d’images.

Les interfaces utilisateurs de G’MIC les plus visibles sont : la commande gmic, exploitable en ligne de commande (complément indispensable à ImageMagick ou GraphicsMagick pour ceux qui traitent leurs images en passant par le terminal), le service Web G’MIC Online, et surtout, le greffon G’MIC-Qt, disponible pour plusieurs logiciels populaires d’édition d’images numériques (libres ou propriétaires) tels que GIMP, Krita, Paint.net, et plus récemment, Adobe Photoshop ou encore Affinity Photo. Ce greffon permet d’enrichir ces logiciels de plus de 570 filtres et effets différents à appliquer sur des images.

Greffon G’MIC-QtFig. 1.2 : Aperçu du greffon G’MIC-Qt, en version 3.0.0, ici lancé depuis GIMP 2.10.

Grâce à son langage de script intégré, facilitant le prototypage et l’implémentation d’algorithmes et d’opérateurs de traitement d’images, de nouveaux filtres sont régulièrement créés et ajoutés à G’MIC. Une grande partie de cette dépêche sera d’ailleurs consacrée à la description des nouveaux filtres et effets développés ces deux dernières années.

2. Nouveautés du greffon G’MIC-Qt

G’MIC-Qt étant l’interface la plus populaire et la plus utilisée du projet G’MIC, commençons donc par décrire les nouveautés la concernant. Nous avons sélectionné seulement un sous-ensemble des nouveaux filtres et effets ayant fait leur apparition dans le greffon, sans pouvoir être exhaustif, puisque c’est en réalité plus de cinquante nouvelles entrées qui ont été ajoutées en deux ans ! Nous avons essayé de suivre l’adage « Une image vaut mille mots », en parsemant cette dépêche de nombreuses figures, illustrant les nouveautés présentées.

2.1. Effets artistiques

  • Le nouveau filtre Artistic / Paint With Brush s’inscrit dans la grande tradition des effets cherchant à transformer une photographie en dessin ou en peinture. Son originalité réside dans le fait qu’il va repeindre entièrement l’image donnée en entrée sur une toile blanche virtuelle, en appliquant des coups de pinceau successifs à différentes échelles : d’abord avec des brosses grossières, puis avec des brosses de plus en plus fines pour recréer les moindres détails de l’image.

gmic_paint_with_brush
Fig.2.1.1. Le filtre « Artistic / Paint With Brush » en action.

Ici, tout est réglable : le nombre de coups de pinceau à chaque itération, la dynamique de la brosse (taille, opacité, couleur, orientation…), la précision géométrique des traits, etc. Cela en fait un filtre très polyvalent permettant de simuler des styles de peintures variés, comme on peut le voir sur l’animation ci-dessous, qui montre les résultats obtenus pour plusieurs pré-réglages proposés par ce filtre, et ce, pour une même image d’entrée.

gmic_paint_with_brush
Fig.2.1.2. Les différents préréglages proposés permettent de simuler plusieurs styles de peinture.

  • Dans la même veine, le filtre Artistic / Doodle redessine une image sous forme de « gribouillages », à savoir un ensemble de traits noirs continus sur fond blanc, localisés principalement sur les contours des objets présents dans les images, comme illustré par le résultat ci-dessous.

gmic_doodle
Fig.2.1.3. Résultat du filtre « Artistic / Doodle ».

  • Toujours dans l’optique de convertir une image en une illustration, le filtre Artistic / Comic Book a été récemment ajouté au greffon et permet de donner un aspect cartoon à vos images. C’est un filtre « communautaire », puisqu’il a été initié par Claude Lion, nouveau contributeur au projet, puis légèrement modifié par moi-même.

gmic_comic_book
Fig.2.1.4. Le filtre « Artistic / Comic Book » en action.

  • Vous souhaitez effrayer vos enfants juste avant de les coucher, pour être sûrs qu’ils passent une bonne nuit ? Le nouveau filtre Artistic / Ghost est fait pour vous ! Cet algorithme agglomère des segments blancs semi-transparents sur les contours des objets, ce qui a pour effet de générer le plus souvent des images assez cauchemardesques (notamment lorsqu’il est appliqué sur des portraits).

gmic_ghost
Fig.2.1.5. Le filtre « Artistic / Ghost » en action. Éloignez les enfants !

Il est alors facile, en mélangeant le résultat de cet effet avec l’image originale (par des modes de fusion de calques bien choisis) de générer des animations, qui transformeront n’importe laquelle de vos images en vision d’horreur ! (ici, nous l’avons utilisé conjointement avec la commande morph de G’MIC pour le rendu de l’animation ci-dessous).

gmic_ghost
Fig.2.1.6. Variation animée autour du filtre « Artistic / Ghost ».

  • Enfin, mentionnons deux petites améliorations sur des filtres artistiques déjà existants. Tout d’abord, le filtre Frames / Droste se dote de points manipulables sur la fenêtre de prévisualisation, permettant de régler plus aisément la zone où va se positionner la répétition de l’image d’entrée. Ce sont les points de couleur visibles aux quatre coins du miroir, sur l’exemple ci-dessous.

gmic_droste
Fig.2.1.7. Ajout de points manipulables par l’utilisateur pour le réglage du filtre « Frames / Droste ».

Puis, le filtre Artistic / Stylize se dote de six nouveaux styles prédéfinis, élaborés par Christine Garner, une artiste qui avait beaucoup utilisé ce filtre pour donner un aspect texturé à ses images avant de proposer sa contribution. Ces nouveaux styles permettent par exemple de produire des images avec des textures de crayon, de craie, de pastel ou de fusain.

gmic_stylize
Fig.2.1.8. Un des nouveaux styles prédéfinis disponibles dans le filtre « Artistic / Stylize ».

2.2. Amélioration d’images

  • Le greffon se dote encore d’un nouvel algorithme pour aider au débruitage des images, problème très classique mais ô combien difficile à résoudre, qui occupe les chercheurs en traitement d’images depuis plusieurs générations. Le nouveau filtre Repair / Denoise essaye de s’acquitter de cette tâche par une approche basée sur les réseaux de neurones convolutifs.

gmic_denoise
Fig.2.2.1. Le filtre « Repair / Denoise » en action.

À première vue, cette information peut sembler anodine, mais elle représente en réalité un fait marquant dans l’histoire de G’MIC (ainsi qu’un bon paquet de semaines de développement !). En effet, pour réaliser ce filtre, il a fallu implémenter une bibliothèque complète d’apprentissage machine, nommée nn_lib (pour « Neural Network Library »). Cette bibliothèque permet aujourd’hui la construction, l’apprentissage et l’évaluation de réseaux de neurones artificiels. C’est généralement sous le terme (un peu dévoyé) d’« Intelligence Artificielle » que l’on désigne ce type de méthodes. Le filtre de débruitage Repair / Denoise est donc tout simplement le premier filtre de G’MIC basé sur cette nouvelle bibliothèque d’apprentissage machine !

gmic_denoise_balloons
gmic_denoise_parrot
Fig.2.2.2. Deux exemples de débruitage d’images, obtenus avec le filtre « Repair / Denoise ».

Avec l’apparition de nn_lib, nous espérons proposer dans le futur de plus en plus de filtres basés sur les réseaux de neurones, pour la retouche et la génération d’images. De belles choses à venir en perspective !

  • Un autre filtre d’amélioration d’images, plus spécialisé celui-ci, a été intégré au greffon G’MIC-Qt. Il s’agit du filtre Repair / Unpurple dont le rôle est de supprimer les franges violettes qui peuvent apparaître dans les photographies. L’algorithme utilisé ici est un portage direct en langage G’MIC de l’algorithme Unpurple de Martin Jambon, portage réalisé par Stanislav Paskalev. On peut voir ci-dessous l’effet de ce filtre sur une portion d’image comportant ces fâcheuses franges violettes.

gmic_unpurple
Fig.2.2.3. Portion de photographie couleur comportant des franges violettes.

gmic_unpurple
Fig.2.2.4. Le filtre « Repair / Unpurple » en action.

gmic_unpurple
Fig.2.2.5. Résultat du filtre : les franges violettes ont disparu.

  • Une envie soudaine de rehausser les détails dans vos images ? Le nouveau filtre Details / Sharpen [Multiscale] pourrait vous intéresser. Il vient compléter l’armada des algorithmes d’amélioration de netteté existants dans G’MIC. Il se base sur un algorithme de rehaussement multi-échelle pour faire ressortir les détails de différentes tailles présents dans les images.

gmic_sharpen_multiscale
Fig.2.2.6. Le filtre « Details / Sharpen [Multiscale] » en action.

gmic_sharpen_multiscale_anim
Fig.2.2.7. Résultat de l’application du filtre sur une photographie couleur.

2.3. Retouche des couleurs

Pour la retouche couleur des images, deux nouveaux filtres particulièrement intéressants font leur apparition dans G’MIC-Qt :

Premièrement, le filtre Colors / Tune HSV Colors, qui permet à l’utilisateur de définir, de façon très fine, une fonction de transformation opérant dans l’espace couleur HSV (Teinte-Saturation-Valeur).
Ce filtre fonctionne de la manière suivante :

  • Tout d’abord, le filtre va déterminer, dans l’image d’entrée, les couleurs existantes les plus proches des couleurs pures suivantes : le rouge (dénoté R), le jaune (Y), le vert (G), le cyan (C), le bleu (B) et le magenta (M). À ceci s’ajoute la couleur la plus sombre (D), la plus claire (L), ainsi que la couleur moyenne (A). Il arrive d’ailleurs que l’image d’entrée ne contienne pas du tout l’une ou l’autre de ces couleurs, et dans ce cas, la couleur extraite la plus proche peut être perceptivement assez éloignée de la couleur pure idéale. C’est le cas par exemple avec l’image du papillon illustrée ci-dessous : cette image ne contient aucun pixel dans les tons bleus.

gmic_tune_hsv1
Fig.2.3.1. Le filtre « Colors / Tune HSV Colors » extrait tout d’abord des couleurs de base de l’image.

  • Ces neuf couleurs extraites de l’image vont ensuite servir de base pour la définition d’une transformation couleur personnalisée. On va pouvoir en effet modifier chacune de ces couleurs indépendamment dans l’espace HSV, en rendant la couleur plus ou moins claire, plus ou moins saturée, ou en changeant carrément sa teinte. C’est ce que nous faisons dans l’exemple ci-dessous où l’on modifie les couleurs les plus rouges et magentas pour les rendre vertes et changer ainsi la couleur de la fleur sur laquelle est posé le papillon (dont on a également modifié légèrement la teinte en passant).

gmic_tune_hsv0
Fig.2.3.2. L’utilisateur peut agir sur chacune des 9 « couleurs-clés » individuellement pour définir une transformation couleur personnalisée.

D’un point de vue technique, cette redéfinition des « couleurs-clés » entraîne dans un premier temps la construction d’une CLUT (Color LUT) interpolée dense en 3D, qui sert à modifier dans un second temps l’image d’entrée suivant les désidératas de l’utilisateur, comme illustré ci-dessous dans notre exemple avec le papillon :

fig_hsv
Fig.2.3.3. En interne, G’MIC génère une CLUT 3D modélisant la transformation colorimétrique souhaitée.

Les cas d’utilisation de ce filtre sont assez nombreux. Que ce soit pour une retouche locale de couleur (transformation d’une couleur en une autre), ou une retouche colorimétrique plus globale, ce filtre trouvera facilement sa place dans la boîte à outils du bidouilleur de couleurs. Dans la figure ci-dessous, nous utilisons par exemple ce filtre pour définir une ambiance couleur crépusculaire.

gmic_tune_hsv2
Fig.2.3.4. Transformation couleur globale appliquée sur une image de Pepper & Carrot de l’artiste David Revoy.

Une vidéo de démonstration de ce filtre est visible sur la chaîne Youtube de Pierre « El Lobo », qui poste régulièrement des tutoriels en français sur l’utilisation de GIMP. Cliquez sur l’image ci-dessous pour y accéder. Plus de détails sur l’utilisation de ce filtre peuvent également être trouvés sur le forum de G’MIC (en anglais).

video_tune_hsv

Le deuxième filtre de retouche colorimétrique notable se nomme Colors / Transfer Colors [PCA]. Il permet de transférer les couleurs d’une image de référence vers une image que l’on souhaite modifier. Techniquement, ce transfert est réalisé en imposant la matrice de covariance de l’image à modifier pour correspondre à celle de l’image de référence.

gmic_transfer_pca
Fig.2.3.5. Le filtre « Colors / Transfer Colors [PCA] » en action.

gmic_transfer_pca_anim
Fig.2.3.6. Résultat du transfert de couleur. Les couleurs de l’image de référence (bonhommes de neige) ont été transférées à l’image de l’oiseau.

À noter que l’algorithme de transfert de couleurs sous-jacent n’est pas utilisé uniquement pour ce filtre, mais a également été intégré comme une sous-partie de traitements plus complexes (par exemple, le filtre Artistic / Stylize évoqué précédemment).

2.4. Déformations et dégradations

Les amateurs de déformations d’images et de Glitch art peuvent aussi trouver quelque intérêt dans cette nouvelle version 3.0 de G’MIC.

  • D’abord, avec le nouveau filtre Deformations / Breaks, qui introduit aléatoirement des discontinuités triangulaires dans les images. Ce filtre provient initialement d’une demande de l’artiste David Revoy pour générer une déformation proche de ce que donnait un autre filtre plus ancien, Deformations / Crease, mais avec des coupures plus nettes. Deux nouveaux modes de déformations ont ainsi été implémentés pour cet effet (modes Flat et Relief) avec le résultat suivant :

gmic_breaks
Fig.2.4.1. Application des deux modes différents du filtre « Deformations / Breaks » sur une image couleur.

David Revoy nous montre ci-dessous une application de ce filtre de « cassures » d’images dans le domaine de l’illustration, pour un rendu d’éclairs magiques du plus bel effet !

gmic_breaks_revoy
Fig.2.4.2. Utilisation du filtre « Deformations / Breaks » pour perturber la forme d’éclairs magiques.

Une vidéo plus détaillée d’utilisation de ce type de filtres par David Revoy est visible en suivant le lien suivant :
video_crease

  • Autre effet très glitchesque : le filtre Degradations / Rebuild From Blocs s’évertue à reconstruire une image à partir de l’ensemble de ses blocs, en s’imposant néanmoins de ne pas les repositionner à leur place initiale, mais en s’autorisant à réutiliser un même bloc, si besoin. Comme on s’en doute, le résultat ressemble vaguement à l’image initiale mais avec un effet de bloc très prononcé.

gmic_rebuild_from_blocs
Fig.2.4.3. Le filtre « Degradations / Rebuild From Blocs » va changer les positions des blocs de l’image.

Il est amusant de remarquer que dans l’exemple ci-dessus, les blocs correspondant aux yeux de la demoiselle ont simplement été inversés dans les deux images !

  • Enfin, le filtre Degradations / Blur [Multidirectional] applique, comme son nom l’indique, un effet de flou multi-directionnel sur l’image. Il est possible d’ajuster le nombre de directions de flous simultanées, ainsi que d’éventuellement rehausser les contrastes locaux dans l’image obtenue.

gmic_blur_multi
Fig.2.4.4. Le filtre « Degradations / Blur [Multidirectional] » en action.

gmic_blur_multi2
Fig.2.4.5. Résultats obtenus avec différents paramétrages du filtre.

2.5. Rendus de formes et de motifs

Rentrons maintenant dans le monde merveilleux des filtres de rendus. C’est une catégorie sans pareille où l’on déniche toutes sortes de bizarreries, des filtres qui semblent n’avoir aucune utilité, jusqu’au jour où ils deviennent parfaitement indispensables… ou pas ! Les filtres suivants, qui ont fait leur apparition dans G’MIC 3.0, n’échappent pas à cette règle. Ils vous serviront sans doute rarement, mais ils sont quand même sympas !

  • Commençons par le plus simple d’entre eux, le filtre Silhouettes / Others / Dragon Curve dont le but est de tracer la Courbe du Dragon, une courbe fractale composée d’un unique tracé continu, construit de manière itérative.

gmic_dragoncurve
Fig.2.5.1. Différentes itérations de construction de la courbe du dragon.

  • Enchaînons rapidement avec le filtre Rendering / Hypotrochoid qui, là aussi, a pour but de tracer une courbe sinusoïdale particulière, à savoir une Hypotrochoïde. À quoi ça sert ? On ne sait pas vraiment, mais il ne faut jamais sous-estimer la puissance créatrice des artistes utilisateurs !

gmic_hypotrochoid
Fig.2.5.2. Le filtre « Rendering / Hypochotroid » en action.

  • Toujours dans l’univers du tracé de courbes, attardons-nous un peu plus longuement sur le nouveau filtre Rendering / Sine Curve, qui définit une famille de courbes paramétriques 2D ou 3D, avec un grand nombre de paramètres réglables par l’utilisateur (près de 50 !).

gmic_sine_curve
Fig.2.5.3. Le filtre « Rendering / Sine Curve » en action.

Le nombre de paramètres est vraiment élevé et ce filtre propose donc un ensemble de pré-réglages servant de base pour jouer avec toutes les variations de courbes possibles. La figure ci-dessous illustre quelques-unes des formes prédéfinies offertes par l’algorithme.

gmic_sine_curve_presets
Fig.2.5.4. Quelques pré-réglages de paramètres proposés par le filtre « Rendering / Sine Curve ».

Vous l’aurez compris, ce filtre permet de dessiner des courbes sinusoïdales paramétrées très variées. On pourra l’utiliser notamment pour générer des fonds d’écrans chatoyants. Pierre « El Lobo » a d’ailleurs réalisé un petit tutoriel vidéo sur ce filtre, visible sur sa chaîne Youtube (suivre le lien ci-dessous)
video_sine_curve

  • Et si, plutôt que de se contenter de rendus de courbes 1D, on s’intéressait maintenant à la génération paramétrique d’images en 2D ? C’est ce que propose le filtre Patterns / Random Pattern, dont le fonctionnement est assez original : il génère une fonction mathématique aléatoire f(z) (z étant une variable complexe), composée de fonctions complexes de base (cos(), sin(), pow()…) et d’opérateurs (+, -, *, /…), en construisant récursivement un arbre d’expression. f(z) est ensuite évaluée pour tous les points z de l’image, localisés dans un domaine rectangulaire, lui-même choisi aléatoirement. Les valeurs de f(z) sont finalement transformées en valeurs RGB pour déterminer les couleurs de tous les pixels de l’image.

gmic_random_pattern
Fig.2.5.5. Le filtre « Patterns / Random Pattern » en action.

Notons que la construction de la fonction f(z) dépend uniquement de la graine aléatoire utilisée pour engendrer l’arbre d’expression. La figure ci-dessous illustre quelques rendus d’images obtenus avec différentes valeurs de graines aléatoires.

gmic_random_pattern
Fig.2.5.6. Quelques exemples de motifs aléatoires générés par le filtre « Patterns / Random Pattern ».

  • Les méthodes de génération récursive d’images peuvent produire des motifs géométriques originaux et intéressants, ce que semble également confirmer le filtre Patterns / Triangular Pattern. Il génère des images constituées de triangles récursivement subdivisés de différentes façons, chacune ayant une probabilité d’occurrence réglable par l’utilisateur.

gmic_triangular
Fig.2.5.7. Le filtre « Patterns / Triangular Pattern » en action.

Au fur et à mesure des itérations, on voit se former dans l’image des motifs géométriques de plus en plus complexes, comme le montre l’animation ci-dessous.

gmic_triangular_anim
Fig.2.5.8. Visualisation des itérations de construction du motif triangulaire par le filtre « Patterns / Triangular Pattern ».

En augmentant le nombre d’itérations et en ne traçant que les contours des triangles subdivisés, on arrive à générer des motifs géométriques fractals vraiment remarquables, étant donnée la simplicité apparente de l’algorithme de subdivision de triangles, comme l’illustre la figure suivante. De quoi donner des idées de motifs pour carreler sa cuisine ou sa salle de bain !

gmic_triangular_patterns
Fig.2.5.9. Quelques exemples de subdivisions triangulaires récursives aléatoires obtenues par le filtre « Patterns / Triangular Pattern ».

  • Et en parlant de fractales, venons-en au filtre Rendering / Newton Fractal qui permet justement de naviguer dans les Fractales de Newton, avec un grand nombre de paramètres ajustables. Ces fractales sont obtenues en cherchant à trouver les zéros d’une fonction complexe f(z) (souvent un polynôme) par la méthode de Newton. Cette technique itérative construit une suite censée converger vers l’un des zéros de la fonction. Pour chaque point (complexe) z de l’image, on détermine donc sa couleur affichée en fonction du nombre d’itérations nécessaires pour arriver à convergence, ce qui donne ces motifs géométriques fractals de toute beauté.

gmic_newton
Fig.2.5.10. Le filtre « Rendering / Newton Fractal » en action.

Dans G’MIC-Qt, le filtre propose à l’utilisateur de rentrer sa propre formule mathématique pour définir la fonction f(z), ainsi que ses dérivées. Il offre aussi des options pour coloriser la fractale de manière personnalisée et pour se balader facilement dans l’espace fractal grâce à son navigateur intégré, simple mais efficace. Enfin, il étend le principe du calcul à d’autres méthodes de résolutions (méthode de la Sécante et méthode de Householder). Et comme toujours avec G’MIC, il est aussi possible de scripter ce filtre à partir de la ligne de commande (avec la commande gmic), pour générer par exemple ce type d’animations :

gmic_newton_anim
Fig.2.5.11. Génération d’un zoom dans une fractale de Newton, scriptée avec gmic.

  • Toujours dans l’esprit « fractal », le nouveau filtre Rendering / Tree vous propose de générer des arbres fractals, là encore avec de nombreux paramètres réglables pour varier les plaisirs.

gmic_tree
Fig.2.5.12. Le filtre « Rendering / Tree » en action.

On peut ainsi ajuster, outre les couleurs du tronc et des feuilles, les tailles des branches et les probabilités de séparation des branches en plusieurs morceaux. Cela permet de générer des arbres à la géométrie et aux looks assez différents, comme vous pouvez le voir sur la figure ci-dessous.

gmic_3_trees
Fig.2.5.13. Exemples de rendus d’arbres avec des paramétrages différents, par le filtre « Rendering / Tree ».

La vidéo suivante illustre l’utilisation de ce filtre dans GIMP (cliquez sur l’image ci-dessous pour accéder à la vidéo).
video_trees.png

  • Un autre effet de rendu qui mérite d’être mis en lumière (sans mauvais jeu de mot…) est le filtre Light & Shadows / Guided Light Rays. Ce filtre permet de lancer des rayons lumineux à partir d’une source de lumière ponctuelle, vers ou à travers une forme quelconque dessinée par l’utilisateur et définie sous la forme d’un masque opaque placé sur un calque transparent au-dessus de l’image d’entrée.

gmic_guided_light_rays
Fig.2.5.14. Le filtre « Light & Shadows / Guided Light Rays » en action.

Dans l’exemple ci-dessus, les rayons lumineux s’arrêtent lorsqu’ils rencontrent les pixels du logo G’MIC. Mais on peut aussi adapter les paramètres du filtre pour que les rayons traversent la forme. C’est ce qui est fait dans l’exemple ci-dessous, où le masque défini par l’utilisateur correspond à la surface vitrée des fenêtres d’un salon.

gmic_guided_light_rays
Fig.2.5.15. Rayons lumineux synthétisés pour passer à travers un masque défini par l’utilisateur.

Avec ce filtre, il est ainsi facile d’ajouter des effets d’éclairages personnalisés sur des photographies, comme montré dans l’exemple suivant. Le tout est de bien définir le masque de la forme guidant les rayons lumineux, et le filtre fait le reste !

gmic_guided_light_rays_anim
Fig.2.5.16. Ajout d’un effet d’éclairage latéral grâce au filtre « Light & Shadows / Guided Light Rays ».

La vidéo tutorielle suivante montre l’utilisation de ce filtre sous GIMP :
video_lightrays

  • Enfin, pour conclure notre tour des nouveautés concernant les effets de rendus, terminons avec le filtre Sequences / Moiré Animation qui nous entraîne dans le monde merveilleux de l’animation basée sur les technologies (robustes) du siècle dernier, à savoir : la feuille de papier et le calque transparent ! Ce filtre va en effet permettre de créer, à peu de frais, une illusion d’optique animée, en générant des images ayant un effet Moiré. À partir d’une animation donnée en entrée (contenant peu d’images), le filtre va produire une image fixe ainsi qu’un masque binaire contenant des barres verticales comme ci-dessous :

gmic_moire
Fig.2.5.17. Images générées par le filtre « Sequences / Moiré Animation » à partir d’une animation constituée de 5 images.

L’astuce consiste à imprimer la première image sur une page blanche et la seconde sur un calque transparent de même taille. En positionnant le transparent sur la page de manière adéquate, et en déplaçant celui-ci latéralement, on rend visible l’animation. En effet, les barres verticales imprimées sur le transparent ne laissent passer qu’une seule image de l’animation à la fois, ces images se succédant lorsque le transparent se déplace :

gmic_moire_anim
Fig.2.5.18. Rendu de l’animation lorsque le transparent se déplace sur la page imprimée.

À noter que si le nombre d’étapes-clés de l’animation doit être effectivement restreint (en général, moins d’une dizaine, il n’est évidemment pas question de convertir un film de deux heures sous cette forme !), il n’y a pas de raisons de se limiter à des images en niveaux de gris. Les deux figures suivantes illustrent, par exemple, le rendu d’une animation couleur avec ce filtre.

gmic_moire
Fig.2.5.19. Images générées par le filtre « Sequences / Moiré Animation » à partir d’une animation couleur de 6 images.

gmic_moire_anim
Fig.2.5.20. Rendu de l’animation lorsque le transparent se déplace sur la page imprimée.

« Tes exemples, c’est bien joli, mais en vrai, ça donne quoi ? », m’objecterez-vous. Eh bien, le ressenti d’animation est vraiment présent, comme on peut l’apprécier dans la vidéo ci-dessous :
video_moire

Au final, c’est une manière peu onéreuse et amusante de créer des supports d’animation personnalisées. Les enfants, pas encore lobotomisés blasés par l’application Youtube de leur téléphone portable, adoreront !

2.6. Se maintenir à jour

L’ensemble des filtres que nous venons de décrire ne représente qu’une sous-partie de tous les nouveaux filtres ajoutés ces deux dernières années. Il existe en particulier de nombreux filtres « communautaires » qui restent parfois dans l’ombre un certain temps avant d’intégrer la liste principale des filtres proposés (filtres de la catégorie Testing / notamment). Pour faciliter le suivi de ces mises à jour, G’MIC-Qt s’est donc doté de la fonction About / What's New?, dont le rôle est de lister les récentes additions et suppressions de filtres dans le greffon. Cette liste est adaptée à l’utilisateur, puisqu’elle est élaborée en fonction de la liste précédemment consultée par celui-ci.

gmic_whatsnew
Fig.2.6.1. Le filtre « About / What's New? » en action.

Pour rappel, le bouton Mettre à jour les filtres situé sous la liste déroulante des filtres permettra au greffon de vérifier si de nouveaux filtres sont disponibles, et le cas échéant, de les télécharger.

Ce tour d’horizon des nouveaux filtres de G’MIC-Qt est maintenant terminé. Mais d’autres améliorations du greffon nous attendent !

2.7 Toujours plus de logiciels hôtes

  • L’une des nouvelles marquantes dans la vie de G’MIC-Qt concerne sa mise à disposition sous la forme d’un greffon compatible avec le protocole 8bf. Cette API a été imaginée par Adobe dans les années 90 pour le développement de greffons pour son logiciel phare (et non-libre) Photoshop. C’est un protocole toujours utilisé, malgré son grand âge (et ses limitations techniques). Avec les années, cette API de greffon a même été adoptée par de nombreux autres logiciels d’illustration et de retouche photo. Par conséquent, cette version du greffon G’MIC-Qt peut en pratique être maintenant utilisée à l’intérieur de nombreux logiciels populaires, compatibles avec le protocole 8bf, à savoir : Adobe Photoshop, Affinity Photo, Paint Shop Pro, Photoline, XnView, pour n’en citer que quelques-uns.

Greffon G’MIC-Qt sous Affinity Photo
Fig.2.1.1. Le greffon G’MIC-Qt tournant sous Affinity Photo / Windows.

C’est grâce à Nicholas Hayes, déjà l’auteur du portage du greffon pour le logiciel Paint.NET, que cette version 8bf de G’MIC-Qt a été réalisée. C’est une bonne nouvelle pour tous les utilisateurs de ces logiciels propriétaires, qui pourront bénéficier d’un nouveau greffon bien fourni en filtres divers de traitement d’images, avec la possibilité de les modifier et de les améliorer, et tout cela sans rien payer (ça va les changer ! ☺).

  • Une autre bonne nouvelle concerne l’amélioration du support du greffon G’MIC-Qt pour GIMP, notamment sous Windows, où plusieurs utilisateurs nous avaient rapporté des problèmes de compatibilités avec les .dll fournies, lors de la sortie de la dernière version de GIMP (la 2.10.28). De plus, grâce aux modifications apportées par Jan Tojnar, le greffon G’MIC-Qt peut maintenant se compiler pour la version 2.99 de GIMP (nom de la version de développement de GIMP qui deviendra la très attendue 3.0). Mentionnons également l’arrivée du greffon G’MIC-Qt pour la version Flatpak de GIMP, grâce au travail d’Hubert Figuière qui l’a empaqueté pour Flathub.

  • Enfin, notons l’intégration attendue de G’MIC-Qt 3.0 dans la prochaine version majeure 5.0 du logiciel Krita, dont la sortie est planifiée ce mois de décembre. Cette intégration est prévue pour être complète et systématique, c’est-à-dire que G’MIC-Qt sera inclus par défaut dans Krita, et non plus installé comme un greffon extérieur (comme c’est le cas actuellement). Cela promet une meilleure intégration dans Krita et devrait régler plusieurs problèmes récurrents, en particulier pour les utilisateurs de Mac. C’est amyspark, avec qui nous sommes en contact, qui est en charge de cette intégration.

2.8. Améliorations de l’interface

Le greffon a aussi vu son interface graphique s’améliorer, avec en particulier :

  • La mise à disposition d’un système de tags colorés pouvant être assignés à un ou plusieurs filtres. Ces pastilles de couleur (6 couleurs différentes) permettent à l’utilisateur qui le souhaite de marquer certains filtres pour les retrouver plus facilement par la suite. Chaque utilisateur décide bien sûr du sens qu’il attribue à chaque couleur et les cas d’utilisation sont donc potentiellement nombreux : on peut utiliser ces tags de manière temporaire pour une session donnée, ou au contraire marquer les filtres sur du plus long terme. L’interface du greffon propose un système simple mais efficace pour gérer ces différents tags comme le montre l’animation ci-dessous :

gmic_qt_tags
Fig.2.8.1. Un nouveau système de « tags » colorés pour marquer les filtres a fait son apparition dans le greffon.

  • L’apparition d’un bouton « Copier la commande G’MIC dans le presse-papier » localisé en haut à gauche du panneau contenant la liste des filtres :

gmic_qt_clipboard
Fig.2.8.2. Nouveau bouton de copie de la commande G’MIC dans le presse-papier.

Ce bouton ravira tous les scripteurs : en appuyant dessus, on obtient la commande G’MIC à invoquer dans le terminal avec l’outil en ligne de commande gmic, afin d’appliquer le filtre actuellement sélectionné avec ses valeurs de paramètres courantes. Voici par exemple ce que contient le presse-papier après avoir appuyé sur ce bouton dans l’exemple ci-dessus :

fx_spherize 50,4.16,0,58.8136,52.1628,0,0,2,0

On peut alors recoller cette chaîne dans un appel à gmic en ligne de commande, pour obtenir exactement le même effet sur d’autres images, ou pour l’intégrer dans un pipeline plus complexe de traitement :

gmic_qt_clipboard2
Fig.2.8.3. Application via le terminal de la commande G’MIC copiée depuis le greffon G’MIC-Qt, sur d’autres images.

C’est une fonctionnalité vraiment pratique, pour peu que vous écriviez vos propres scripts de traitement. On peut ainsi profiter de la commodité de l’interface graphique du greffon (en particulier sa fenêtre de prévisualisation) pour régler les paramètres d’un filtre, mais aussi du confort de la ligne de commande pour appliquer un traitement par lots sur plusieurs dizaines ou centaines de fichiers images.

  • Citons également entre autres améliorations, le fait que G’MIC-Qt se dote d’un système de traduction amélioré (une version française complète est d’ailleurs prévue à court terme), et que l’API proposée par le greffon a été enrichie pour permettre plus de contrôle par le logiciel hôte. Ces améliorations sont par exemple utilisées par G’MIC-Qt pour proposer de nouvelles options de contrôle via un appel en ligne de commande.

3. Améliorations du cœur de G’MIC

Cette description des nouveautés visibles dans le greffon G’MIC-Qt étant achevée, abordons les autres améliorations apportées par cette version 3.0. Beaucoup de choses intéressantes ont été ajoutées au cœur du projet G’MIC, à savoir son interpréteur et sa bibliothèque de traitement d’image associée CImg, qui passent également en version 3.0 pour l’occasion. Ces nouveautés sont certes moins visibles, mais tout aussi importantes puisqu’elles ont un impact potentiel sur l’ensemble des interfaces du projet !

3.1. Améliorations du langage et de l’interpréteur

  • Commençons par la fonctionnalité qui a demandé le plus d’effort de développement, que nous avons déjà évoquée précédemment : l’implémentation d’une bibliothèque interne d’apprentissage machine (nn_lib). Cette bibliothèque permet de manipuler des réseaux de neurones génériques et prend en charge à la fois la phase d’apprentissage du réseau et la phase d’inférence. Cette bibliothèque a été ré-implémentée à partir de zéro, ce qui représente un effort réellement conséquent de recherche, d’implémentation et de tests (mais ça a été aussi un travail ô combien instructif !). nn_lib permet la construction dans G’MIC de réseaux de neurones comportant des modules convolutifs ou complètement connectés, des modules de pooling, des modules résiduels, etc. Plusieurs optimiseurs ont été implémentés pour gérer l’apprentissage (SGD, RMSprop, Adam, Adamax) et il est donc déjà possible d’entraîner des réseaux pour certaines tâches de traitement d’images avec cette nouvelle bibliothèque. Le diagramme ci-dessous illustre par exemple l’une des architectures de réseau qui a été entraînée dans le cadre du nouveau filtre de débruitage Repair / Denoise cité auparavant.

gmic_denoise_nn
Fig.3.1. Une des architectures de réseau de neurones entraîné pour le nouveau filtre de débruitage « Repair / Denoise ».

Ce n’est bien sûr encore qu’un début, mais nous espérons généraliser l’utilisation de nn_lib pour élaborer de nouveaux filtres intéressants dans un avenir proche. Plus de détails techniques sur la bibliothèque nn_lib sont visibles dans l’article dédié (en anglais) sur le forum de G’MIC.

  • Une autre amélioration notable concerne la ré-implémentation dans G’MIC d’un interpréteur de langage Markdown étendu : le gmd (comme G’MIC Mark*d*own). Ce moteur de rendu Markdown est maintenant celui utilisé pour produire la documentation de référence et les pages de tutoriels, visibles sur la page web du projet. Il est aussi utilisé pour l’affichage de l’aide sur le terminal lorsque l’on invoque G’MIC en ligne de commande (avec gmic -h par exemple). L’apparition de ce nouvel analyseur Markdown va donc de pair avec une amélioration globale de la documentation disponible pour le projet.

gmic_tutorial_reference
Fig.3.1. Le nouvel analyseur Markdown de G’MIC est utilisé pour le rendu de la documentation web de référence.

  • La gestion de nouvelles palettes de couleurs personnalisées a été améliorée, avec l’introduction d’une nouvelle commande palette mettant à disposition 34 palettes de couleurs prédéfinies, chacune composée de 256 couleurs RGB (certaines étant récupérées depuis CMOcean et LOSPEC) :

gmic_palettes
Fig.3.2. Ensemble des palettes de couleurs proposées par défaut dans G’MIC.

De plus l’utilisateur de l’interpréteur G’MIC a maintenant la possibilité de définir et nommer ses propres palettes de couleurs qui seront utilisables dans les commandes map ou index, servant à appliquer ces palettes sur des images couleurs. Les dites palettes sont généralement utiles à des fins de visualisation couleur de données scalaires. Par exemple, la colorisation d’une fractale de Mandelbrot peut se faire très simplement en G’MIC avec la ligne de commande suivante :

$ gmic 600,600 mandelbrot -1.0132,-0.316356,-1.00227,-0.305418,512 map amiga7800

gmic_mandelbrot
Fig.3.3. Résultat de l’application de la palette de couleur amiga7800 sur une fractale de Mandelbrot.

  • Au niveau du rendu d’objets maillés en 3D, deux nouveautés sont à signaler : d’abord la ré-implémentation du visualiseur 3D (commande display3d) qui a été ré-écrit directement en langage G’MIC et qui sera donc plus simple à maintenir et à faire évoluer.

gmic_solenoid
Fig.3.4. Aperçu du nouveau visualiseur 3D d’objets maillés de G’MIC.

Ensuite, notons la possibilité maintenant offerte d’exporter un objet 3D maillé construit dans G’MIC (typiquement avec une génération procédurale) sous la forme d’un fichier .obj en format Wavefront, un format ASCII simple que la plupart des modeleurs 3D sait relire. Voici, illustré ci-dessous, un exemple d’importation d’un objet 3D généré récursivement sous G’MIC et ré-importé dans Blender, grâce à l’utilisation de ce format de fichier Wavefront.

gmic_blender
Fig.3.5. Importation dans Blender d’un objet 3D généré par G’MIC de manière procédurale.

  • Toujours en restant dans le domaine des entrées-sorties, notons l’apparition ou l’amélioration du support de certains formats de fichiers, tels que ceux ayant les extensions .png, .tiff, .csv, .webp, .arw, .cr2, .nef, .dng, .heic, .avif (ces deux derniers n’étant cependant pas activés par défaut).

  • Deux nouvelles commandes lorem et portrait apparaissent également et permettent de récupérer des images aléatoires à partir de deux services web différents : Lorem Picsum et ThisPersonDoesNotExist. Elles sont assez pratiques pour tester des filtres rapidement sur des images quelconques, sans avoir à les stocker explicitement sur le disque dur. Par exemple, la commande :

$ gmic +lorem 800 +portrait 800

pourra vous afficher ceci :

gmic_lorem_portrait
Fig.3.6. Aperçu du résultat des nouvelles commandes lorem et portrait.

  • Notons enfin que gmic, l’interface en ligne de commande de G’MIC, accepte désormais la définition de points d’entrées dans des fichiers scripts d’extension .gmic, et que l’on peut donc rendre désormais de tels fichiers exécutables (avec le Shebang). Par exemple, sous Unix, le fichier test.gmic suivant pourra être rendu directement exécutable et lancé depuis un terminal :
#!/usr/bin/env gmic
# File 'test.gmic'
echo[] "Salut les amis de Linuxfr !"

3.2. Améliorations de l’évaluateur d’expressions mathématiques

Le domaine du traitement numérique des images se base essentiellement sur des modélisations mathématiques des images et des algorithmes que l’on souhaite appliquer. G’MIC, en bon professionnel du traitement d’images, possède donc son propre évaluateur d’expressions mathématiques, et celui-ci a aussi vu son état général s’améliorer avec le passage à cette nouvelle version 3.0. Pour résumer, c’est plus de 40 nouvelles fonctions mathématiques qui ont été implémentées dans cet évaluateur ces deux dernières années, afin d’améliorer ses capacités de calcul :
store(), date(), begin_t(), end_t(), merge(), f2ui(), ui2f(), ccos(), csin(), ctan(), ccosh(), csinh(), ctanh(), lerp(), maxabs(), minabs(), argmaxabs(), argminabs(), da_size(), da_insert(), da_push(), da_remove(), da_pop(), da_back(), isvarname(), resize(), fill(), repeat(), set(), deg2rad(), rad2deg(), swap(), vargkth(), vargmin(), vargmax(), vargminabs(), vargmaxabs(), vavg(), vkth(), vmin(), vmax(), vminabs(), vmaxabs(), vmed(), vprod(), vstd(), vsum(), vvar(), string().

Ces fonctions ont été ajoutées au fur et à mesure des besoins et aujourd’hui, de plus en plus de filtres complexes de G’MIC en bénéficient. Un travail d’optimisation important a également été réalisé ces dernières années pour rendre cet évaluateur de plus en plus performant, notamment en favorisant le calcul parallèle lorsque cela est possible. Plutôt que de rentrer dans des détails techniques rébarbatifs sur l’implémentation et l’optimisation de ce module, je vous propose ici un exemple qui montre la façon dont on peut utiliser cet évaluateur dans un pipeline G’MIC. Ici, on cherche à produire une image de Buddhabrot, une représentation particulière de l’ensemble de Mandelbrot. Ci-dessous à gauche, on peut voir le contenu du fichier buddhabrot.gmic définissant la commande buddhabrot, qui produit l’image de droite. L’évaluateur d’expressions mathématiques de G'MIC est appelé entre les lignes 9 et 27, ce qui correspond donc à une unique expression. Comme on le voit, cet évaluateur est capable de compiler puis d’exécuter une expression qui se trouve être en réalité un vrai petit programme !

gmic_buddhabrot_all
Fig.3.2.1. Génération d’une image de Buddhabrot avec un script G'MIC.

L’évaluateur mathématique est vraiment un élément essentiel du cadriciel G’MIC et continuera probablement d’évoluer au fil des prochaines versions.

4. Autres informations notables

En a-t-on terminé avec cette dépêche ? Pas encore ! Car travailler sur le projet G’MIC, c’est évidemment passer beaucoup de soirées à faire de la recherche, de la programmation et du test de nouvelles fonctionnalités, mais une part importante du temps passé concerne également la gestion des éléments annexes, à savoir : répondre aux questions sur les forums ou les forges github, trouver des financements pour faire avancer le projet plus rapidement, ou encore communiquer autour du projet (par exemple en écrivant des dépêches LinuxFr.org ☺ !). Et sur ces différents points, il s’est passé des choses appréciables, depuis fin 2019 :

  • D’abord, nous avons eu le privilège d’obtenir deux financements (deux CDD 12 mois), dans le cadre de l’appel « Soutien Plateforme » de l’Institut INS2I du CNRS. Ces financements ont permis consécutivement le recrutement de deux ingénieurs de développement pour travailler sur le projet G’MIC. Le premier (2018-2019), on le connait tous ici, puisqu’il s’agit de Jehan qui écrit les fameuses dépêches LinuxFr.org sur GIMP (et qui est par ailleurs contributeur majeur de GIMP). Nous avions d’ailleurs décrit ses apports dans notre dépêche précédente.

  • Le deuxième ingénieur (2019-2020), Jonathan-David Schröder a réalisé un travail conséquent pour l’implémentation d’un binding G’MIC pour le langage Python : https://pypi.org/project/gmic/. Ce binding est pour le moment figé à une version antérieure (2.9.2) de G’MIC et il reste a priori quelques corrections à réaliser, mais c’est une interface qu’on aimerait bien mettre sur le devant de la scène. Espérons que cela suscitera l’intérêt de nouveaux contributeurs extérieurs, experts en Python, pourquoi pas ? En 2020, Jonathan-David a présenté l’avancement de son travail lors du Libre Graphics Meeting qui a eu lieu en ligne. Sa présentation est disponible en cliquant sur le lien suivant :
    video_lgm2020

Dans les deux cas, ces financements ont été fructueux et ont permis d’ouvrir le projet G’MIC à d’autres horizons (sans parler du plaisir d’interagir avec ces deux ingénieurs de talent !).

  • Une autre nouvelle notable concerne le volet « communication » autour du projet, avec le développement et la mise en place de la borne tactile Virtual Artist (« Artiste Virtuel » en français). Cette borne interactive montre le principe du transfert de style entre deux images. Elle permet d’initier le grand-public au domaine de l’algorithmique du traitement d’images, avec une application artistique directe et amusante. Elle est constituée d’une table tactile sur laquelle tourne un script G’MIC qui implémente à la fois l’interface utilisateur et l’algorithme de transfert de style démontré. La vidéo ci-dessous illustre le fonctionnement de cette borne (cliquez sur l’image pour ouvrir le lien) : Virtual Artist

Virtual Artist constitue un support intéressant pour la médiation scientifique auprès du grand-public. Elle a été utilisée par exemple lors du FÉNO 2021 (Festival de l’Excellence Normande qui s’est tenu à Rouen), sur le stand du CNRS.

feno2021
Fig.4.1. La table tactile « Virtual Artist » du GREYC, en action, lors du FÉNO 2021.

  • Et toujours pour rester dans le domaine de la communication, notons que G’MIC a eu droit à une petite séquence vidéo de présentation lors de la Fête de la Science 2020, réalisée par le service communication de la délégation CNRS Normandie. Cliquez sur l’image ci-dessous pour découvrir cette vidéo :
    video_fds2020

  • Toujours en ce qui concerne la communication, nous voulions en profiter pour annoncer que la mascotte « Gmicky » du projet (le petit tigre magicien) avait été réalisée en crochet par Florence, de Doomyflocrochet. Florence réalise des versions crochet de mascottes de projets libres qui sont bien sympathiques, et qu’on vous invite à aller voir (et pourquoi pas, à commander).

Gmicky Crochet
Fig.4.1. « Gmicky », la mascotte du projet G’MIC, réalisée en crochet.

  • Enfin, plus généralement, pour ceux qui souhaiteraient se plonger plus profondément dans la programmation d’algorithmes de traitement d’images, mentionnons la sortie du livre « Le traitement numérique des images en C++ » (Éd. Ellipses, 318 pages), que j’ai coécrit avec mes collègues de l'Université Clermont Auvergne, Vincent Barra et Christophe Tilmant, pendant la période de confinement de 2020. Vous y trouverez une présentation de CImg, la bibliothèque C++ de traitement d’images (dont je suis l’auteur) et sur laquelle la majeure partie des fonctionnalités de G’MIC reposent, ainsi que des ateliers variés autour de différentes thématiques et applications du traitement d’images.

Book CImg
Fig.4.2. Un livre pour approfondir ses connaissances en algorithmique du traitement d’images, avec la bibliothèque CImg, sur laquelle est basé G'MIC.

5. Et ensuite ?

Depuis 2008, G’MIC n’a cessé d’être un projet actif, et ce, même si nous n’avons jamais défini de feuille de route très précise. Le développement de nouvelles fonctionnalités se réalise en fonction du temps et des opportunités de chacun, ainsi que des activités de recherche en traitement d’images que nous menons en parallèle dans notre équipe de recherche au laboratoire GREYC. Nous espérons seulement que ce temps ne finira pas inévitablement par nous faire défaut ! Avoir une activité de chercheur ou d’enseignant-chercheur semble parfois assez incompatible avec une activité de développement logiciel libre, qui est un travail à la fois très prenant et en même temps pas forcément très bien valorisé lors d’un suivi de carrière. Il peut donc être tentant de se focaliser sur des activités plus « rentables » d’un point de vue professionnel.

À titre personnel, je souhaiterais donc adresser des remerciements appuyés au laboratoire GREYC (notamment la direction, le service gestion et le service DDA), la Délégation CNRS Normandie (notamment le service Valorisation, le service Communication et le service RH), l’Institut INS2I du CNRS, l’association LILA, mon collègue Sébastien Fourey (co-développeur principal du projet), les membres de l’association PIXLS.US (qui héberge notre forum de discussion) ainsi que tous les contributeurs au projet, les utilisateurs faisant des retours gentils, utiles, ou même financiers. Toutes ces personnes qui ont cru au projet à un moment donné et en la capacité de ses développeurs nous ont apporté leur soutien d’une manière ou d’une autre. Cela nous a permis de ne jamais abandonner le développement de G'MIC, depuis 2008. Qu’ils en soient vraiment remerciés !

Cette dépêche est quasiment terminée, merci d’avoir tenu jusqu’au bout ! J’essayerai autant que possible de répondre aux questions que vous pourrez poser dans les commentaires.

6. Ressources complémentaires

Pour vraiment clore cette dépêche et contenter les lecteurs encore réveillés et qui pourraient être restés sur leur faim, voici une petite sélection de vidéos à regarder, pour occuper les longues soirées d’hiver qui arriveront dans les prochaines semaines :

  • Découverte de G’MIC pour GIMP (en français) : « GIMP 2.10.22 : Tuto 198 ( Filtres G’Mic ) ».
    video_gmic_gimp

  • Découverte de G’MIC pour Affinity Photo (en français) : « Tutoriel sur l’installation et l’utilisation du plugin G’MIC pour Affinity Photo ».
    video_affinity_fr

  • Découverte de G’MIC (en anglais) : « G’MIC—Free Image Manipulation Powerhouse ».
    video_gmic_powerhouse

  • Découverte de G’MIC (en anglais) : « G’MIC: An Amazing, Free Plugin ».
    video_gmic_amazing

  • Présentation de différentes techniques pour transformer une photographie en cartoon (en anglais) : « G’mic for Krita - Three ways to turn a photograph into a cartoon ».
    video_krita_cartoon

  • Présentation de G’MIC pour Krita (en anglais) : « G’mic for Krita - Step by Step tutorial on how to use this amazing FREE image manipulation plugin ».
    video_krita_gmic

  • Présentation G’MIC au Libre Graphics Meeting 2021 (en anglais) : « How to make 890+ Color LUTs fit in 3.3Mb ? ».
    video_lgm2021

  • Utilisation du filtre Degradations / Rain & Snow de G’MIC (en français) : « Tutoriel Krita - Comment dessiner la pluie dans Krita avec G’MIC ».
    video_rain

  • Utilisation du filtre Artistic / Hough Sketch de G’MIC (en français) : « Amusez vous avec Hough Sketch de G’MIC dans GIMP ».
    video_hough_sketch

  • Utilisation du filtre Artistic / Stylize de G’MIC (en anglais) : « Using the G’MIC Stylize filter in Krita with flat texture patterns ».
    video_texture

  • Note finale : cette dépêche est un résumé (si, si !) des notes de versions détaillées suivantes : notes de version 2.8, notes de version 2.9, notes de version 3.0.

Aller plus loin

  • # Hype manquante

    Posté par  . Évalué à 3.

    Dépêche très intéressante mais il me semble qu'il manque une fonctionnalité indispensable pour être au summum de la hype:

    le support du format QOI ! 😁

    https://qoiformat.org/

    • [^] # Re: Hype manquante

      Posté par  (site web personnel) . Évalué à 3.

      il manque une fonctionnalité indispensable pour être au summum de la hype:
      le support du format QOI ! 😁

      Bon, tu sais maintenant ce que tu dois faire : le coder !

      • [^] # Re: Hype manquante

        Posté par  . Évalué à 3.

        Après 20 ans sans avoir fait de C++, je suis pas sûr qu'ils voudraient de ma contribution 😜 (et je suis aussi sur que quelqu'un aura déjà fini, juste le temps que j'arrive à installer/configurer tout le nécessaire pour développer…)

        Mais c'était ironique car y'a eu pas mal de hype autour de ce format quand le premier article de blog a parlé du format il y a 3 semaines et pleins d'implémentations ont fleuri. Un petit effet TapTempo…

        Mais surtout, le dev se donne jusqu'au 20 décembre pour finaliser le format et du coup, ça évolue en ce moment…

  • # Crochet ou tricot

    Posté par  (Mastodon) . Évalué à 5.

    Bon, maintenant que l’on est bien tous d’accord sur la supériorité de Vim sur emacs (ou bien c’était l’inverse ?), il me semble qu’on va enfin pouvoir avoir une discussion technique bien plus intéressante :

    Pour réaliser en vrai des mascottes de logiciel libre, doit-on favoriser le crochet ou le tricot ?

    Je dois dire que la version crochet présentée ici est bien sympathique et convaincante. Personnellement, je donne (ce soir) ma voix au crochet.

    Surtout, ne pas tout prendre au sérieux !

    • [^] # Re: Crochet ou tricot

      Posté par  . Évalué à -8.

      Mascottes et logos naïfs et ridicules font partie des repoussoirs efficaces à l'adoption des logiciels libres (oui, je sais!).
      Gmic n'a ici aucun monopole !!!

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 1. Dernière modification le 12 janvier 2022 à 17:30.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # Application pour pré-traitement avant OCR

    Posté par  . Évalué à 5.

    Je vois que la plupart des exemples se centrent sur l'aspect artistique, mais est-ce que G'MIC est un outil adapté au pré-traitement d'un texte en vue de faire une reconnaissance de texte ?

    Je pense à :
    - redressement automatique
    - réduction du bruit et augmentation du contraste (sans "écraser" les fines parties des caractères)
    - détection de blocs de textes

    Merci

    • [^] # Re: Application pour pré-traitement avant OCR

      Posté par  . Évalué à 8. Dernière modification le 18 décembre 2021 à 15:02.

      Il y a déjà des outils dédiés pour ça. Ceux avec interface graphique permettent de recoriger la détection automatique. … [je fouille dans mon gigantesque recueil de marque-page] … [je ne retrouve rien] … [mais qu'en ai-je fait ?] … Voilà ce qui me reste

      • Noteshrink à partir duquel j'en ai trouvé d'autres en CLI qui se sont inspirés de l'algo et qui étaient censé être dans mes marques page…
      • Page dewarping du même, très utile
      • textcleaner un des scripts ImageMagick de Fred Weinhaus
      • OCRFeeder avec GUI
      • YAGF avec GUI
      • mon modeste script en Perl que j'utilise sur des bouquins (à disposition pour qui veut)
  • # A quoi ça sert ?

    Posté par  . Évalué à 7.

    Je n'y connais pour ainsi dire rien en traitement d'image et le seul filtre que j'ai utilisé un jour était la correction des yeux rouges mais je dois avouer un plaisir certain à lire les dépêches sur G'MIC (ou sur Gimp d'ailleurs) qui sont toujours d'une grande qualité.

    En commençant la lecture, une question c'est vite imposé à moi "Mais à quoi ça sert ?" et plus j’avançais dans le texte plus elle s'imposait.
    Que les développeurs aient du plaisir à améliorer et à ajouter des fonctionnalités, c'est qq choses que je comprends mais restait donc la question du sens pour l'utilisateur et puis j'ai lu ça :

    C’est une catégorie sans pareille où l’on déniche toutes sortes de bizarreries, des filtres qui semblent n’avoir aucune utilité, jusqu’au jour où ils deviennent parfaitement indispensables… ou pas

    et tout était dit. Çà sert ou pas mais c'est disponible et si D. Revoy, Aryeom ou n'importe qui dans le monde en a l'usage ou invente son utilité , alors cool, c'est disponible.

    • [^] # Re: A quoi ça sert ?

      Posté par  (site web personnel) . Évalué à 5.

      Moi je m'en suis servi une fois pour restaurer une photo d'identité qui avait été abîmée (pliures). J'avais besoin de refaire un CV très rapidement et rien d'autre sous la main à l'époque. Et ça avait bien marché !

    • [^] # Re: A quoi ça sert ?

      Posté par  . Évalué à 7.

      Toute manipulation d'images à sa place dans g'mic (ou presque) c'est un outil très généraliste. Donc oui c'est très large. Il me semble qu'en tout cas au départ il était pas mal teinté recherche et était un laboratoire d'algo de traitement d'images.

      Évidement l'annonce de son lancement donnera plus d'info

      https://linuxfr.org/news/gmic-un-nouvel-outil-libre-de-manipulation-dimages

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

  • # nn_lib & gmd

    Posté par  . Évalué à 7.

    nn_lib et gmd donnent une impression de syndrome NIH. Quels sont les raisons d'avoir redévelopper plutôt qu'utiliser des bibliothèques existantes ?

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: nn_lib & gmd

      Posté par  (site web personnel) . Évalué à 10.

      On pouvait s'attendre à cette question :)
      Il y a plusieurs raisons :

      • Pour nn_lib:

        1. En ce qui me concerne : Se plonger dans l'algorithmique des réseaux de neurones permet de bien comprendre tous les détails et astuces d'implémentation pour que ces réseaux fonctionnent en pratique. C'est très instructif et intellectuellement très profitable quand on fait en parallèle de la recherche dans le domaine du traitement d'images (ce qui est mon cas).
        2. En ce qui concerne l'utilisateur : les bibliothèques existantes d'apprentissage machine sont assez grosses en taille, pour ne pas dire énormes. Par ailleurs, il y avait déjà quasiment tout ce qu'il fallait comme fonctionnalités de base en traitement d'images dans G'MIC (convolutions, redimensionnement d'images, etc.), pour que le travail demandé puisse être vu comme suffisamment incrémental pour ne pas nécessiter de réintégrer toute une bibliothèque, qui aurait doublé beaucoup de fonctionnalités déjà existantes. La réalité, c'est qu'à l'heure actuelle, toutes les fonctions de la bibliothèque nn_lib tiennent en seulement 164 lignes de code G'MIC. C'est très (très!) peu et ça n'alourdit donc aucunement la taille du projet (attention, je ne dis pas que ces 164 lignes ont été simples à écrire :) ).
        3. Le projet G'MIC a l'intention de rester relativement léger, et donc n'a pas vocation à utiliser de "gros" réseaux de neurones (qui peuvent occuper plusieurs centaines de Mo voire plusieurs Go chacuns…), donc être obligé d'utiliser une bibliothèque externe énorme pour gérer de petits réseaux n'a pas un intérêt fou. Les différents réseaux utilisés pour le débruitage tiennent chacun dans moins de 300 Ko par exemple.
      • Pour le moteur Markdown:

      Au départ, nous utilisions un moteur Markdown classique pour générer les pages de documentation, mais on s'est aperçu assez vite qu'on avait des besoins spécifiques que ne proposait pas le Markdown classique. Et écrire un parseur/générateur Markdown n'est pas très difficile. Là encore, ça a été écrit en langage G'MIC, en un peu plus de 1000 lignes, donc en pratique ça prend très peu de place mémoire (moins de 100Ko) par rapport à la solution d'avoir à intégrer une bibliothèque Markdown (et une n-ième dépendance…). Ca prend un peu plus de temps à développer, c'est sûr, mais c'est avantageux au final.

      • [^] # Re: nn_lib & gmd

        Posté par  . Évalué à 3.

        Merci pour ta réponse.

        Je comprends surtout si c'est aussi peu de code pour nn_lib.

        Pour markdown je ne suis pas sûr de comprendre, la traduction markdown → html est faite dans gmic et pas dans une étape de construction ?

        On pouvait s'attendre à cette question :)

        Ce n'est pas du tout une critique, c'est simplement pour comprendre. Je n'ai pas d'usage de gmic (parce que je ne fais presque aucun traitement d'image à part du recadrage trivial de temps en temps), donc c'est forcément plus sur l'aspect code que je regarde le projet.

        https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

        • [^] # Re: nn_lib & gmd

          Posté par  (site web personnel) . Évalué à 7.

          Pour markdown je ne suis pas sûr de comprendre, la traduction markdown → html est faite dans gmic et pas dans une étape de construction ?

          La commande gmd2html de G'MIC permet de convertir du texte en format Markdown sous la forme de pages HTML. Elle peut s'utiliser comme ceci par exemple :

          $ gmic it monfichier.gmd gmd2html 0 ot output.html

          monfichier.gmd est un fichier en format G'MIC Markdown.
          C'est d'ailleurs comme ceci que les pages de tutoriel et de la documentation de référence sont générés par le script de build de G'MIC.

          De la même manière, la commande gmd2ascii permet de convertir le texte en Markdown sous la forme de texte ASCII (éventuellement coloré) pour affichage de l'aide sur le terminal. C'est typiquement ce qui est utilisé quand on demande l'aide à partir du terminal :

          $ gmic -h

          (aide globale), ou

          $ gmic -h blur

          (aide pour une commande particulière).

          Comme le parseur Markdown est maintenant directement intégré dans G'MIC, il peut être utilisé à la volée pour générer la doc pour l'affichage sur le terminal. C'est très pratique.

  • # Pourquoi 3.0 ?

    Posté par  (Mastodon) . Évalué à 5.

    Je n'ai vu nulle part dans la dépêche une justification du changement de version majeure. Il y en a une ?

    • [^] # Re: Pourquoi 3.0 ?

      Posté par  (site web personnel) . Évalué à 10. Dernière modification le 18 décembre 2021 à 16:10.

      Deux justifications :
      - La version d'avant était la 2.9.9, et on garde les numéros de version sur 3 chiffres.
      - Et comme on savait qu'on allait passer de la 2.9.9 à la 3.0.0, et que la 2.9.9 marchait bien, on a du coup prit le temps pour soigner particulièrement cette version 3.0.0, ce qui en fait effectivement une version majeure :)

      G'MIC est de toute façon un logiciel qui évolue constamment avec des sorties fréquentes (environ une tous les deux mois je dirais).

  • # Publications scientifiques

    Posté par  . Évalué à 6.

    Bonjour,

    Tout d'abord merci pour cette dépêche et la présentation des travaux réalisés.

    J'aurais une question, est-ce que les articles scientifiques dont sont tirés les algorithmes sont publiés quelques parts ? Si les résultats de certains algorithmes sont impressionnants, j'aimerais bien connaître leurs origines mathématiques. Surtout à une époque où tout le traitement d'images semblent uniquement neuronale.

    Merci.

    • [^] # Re: Publications scientifiques

      Posté par  (site web personnel) . Évalué à 7.

      C'est assez difficile d'apporter une réponse générale, car cela dépend vraiment des filtres. Quelquefois, un filtre né de l'implémentation stricte d'un papier, d'autres fois, c'est juste inspiré par des lectures de papier, et d'autre fois encore, c'est le fait d'avoir eu le temps de tester rapidement des idées originales.

      • [^] # Re: Publications scientifiques

        Posté par  . Évalué à 1.

        Donc, l'idéal est d'aller lire le code pour essayer d'en comprendre les maths derrière. Voir de chercher dans la littérature avec comme mot-clés le nom des effets ou filtres.

        Merci.

  • # Félicitation

    Posté par  . Évalué à 1. Dernière modification le 21 décembre 2021 à 08:58.

    C'est toujours un régal de lire les dépêches de G'MIC.

    Le filtre Details / Sharpen [Multiscale] est parfait pour moi, malgré les déjà nombreux filtres de réhaussement, il me fallait passer du temps avant de trouver les bons réglages. Là j'ai l'impression que c'est direct le résultat que je veux sur certaines images.
    J'ajouterai aussi le filtre des franges violettes (défaut de nombreux appareils photo).

    Petite question : les filtres sont pour la plupart algorithmiques, doit-on s'attendre à plus de filtre à base de réseau neuronal ?

    • [^] # Re: Félicitation

      Posté par  (site web personnel) . Évalué à 6.

      Merci pour le retour sympathique.

      Petite question : les filtres sont pour la plupart algorithmiques, doit-on s'attendre à plus de filtre à base de réseau neuronal ?

      Oui, on va essayer d'aller vers plus de filtres à base de réseau, c'était le but du développement de nn_lib.

  • # La syntaxe...

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 22 décembre 2021 à 09:56.

    Je suis le projet depuis longtemps, je l'ai utilisé à l'époque où c'était encore un énorme .h de 6 Mo.

    J'avais raté le passage au langage de script "gmic". Exemple :

    my_histogram :
    i[0] 256 # Create the target histogram
    repeat h y=$>
    repeat w x=$>
    val={i($x,$y)}
    =[0] {$val+1},$val
    done
    done
    C'est une "A quite naive way of doing" an histogramme. Qui comprend ce que fait le code d'un coup d'oeil ?!

    On dirait que l'on cherche à battre le coté write-only de Perl.

    On parle tout le temps de "software craftmanship" pour faire du code propre (clean code est une référence du domaine https://damien.pobel.fr/post/clean-code/ ) mais comment le faire avec ce genre d'expression ?

    J'imagine que le script est fait pour augmenter au maximum la productivité de l'auteur qui connait son sujet par cœur, mais ne pas avoir une écriture claire laisse sur la route un paquet de développeur. J'imagine en plus que ce genre de script doit pouvoir s'écrire assez facilement avec une syntaxe fonctionnelle (map, fold,…) plus classique.

    Ce n'est pas possible de collaborer avec des chercheurs en ergonomie sur le sujet ?

    "La première sécurité est la liberté"

    • [^] # Re: La syntaxe...

      Posté par  (site web personnel) . Évalué à 7.

      Je suis le projet depuis longtemps, je l'ai utilisé à l'époque où c'était encore un énorme .h de 6 Mo.

      Non, G'MIC n'a jamais été un gros .h de 6 Mo. Tu veux parler de CImg peut-être ? Ce n'est pas du tout le même projet.

      C'est une "A quite naive way of doing" an histogramme. Qui comprend ce que fait le code d'un coup d'oeil ?!

      Je ne sais pas où tu as pris cet exemple, mais il est obsolète.
      Aujourd'hui, on l'écrirait de manière équivalente, plutôt comme ça :

      my_histogram :
      256 eval.. ++i[#-1,i]

      Tu vas me dire que ce n'est pas tellement plus clair. Et je serai d'accord.
      Mais il faut bien comprendre que le but du langage G'MIC n'a jamais été d'être lisible, mais juste efficace et concis (ce dernier point n'étant pas forcément toujours compatible avec la clarté de lecture de code).

      En encore, ce "problème" se pose si, en tant que développeur, tu souhaites implémenter tes propres algorithmes de traitement personnalisés en langage G'MIC. Ca concerne au final assez peu de monde.
      Si, en tant qu'utilisateur de gmic en ligne de commande, tu souhaites juste utiliser les algorithmes existants, alors tu vas écrire des pipelines de commandes, beaucoup plus simples (pour l'exemple de l'histogramme ci-dessus, il faudrait juste utiliser la commande histogram :) ).

      Le langage G'MIC est un langage métier, très différent des langages "classiques" généralistes. Il a été imaginé pour créer des pipelines potentiellement complexes de traitement d'images, pas pour initier des gens à la programmation.
      C'est un peu comme si tu me disais que la syntaxe de sed n'est pas lisible pour le traitement des chaines de caractères : c'est vrai, c'est pas lisible, mais c'est concis et efficace. Et c'est utilisé par des milliers (millions) de personnes.
      Par ailleurs, si tu regardes du côté de la "concurrence" (ImageMagick), c'est exactement pareil (voir les exemples d'utilisation sur leur site : https://legacy.imagemagick.org/Usage/thumbnails/ ). Illisible pour le néophyte.

      J'imagine qu'on pourrait trouver plein d'autres exemples, avec l'utilisation de langages métiers très spécialisés dans leur domaine. Tiens au hasard, le SQL, j'ai jamais réussi à comprendre des requêtes de plus de deux lignes. C'est normal, c'est comme tout, il faudrait juste s'y mettre (mais je n'en ai jamais eu besoin pour ma part).

      Pour ceux qui auraient besoin de se mettre au langage G'MIC, on a des pages de référence et de tutoriels pour cela. Quelques développeurs s'y sont mis et proposent aujourd'hui des filtres personnalisés pour G'MIC.

      Mais je dirais que dans notre projet, on veut permettre surtout à des utilisateurs d'accéder facilement à des ensembles de filtres et de traitements d'images, plutôt que de rallier des développeurs à l'utilisation du langage G'MIC.
      On ne vise pas majoritairement le public des développeurs.

      • [^] # Re: La syntaxe...

        Posté par  (site web personnel) . Évalué à 5.

        Je ne sais pas où tu as pris cet exemple, mais il est obsolète.
        ici : gmic.eu/reference/managing_3d_vector_objects.html

        Dans les exemples pour utiliser les object 3D pour faire du rendu 2D (ce qui a l'air d'être une feature assez énorme en fait).

        mais juste efficace et concis (ce dernier point n'étant pas forcément toujours compatible avec la clarté de lecture de code).

        On est d'accord la dessus.

        Le langage G'MIC est un langage métier, très différent des langages "classiques" généralistes. Il a été imaginé pour créer des pipelines potentiellement complexes de traitement d'images, pas pour initier des gens à la programmation.

        "Clean code" n'a rien à voir avec le fait d'apprendre à programmer mais sur la maintenance sur le long terme de code potentiellement énorme ou complexe, et pour la transmission de connaissance entre développeurs.

        sed et imagemagick

        Ils sont aussi ignoble à lire, ce n'est pas une raison de faire pareil. L'auteur de Perl n'a jamais compris que sa feature la plus populaire soit la moins lisible (les regexp, des "Modem Line Noise" pour certain).

        J'imagine qu'on pourrait trouver plein d'autres exemples, avec l'utilisation de langages métiers très spécialisés dans leur domaine.

        Oui, je connais la hype des DSL. Pour en avoir subi plusieurs, c'est surtout des mauvais langages de programmation incomplet qui pourraient se remplacer avec des appels de fonctions dans n'importe quel langage avec bien plus de souplesse (cela ressemble aussi au débat metamodèle vs bibliothèques).

        le SQL, j'ai jamais réussi à comprendre des requêtes de plus de deux lignes.

        Moi, j'en ai écrit de plusieurs centaines de lignes, et je confirme que c'est un langage ignoble mais puissant, mais ignoble.

        Mais je dirais que dans notre projet, on veut permettre surtout à des utilisateurs d'accéder facilement à des ensembles de filtres et de traitements d'images, plutôt que de rallier des développeurs à l'utilisation du langage G'MIC.
        On ne vise pas majoritairement le public des développeurs.

        C'est dommage la lib nn semble avoir un potentiel énorme. Rendre un code lisible diminue l'intéret d'une documentation. J'imagine qu'il doit être parfaitement possible d'avoir les mêmes concepts que le code actuel et d'avoir une syntaxe plus "littérale" et avoir un convertisseur d'une syntaxe dans l'autre.

        "La première sécurité est la liberté"

        • [^] # Re: La syntaxe...

          Posté par  (site web personnel) . Évalué à 6.

          J'ai un raisonnement différent : si dans l'histoire de l'informatique, des langages jugés "peu lisibles" ont été créés, existent depuis des dizaines et des dizaines d'années, et continuent à être utilisés, c'est pas juste parce que les auteurs de ces langages sont pas doués et n'ont pas compris qu'un langage de programmation, ça devait être "lisible" et "verbeux".

          C'est plus probablement parce que de tels langages ont des avantages tels (concision, rapidité, facilité d'interprétation, et j'en passe …) que l'inconvénient du peu de lisibilité (et encore, vu par le prisme du non-initié) passe clairement au second plan.

          Ayant pratiqué le traitement d'images en C++ depuis plus de 20 ans, je peux affirmer que programmer en langage G'MIC me fait gagner un facteur de temps d'au moins x10 sur le développement de prototypes et de nouveaux algorithmes, par rapport au C++ (et je pratique régulièrement les deux). Et apparemment, la maintenance et l'évolution de l'ensemble du code écrit en langage G'MIC n'a pas vraiment posé de problèmes depuis le début du projet, en 2008 (et cela, malgré le fait que les spécifications du langage ont changé entre temps!). Je ne souhaiterais vraiment pas être obligé de réécrire ces algos de manière équivalente en C++, ça me semblerait vraiment lourd, chronophage et peu pratique. Je peux même affirmer que si tous les filtres de G'MIC avait été écrit en C++, il y en aurait probablement 2 ou 3 fois moins disponibles.

          Par ailleurs, je pense que quelqu'un de motivé, qui a un intérêt à utiliser ce type de langages métiers n'aura pas forcément plus de difficulté qu'avec un autre langage. Comme je l'ai écrit tout à l'heure, il suffit d'avoir la volonté de s'y mettre et l'ouverture d'esprit pour accepter un paradigme de programmation un peu différent. Avec un peu d'expérience, tout langage devient lisible pour celui qui le maîtrise un tant soit peu. C'est valable pour tous les langages cités précédemment (ajoutons l'ASM en passant, ayant commencé le Z80 assez jeune, sur Amstrad CPC, j'ai eu aussi une expérience similaire pour ce "langage"). On ne peut pas attendre que tous les langages ressemblent au Basic Python (ça serait d'une tristesse!).

          La lisibilité d'un langage, ça peut être bien. Mais prendre cette propriété seule pour juger du niveau d'aboutissement ou de la praticité d'un langage, c'est vraiment pas une bonne idée (pour pas dire que c'est foireux).

          • [^] # Re: La syntaxe...

            Posté par  (site web personnel) . Évalué à 4.

            La lisibilité d'un langage, ça peut être bien. Mais prendre cette propriété seule pour juger du niveau d'aboutissement ou de la praticité d'un langage, c'est vraiment pas une bonne idée (pour pas dire que c'est foireux).

            Je pense que tu es dans le cas ultime ou le langage est adapté au hardcore user les plus extrêmes : les créateurs du langage.

            On ne peut pas attendre que tous les langages ressemblent au Basic Python (ça serait d'une tristesse!).

            python, java, ocaml, rust, C, golang, Javascript, il y a plein de possibilités. Si gmic était une lib pour Python, il aurait 100x plus d'utilisateurs, c'est sûr (et je n'aime pas python).

            Il faut voir si vous avez un AST interne pour le langage, mais je pense qu'il doit être possible de garder exactement les mêmes concepts et 2 syntaxes.

            "La première sécurité est la liberté"

            • [^] # Re: La syntaxe...

              Posté par  (site web personnel) . Évalué à 6.

              Je pense que tu es dans le cas ultime ou le langage est adapté au hardcore user les plus extrêmes : les créateurs du langage.

              Si tu prends l'exemple de sed : les millions de gens qui utilisent sed de temps en temps ne sont pas tous les créateurs du langage associé, ni des hardcore users (loin de là!). Pour autant, c'est tellement plus pratique d'utiliser sed pour faire un remplacement rapide de texte dans un fichier, que de dégainer n'importe quoi d'autre…

              Ces utilisateurs là (je m'inclus dedans) ont juste pris le temps de regarder comment combler un besoin spécifique avec sed, et ça marche pour eux. A la limite, il y a même pas besoin de comprendre la syntaxe en profondeur, mais c'est pas grave, ça fait le taf efficacement. Et on se doute qu'on peut faire des choses très complexes avec.

              python, java, ocaml, rust, C, golang, Javascript, il y a plein de possibilités. Si gmic était une lib pour Python, il aurait 100x plus d'utilisateurs, c'est sûr (et je n'aime pas python).

              Le langage G'MIC rajoute une de ces possibilités dans ta liste (et si tu as lu la dépêche, tu as vu qu'il y a un début de binding G'MIC pour Python qui existe maintenant).

              Un langage informatique a toujours plusieurs niveaux d'utilisation et plusieurs niveaux d'utilisateurs. C'est illusoire d'avoir un avis tranché et pertinent sur un langage de programmation sans être passé par toutes les catégories d'utilisateurs (impossible dans les faits). En général, il vaut mieux faire confiance aux créateurs du langage, qui ont réfléchi à la question plus longuement.

              Perso, il ne me viendrait pas à l'idée de décréter que SQL c'est mal, parce que je comprend pas facilement ce qui se passe lorsque je lis une requête. Ca serait vraiment naïf de ma part (ou pédant au choix). Au contraire, je me dis plutôt que si des gens qui sont experts en BDD ont élaboré le langage de cette façon, c'est surement qu'il y a une bonne raison (que je ne suis pas apte à comprendre, avec le niveau en BDD que j'ai).

              Après, évidemment rien n'empêche d'avoir son propre avis.
              Mais connaissant bien le domaine du traitement d'image, les syntaxes d'ImageMagick/GraphicsMagick ou de G'MIC sont tout à fait justifiables, pour l'usage pour lesquels ils ont été créés.

              • [^] # Re: La syntaxe...

                Posté par  (site web personnel) . Évalué à 2.

                sed pour faire un remplacement rapide de texte dans un fichier, que de dégainer n'importe quoi d'autre…

                J'utilise Perl à la place, qui permet encore plus de chose. Mais ce n'est pas le sujet. Sed a été créé à une époque, où la puissance CPU et la RAM étaient comptés, et depuis sa sortie, il y a beaucoup d’évolution dans la science des langages.

                En général, il vaut mieux faire confiance aux créateurs du langage, qui ont réfléchi à la question plus longuement.

                Sans doute. Mais je vous conseil de lire "clean code" pour voir que c'est difficile à faire avec votre langage. La définition de ce que l'on appelle du code propre à bien évoluer et à commencer à se définir plus clairement depuis 10 ans. Robert C. Martin est un des précurseurs du domaine ( http://cleancoder.com/ )

                Le concepteur du langage doit gérer un ensemble de contrainte parfois contradictoire. Le C et le C++ ont la structure de leur fichier faite pour réduire la taille de l'unité de compilation, ce n'est plus aussi pertinent aujourd'hui.

                Perso, il ne me viendrait pas à l'idée de décréter que SQL c'est mal, parce que je comprend pas facilement ce qui se passe lorsque je lis une requête.

                La clarté d'une syntaxe d'un langage ne contraint pas ce qui se passe à la couche suivante. Le SQL pourrait avoir les mêmes fonctionnalités et être bien plus compréhensible. Je n'ai pas dit que c'était facile, je dis que dans l'état actuel des choses, on devient chauve à écrire des longues requêtes et que la plus part des mortels utilises des ORM pour éviter de le faire.

                Ca serait vraiment naïf de ma part (ou pédant au choix). Au contraire, je me dis plutôt que si des gens qui sont experts en BDD ont élaboré le langage de cette façon, c'est surement qu'il y a une bonne raison (que je ne suis pas apte à comprendre, avec le niveau en BDD que j'ai).

                Ce n'est pas parce que l'on est pas coiffeur que l'on ne peut pas critiquer une coiffure, ou critiquer une maison, si l'on n'est pas maçon. On peut justement critiquer le SQL car ces utilisateurs ne sont pas majoritairement des experts en BDD et en théorie des ensembles.

                L'utilisabilité d'un logiciel et les principes d'ergonomie existent aussi pour les langages et ne se limitent pas aux IHM (principe de moindre surprise, principe de moindre mémorisation, nom prononçable,…).

                "La première sécurité est la liberté"

                • [^] # Re: La syntaxe...

                  Posté par  (site web personnel) . Évalué à 7.

                  Ce n'est pas parce que l'on est pas coiffeur que l'on ne peut pas critiquer une coiffure, ou critiquer une maison, si l'on n'est pas maçon

                  Comme je l'ai déjà écrit, tout le monde peut évidemment avoir son avis.
                  Mais la pertinence d'un avis est à moduler en fonction de l'expérience de la personne qui le formule dans le domaine concerné. Mon avis sur les coupes de cheveux, j'espère bien qu'aucun coiffeur n'en tiendra jamais compte.

                  L'utilisabilité d'un logiciel et les principes d'ergonomie existent aussi pour les langages et ne se limitent pas aux IHM (principe de moindre surprise, principe de moindre mémorisation, nom prononçable,…).

                  A ce stade, plutôt que nous commentions ad vitam æternam, et si tu as le temps pendant les vacances de fin d'année, essaye de te mettre au langage G'MIC pour des problématiques de traitement d'images, compare avec l'existant pour faire le même genre de tâches, et peut-être changeras-tu d'avis ? (ou pas…).
                  Pour ma part, étant en vacances, je m'arrêterai là.
                  Bonnes fêtes à tout le monde.

                  • [^] # Re: La syntaxe...

                    Posté par  (site web personnel) . Évalué à -8.

                    Si tu n'a jamais eu de coupe raté chez le coiffeur, tu as bien de la chance.

                    C'est bizarre que tu considères en tant que chercheur en traitement d'image et du signal, que tu puisses magiquement aussi être chercheur en théorie des langages et en ergonomie.

                    J'ai une petit idée duquel de nous deux est présomptueux.

                    Bonnes fêtes à tous, j’arrête là aussi.

                    "La première sécurité est la liberté"

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.