Journal Support de la webcam dans G'MIC 1.4.0.0

Posté par  (site web personnel) .
29
6
sept.
2010
Un peu plus d'un mois depuis la dernière version (1.3.9.0), voici une nouvelle release (1.4.0.0) de G'MIC (http://gmic.sourceforge.net), ce système de traitement d'image pouvant s'utiliser en ligne de commande, ou sous forme (plus limitée) d'un greffon pour GIMP.
Une des nouveautés intéressante de cette version 1.4.0.0 est le support de la webcam (via la bibliothèque OpenCV) : G'MIC peut maintenant acquérir des images (ou des séries d'images) de votre caméra, les traiter, les afficher, et faire un peu n'importe quoi avec. C'est très commode si l'on veut créer de petites démos interactives, pour illustrer l'effet de tel ou tel traitement/filtre/effet, à des fins pédagogiques par exemple.

Je vous propose ici quelques démos plus ou moins compliquées d'utilisation de G'MIC avec la webcam. Pour en profiter, il vous faut installer les paquets 1.4.0.0 disponibles pour Debian/Ubuntu (méthode rapide), ou recompiler à partir des sources (méthode très lente), disponibles à cette adresse : http://sourceforge.net/projects/gmic/files/
Je crois qu'il y a déjà un paquet 1.4.0.0 pour Archlinux également.
L'idée, c'est de montrer quelques possibilités de ce sympathique logiciel, et d'essayer de vous persuader qu'on peut faire pas mal de choses avec (oui, oui, il faut absolument l'utiliser !)

Pour commencer, voyons si la webcam fonctionne :
gmic -apply_camera(screenshot)

Si vous voyez votre bouille s'afficher dans une nouvelle fenêtre, tout va bien. Sinon, vous pouvez passer au journal suivant :)
Cette nouvelle commande '-apply_camera' de G'MIC peut prendre comme argument une commande ou une série de commandes qui seront appliquées à chaque frame récupérée de la caméra. Par exemple :
gmic -apply_camera \"-blur 10\"(screenshot)

va afficher des images de la webcam lissées par un filtrage gaussien de variance 10 (les '\' devant les double quotes sont nécéssaires pour éviter que bash n'enlève ces dernières), sous réserve que votre machine soit suffisamment rapide (G'MIC est un langage interprété, ne l'oublions pas).

On comprend dès lors l'intérêt de la chose, car on va pouvoir spécifier des commandes potentiellement compliquées comme argument de "-apply_camera".
Par exemple, un effet psychédélique basé sur des effets mirroir peut être facilement obtenu avec :
gmic -apply_camera \"--mirror x --mirror y -+ -/ 4\"(screenshot)

Le pipeline de traitement étant spécifié en langage de script, il est préférable d'avoir une machine relativement puissante pour espérer faire du temps réél (G'MIC n'utilise pas d'accélération liée aux GPU par exemple). Par exemple, il est probable que l'effet suivant commence à mettre votre machine mal à l'aise :
gmic -apply_camera \"-stencilbw ,\"(screenshot)

Comme il est possible de faire beaucoup de choses sympathiques avec G'MIC, il est donc possible de faire beaucoup de démos sympathiques avec la webcam. Je vous livre ici quelques exemples plus "compliqués" (à noter que c'est compliqué car c'est réalisé 'from scratch', il suffit de définir des nouvelles commandes personnalisées pour rendre ça tout de suite moins effrayant). C'est juste pour vous donner quelques exemples possibles.

(1) Visualisation de l'image comme une surface élevée en 3D :
gmic -apply_camera \"--r[-1] 64,64,1,3 -blur 0.6 -elevation3d[-1] 0.09 -c3d[-1] -*3d[-1] 6 -rot3d[-1] 0,0,1,"{@|/100}" -rot3d[-1] 1,0,0,30 -m3d 3 -object3d[-2] [-1],50%,75%,0,0.8 -rm[-1]\"(screenshot)

Pour ceux qui n'ont pas installés G'MIC, je rappelle que tout ceci bouge en temps réel en fonction de ce qui se passe devant la caméra. C'est sympathique non ?

