Fid_abs : pour une gestion simplifiée des messages Tuio2D

Introduction 

ReactTIVision , au coeur de la fameuse ReactTable, est un programme téléchargeable gratuitement qui permet, à l’aide d’une caméra, de détecter  le positionnement  de marqueurs fiduciaires attachés à des objets physiques disposés sur une surface, et de s’en servir comme éléments d’interface pour commander d’autres applications.
Touchlib et tBeta, développés par le NUIGROUP, permettent de créer une interface multitouch à peu de frais avec une webcam, en fournissant des infos sur le positionnement de doigts sur une surface.
Les infos générées par ces modules sont transmises sous forme d’un flux de messages (protocole OSC, mais aussi MIDI) et sont reçues par l’application cliente, laquelle se charge de générer sons / images / retour vidéo en fonction des données reçues.

fid_abs a pour objectif de faciliter l’exploitation pertinente de ces données dans l’environnement de programmation Pure data.
Voici ci-dessous quelques-unes des problématiques à traiter.
Leur mise en pratique fera l’objet d’un workshop que j’animerai à Mains d’oeuvres dans le cadre du centre de ressources Art Sensitif les 7 et 8 mars 2009.

Mapping simple 

On peut très facilement extraire les infos de positionnement (coordonnées) un objet / blob et leur faire correspondre un paramètre midi dans un logiciel comme live, par exemple, en définissant un mapping simple (exemple : position en x, entre 0 et 1 <=> panoramique d’un son, entre 0 et 127)

Interactions complexes 

On se propose ici de développer une application cliente dans Pure Data, et on souhaite aller un peu plus loin que de simples relations de mapping : on souhaite que les objets inteargissent entre eux, comme dans l’exemple de la ReactTable.
On se positionne alors dans une approche « palette d’objets / palette d’outils appliqués à ces objets ».
(par exemple, un objet est un sample, un premier outil permettra de raccoucir ce sample, un deuxième outil permettra d’en modifier la vitesse de lecture. Ces outils pourront interagir avec d’autres objets-samples)

Cahier des charges pour fid_abs

En terme de traitement des données brutes issues des modules TouchLib ou ReacTIVision, des besoins particuliers se font ressentir, besoins auxquels la bibliothèque d’abstraction fid_abs doit répondre :

  • Disparitions intempestives :
    En cas de disparition intempestive d’un objet (blob ou tag), il faut être capable de détecter cette disparition intempestive et de faire le lien entre la réapparition d’un objet et la disparition du précédent.
  • Tracking d’objet avancé
    En fonction des besoins, permettre un tracking d’objet sur mesure, plus ou moins sensible.
    (ex : déplacement rapide d’un blob avec disparitions fugitives en cours de déplacement)
  • Classes d’objets :
    Très vite, on éprouve le besoin d’associer des fonctionalités/comportements différents aux divers objets disposés sur la surface de contrôle (exemple : contrôle de volume / contrôle de luminosité). Il est alors possible de définir des classes différentes d’objets, chaque événement au sein d’une classe produisant un traitement approprié.
    La séparation en classes est très facile avec ReacTIVision, il suffit d’affecter des classes distinctes à différentes plages de numéros fiduciaires.
    Avec TouchLib, la définition de classes est moins immédiate. Elle devra s’appuyer sur le contexte d’apparition d’un blob (au voisinage d’un autre, au voisinage d’un marqueur fiduciaire, etc…)
  • Gestion des relations entre 2 objets :
    proximité, distance, orientation d’un objet par rapport à un autre.

Des fonctionnalités plus avancées sont également souhaitables.

  • Gestion des instances multiples d’un même marqueur fiduciaire
    Lorsqu’un même marqueur fiduciaire est présent plusieurs fois dans le champ de la caméra, il faut mettre en oeuvre un mécanisme d’identifiant unique.
  • Intégration simultanée possible de messages issus de ReacTIVision et de TouchLib, et / ou d’autres modules/périphériques d’entrée (wiimote, palette graphique, écran tactile, lemur, ArtToolKit, StudierStube, Lipiti, ainsi que des modules externes propres à Pure Data : pix_multiblob, pix_fiducialtracker …)
    Définir des classes différentes pour chaque type de périphérique d’entrée et faire interagir ces classes

Gestion événementielle

En gros, il faut traiter 3 types de message (ou événements), aussi bien pour ReacTIVision que pour TouchLib :

  • message de type add <id>
  • message de type update <id> <infos de positionnement>
  • message de type remove <id>

<id> correspond à un numéro d’identifiant, qui est incrémenté et unique pour chaque blob détecté (TouchLib) ou qui correspond au numéro du tag fiduciaire (ReacTIVision).