#liste_articles {display:block}

TUIO

jeudi 6 mai 2010

 

TUIO

TUIO ou protocole pour les dispositifs multi-touch

TUIO est un protocole réseau pour les interfaces multitouch (voir tuio.org pour plus d’informations).

Dans le cadre de la table multitouch d’Erasme :

Un certain nombre d’outils ont été développés afin de générer du TUIO à partir de notre table multitouch pour générer les entrées multitouch des applications développées par Erasme ou par d’autres personnes.

Le protocole TUIO est assez complet et intègre notamment la détection des objets (via une sorte de code barre 2D). Les outils d’Erasme ne prennent pas en charge tout cela mais uniquement la détection des doigts via le 2Dcur du protocole TUIO.

Nous avons utilisé le framework multimédia Gstreamer pour l’acquisition vidéo jusqu’à la génération des paquets TUIO. La gestion du TUIO que nous avons développée est donc sous forme de nouveaux plugins Gstreamer pour compléter ce qui manquait à Gstreamer.

Nous utilisons principalement la distribution Ubuntu dans nos dispositifs. Si vous utilisez aussi cette distribution Linux, vous pouvez trouver tous nos outils dans notre dépôt Ubuntu ; cela vous facilitera les installations. Pour cela, vous pouvez vous rendre sur le site http://packages.erasme.org.

Le principe

Les outils

Sous Linux, il existe un framework pour gérer les contenus multimédia. Ce framework, c’est Gstreamer.

Gstreamer permet de construire des pipelines pour décoder des vidéos, du son, faire de l’acquisition, du rendu, des conversions...

Pour cela, Gstreamer utilise le principe des plugins que l’on peut chainer les uns avec les autres.

Nous avons donc décidé de fournir des plugins pour Gstreamer, afin de fournir ce qu’il manquait pour détecter des blobs et générer du TUIO afin de piloter des applications multi-touch.

gstreamer0.10-tuio

gstreamer0.10-tuio

C’est le principal plugin pour la détection des blobs et l’émission du TUIO. Il prend en entrée une image en dégradé de gris et génère en sortie des émissions TUIO.

Il prend aussi en paramètre une matrice de transformation pour corriger les coordonnées des doigts et obtenir les coordonnées dans le repère de TUIO.

gstreamer0.10-opencv

gstreamer0.10-opencv

Ce plugin contient notamment l’élément undistort qui permet de corriger les distorsions de la caméra.

gstreamer0.10-erasmefilter

gstreamer0.10-erasmefilter

Ce plugin contient notamment l’élement removebg qui permet de supprimer le fond statique dans une vidéo.

Il contient aussi l’élément threshold qui permet de faire du seuillage sur une vidéo en dégradé de gris.

gstreamer0.10-dc1394

gstreamer0.10-dc1394

Ce plugin contient l’élément eradc1394src qui permet de récupérer une vidéo à partir d’une caméra DC 1394. Par rapport à l’élément déjà disponible dc1394src, il permet de prendre en charge le Format 7 des caméras.

Les utilisations

Normalement, à partir des éléments de Gstreamer, on peut construire des applications pour gérer la détection TUIO. Dans l’idéal, il faudrait faire un démon qui aurait en charge cela ; nous n’avons pas fait cela pour l’instant.

Gstreamer fournit un outil pour créer des pipelines et les exécuter en lignes de commande. C’est ce que nous avons fait jusqu’à présent.

Voici donc quelques exemples d’utilisation :

Affichage d’une caméra DC 1394

gst-launch eradc1394src shutter=526 gain=64 exposure=62 brightness=255 \
! 'video/x-raw-gray,framerate=(fraction)60/1,width=752,height=480' \
! ffmpegcolorspace ! xvimagesink

Affichage d’une caméra DC 1394 avec correction de la distortion

gst-launch eradc1394src shutter=526 gain=64 exposure=62 brightness=255 \
! 'video/x-raw-gray,framerate=(fraction)60/1,width=752,height=480' \
! scale ! 'video/x-raw-gray,width=376,height=240' \
! undistort linearinterpolate=true \
'distortion=-0.261753,0.178672,-0.000276,-0.002299' \
"intrinsic=\
288.50714,000.00000,192.51280,\
000.00000,287.78592,117.67105,\
000.00000,000.00000,001.00000" \
! ffmpegcolorspace ! xvimagesink

Chaine complète de détection TUIO

gst-launch eradc1394src shutter=526 gain=64 exposure=62 brightness=255 \
! 'video/x-raw-gray,framerate=(fraction)60/1,width=752,height=480' \
! scale ! 'video/x-raw-gray,width=376,height=240' \
! undistort linearinterpolate=true \
'distortion=-0.261753,0.178672,-0.000276,-0.002299' \
"intrinsic=\
288.50714,000.00000,192.51280,\
000.00000,287.78592,117.67105,\
000.00000,000.00000,001.00000" \
! removebg \
! threshold level=18 \
! blobstotuio address=127.0.0.1 port=3333 \
matrix=\
0.00263,-0.00006,-0.01618,\
-0.00012,-0.00482,1.08448,\
-0.00016,-0.00005,1.00000 \
surface-min=3 surface-max=150 distance-max=40 

Ce qu’il reste à faire

Pour l’instant, ce n’est pas très convivial comme usage. Il faudrait donc faire un démon pour gérer le TUIO, mais surtout un outil pour facilement générer les paramètres de détection.

Nous avons deux programmes en ligne de commande : un pour générer la correction de la distorsion, un autre pour générer la matrice de correction de la position des blobs pour le TUIO.

Vous trouverez ces outils dans l’archive cameracalibration-20100506.tar.gz attaché à cette article.

Documents :

par Daniel Lacroix