(2) Ajout d'un cube mappé qui bouge :
gmic -apply_camera \"--r 50%,50%,1,3,3 -equalize[-1] 256 -n[-1] 0,255 -imagecube3d[-1] -*3d[-1] 200 -rot3d[-1] 1,1,2,"{@|/30}" -rot3d[-1] 2,1,1,"{@|/50}" -db3d 0 -m3d 3 -object3d[-2] [-1],"{50+30*cos(@|/800)}%,{50+30*sin(@|/760)}%",0,0.8 -rm[-1]\"(screenshot)
(Ca ne sert à rien, mais c'est joli).

(3) Visualisation des 3 composantes (R,G,B) d'une image :
gmic -apply_camera \"-r 50%,50% --s c -channels[-2] -1,0 -channels[-1] -2,0 -append_tiles 2,2 -line 0,50%,100%,50%,1,0 -line 50%,0,50%,100%,1,0\"(screenshot)

(4) Visualisation des variations (en échelle log) :
gmic -apply_camera \"-luminance -r 50%,50% -gradient_norm -+ 1 -log -t 10%,1 -n 0,255 -r 200%,200%\"(screenshot)
(alien mode detected)

(5) Visualisation d'un profile d'intensité RGB (ligne du milieu) :
gmic -apply_camera \"-r 80%,80%,1,3,1 --lines 50% -s[-1] c -graph[-4] [-3],1,0,255,0,1,255,200,200 -graph[-4] [-2],1,0,255,0,1,200,255,200 -graph[-4] [-1],1,0,255,0,1,200,200,255 -rm[-3--1] -line[-1] 0,50%,100%,50%,0.3,255 -axes[-1] 0,100,100,0,1,255 -grid[-1] 32,32,0,0,0.1,0xCCCCCCCC,255\"(screenshot)
(ou comment montrer qu'une image c'est aussi un signal)

(6) Effet 'eau' :
gmic -apply_camera \"-r 75%,75%,1,3 -water 10\"(screenshot)
(pour faire plaisir à mon poisson)

(7) Enfin, (et encore un peu expérimental), en utilisant la fonction définie dans ce fichier : http://www.greyc.ensicaen.fr/~dtschump/lfr/track.gmic , et en essayant :
gmic track.gmic -track(screenshot)
on peut même faire un peu de suivi d'objets par la couleur (il faut d'abord cliquer sur l'objet à suivre pour donner la couleur de référence). Ici, c'est intéressant, car ça illustre le fait que G'MIC puisse intéragir facilement avec l'utilisateur. Ce dernier effet est *très* dépendant du type de caméra et des conditions de luminosité, mais ça marchotte un peu (assez en tout cas, pour illustrer le principe de base du tracking).

Voilà, j'ai essayé d'illustrer le fonctionnement de webcam dans G'MIC avec des exemples assez variés. On peut penser à tout plein d'autres choses/démos. Si vous avez des idées, n'hésitez surtout pas à en faire partager tout le monde, il est peut être possible de le faire en G'MIC de manière très rapide.

En espérant vous avoir donné envie de l'installer et d'en connaitre davantage.

Bon appétit !
  • # GIF ou MNG

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

    Étant donné la nature dynamique de la webcam, serait-il possible d'avoir des images en GIF ou MNG ou tout autre format adapté pour se rendre compte de cette dynamicité ?

    En tout cas, bravo, les screenshots sont très bien, et le logiciel doit l'être également (même si je n'en sais rien vu que je ne l'ai jamais utilisé, mais j'adore suivre les nouvelles de ce logiciel). Et le poisson ressemble drôlement à un cochon de face :P
  • # syntaxe...

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

    La syntaxe du fichier track.gmic est horrible (?). Cela ressemble à du Perl mais en pire.

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

    • [^] # Re: syntaxe...

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

      Merci de ton commentaire parfaitement impartial et tout à fait utile !
      • [^] # Re: syntaxe...

        Posté par  . Évalué à -2.

        En même temps, vu son pseudo, on se demande si c'est pas une blague....
        • [^] # Re: syntaxe...

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

          Franchement, le délit d'opinion sur linuxfr, c'est vraiment insupportable.
          • [^] # Re: syntaxe...

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

            Avoir une opinion c'est bien, l'argumenter un peu c'est encore mieux.
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 3.

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

            • [^] # Re: syntaxe...

              Posté par  . Évalué à -6.

              Alo alo j ss 1 prof 2 faq é 1 shèresheure j ss + for ke vou lol
              • [^] # Re: syntaxe...

                Posté par  . Évalué à 0.

                Cette remarque, malgré son aspect sommaire, dénonce l'aspect paternaliste et jesaistoutmieuxquevous-iste de l'ensemble des réponses, non seulement de David Tschumperlé, mais aussi de celles de la majorité des universitaires fréquentant le site (certains se dissimulant honteusement derrière des prix d'aigreur d'or et autres râleurs de platine).
                Vendredi, c'est permis.
                • [^] # Re: syntaxe...

                  Posté par  . Évalué à 3.

                  tu serais pas un peu aigri toi ?

                  tu devrais ptet baiser un bisounours, ou alors ecrire un journal polémique (qui raconterait l'avortement d'un faf de radio courtoisie) ptet ca te détendrait.

                  sinon pour ton apparente aversion des universitaires j'ai le numéro de tel de Mireille Dumas stuveux.
                • [^] # Re: syntaxe...

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

                  Ha oui c'est vrai, j'ai pas remarqué que j'avais été odieux avec lui, excuse moi platement !
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 1.

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

              • [^] # Re: syntaxe...

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


                (track v ((h 0) (s 0) (v 0))
                 (do-while
                  (begin
                   camera
                   (blur -1 1) (n -1 0 255) (rgb2hsv -1))
                   (shared -1 0 0) (n -1 0 100) (rm -1)
                   (shared -1 1 1) (n -1 0 16) (rm -1)
                   (shared -1 2 2) (n -1 0 0) (rm -1)
                   (if (@{!,b}\&1)
                    (begin
                     (set! x @{!,x})
                     (set! y @{!,y})
                     (set! h @{-1,($x,$y,0,0)})
                     (set! s @{-1,($x,$y,0,1)})
                     (set! v @{-1,($x,$y,0,2)}))
                    (select_color -1 3 $h $s $v)
                    (erode -1 8)
                    (dilate -1 8))
                    (w2 -1)
                    ...))


                Avec du code à la scheme/lisp (pourquoi pas du scheme, avec Guile, le langage d'extension GNU ?), on doit pouvoir faire un truc plus lisible, et surtout, plus facile à éditer/créer.
                On peut même imaginer des bonnes macros pour faciliter la factorisation et génération de scripts.


                >> Donc, pourquoi faire mieux si personne n'en a l'utilité.

                Parce que faire mieux peut inciter les gens à s'amuser avec.
                • [^] # Commentaire supprimé

                  Posté par  . Évalué à 2.

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

              • [^] # Re: syntaxe...

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

                Mais si justement il y a a discuter.
                Je trouve pas la version du commentaire ci dessous plus lisible pour ma part. G'MIC est effectivement basé sur une syntaxe type 'ligne de commande', et je vois pas trop le problème (si pour toi c'est un problème, passe sous Windows).

                Tes préjugés c'est bien gentil, mais comme le post précédent, tu n'as pas d'argumentation ("y a pas à discuter" c'en est pas une), ça vaut rien, et tu ferais mieux de te taire sinon ça fait du bruit pour rien. C'est du niveau de "Le PSG ça pue" ou "Aux chiottes l'OM".

                Quand on a rien à dire de plus intéressant que ce que tu viens de dire, on s'abstient.
                • [^] # Re: syntaxe...

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

                  Désolé d'avoir été un peu abrupte, j'aimais bien le concept "simple" d'usage de CImg.h. C'était limpide d'usage.

                  Là, cela devient vraiment cryptique. Je veux bien que la ligne de commande soit puissante, mais de là à rajouter des notions de boucle et de conditionnel... Si on reste en Unix, les pipes et le langage shell sont fait pour cela.

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

                • [^] # Commentaire supprimé

                  Posté par  . Évalué à 2.

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

  • # Avatar

    Posté par  . Évalué à 3.

    Voilà un journal qui donne une idée pour créer son avatar !!!

Suivre le flux des commentaires

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