Manipulons une interface virtuelle, à mains nues !

Natural User Interface

mai
22
Posted by gduhamel at 8:36

L’interaction utilisateur naturelle avec un environnement virtuel est un autre élément auquel je prévoyais de m’intéresser. Aujourd’hui, les dispositifs tactiles et la reconnaissance de mouvement nous rapprochent de l’information en la rendant plus palpable et plus « humainement » atteignable.
Malgré tout, le visuel reste identique, enfermé dans les deux dimensions de l’écran qui le retranscrit.

Dans un contexte où l’information se superpose au regard de l’utilisateur, il est logique d’adopter également son point de vue lorsqu’il est question d’interaction. Ce que l’on recherche n’est donc plus un « blob » sur une surface tactile mais un repère dans l’espace.

L’objectif de cette application est la manipulation d’éléments de réalité augmentée à partir d’un dispositif de type lunette. A l’aide d’une camera percevant les mouvements de l’utilisateur, celui-ci doit pouvoir agir sur l’interface virtuelle.

Détection d’un repère

J’ai pris le parti de réutiliser la détection de forme bricolée le mois passé pour matérialiser la gestuelle.
Principal avantage : la détection est très tolérante dans la reconnaissance de la forme. La main peut être légèrement inclinée, d’un côté ou de l’autre, en avant ou en arrière. Elle peut être plus large ou plus longue, et même d’une autre couleur. En somme cette méthode est adaptée pour différents utilisateurs. La seule nécessité est de reproduire un geste déterminé à l’avance.

Lorsque ce geste est détecté, le logiciel essaie de déterminer s’il s’agit bien de l’élément recherché et non d’un faux positif. Et si la forme est suffisamment ressemblante, il calcule l’emplacement précis correspondant au bout des doigts.

Picking

Sans doute la partie la plus technique, et néanmoins la plus courte.
Chaque élément virtuel présenté à l’utilisateur est connu par le système en tant qu’une série de coordonnées dans l’espace. Une fois l’étape précédente résolue, on connait la position de l’interaction au sein de l’image calculée (le lieu « touché » par l’utilisateur).
Le problème devient alors purement géométrique :

  • Calcul du vecteur modélisant la direction de l’interaction
  • Recherche d’une intersection avec l’un des plans connus

On identifie alors un (ou plusieurs) élément situé sur le chemin du vecteur.

Différentes interactions

Dans l’exemple développé et dont les résultats sont en vidéo plus bas, j’ai mis en œuvre deux interactions simples. La sélection simple, l’équivalent du « click », ainsi qu’une version simplifiée du glisser-déposer.

Ces deux interactions reposent sur un seul et même signe de la main. En variant la gestuelle, on peut enrichir d’autant la variété des actions réalisables.

Une question de poids

Contrairement au click d’une souris, à toute interaction est associée un doute. Lorsque les conditions sont réunies, de faux positifs peuvent induire le système en erreur sur les intentions de l’utilisateur. Pour déjouer ces aléas du traitement d’image j’ai conditionné l’interaction à une mécanique de « poids ».

  • Lorsqu’une interaction est détectée, l’élément virtuel touché gagne en poids.
  • Si aucune interaction n’est détectée, l’élément perds une fraction du poids acquis.

=> Un élément est considéré comme « cliqué » lorsqu’il dépasse un certain poids
=> Pour le cliquer-glisser, le poids détermine dans quelle mesure l’élément doit suivre le déplacement de la main.

Démo

En conclusion, donner la possibilité à une personne de toucher le virtuel reste assez simple. La méthode testée ici pourrait être utilisée avec  toute autre forme qu’une main. Mais cela signifie également qu’au delà du geste enregistré, le logiciel sera incapable de reconnaitre le membre de l’utilisateur sous une autre apparence ni de se représenter la position qu’il adopte.

En la matière, la qualité et la simplicité vont de paire avec le port de gants adaptés (munis de leds ou teintés de couleurs vives). Mais n’est-ce pas une alternative tout à fait viable au très contre-intuitif couple Clavier-Souris ?

mar
31
Posted by gduhamel at 6:51

Après quelques essais de détection de la gestuelle basés sur la couleur de la peau, j’ai tenté l’expérience de la reconnaissance d’objets avec la célèbre méthode de Viola et Jones, telle qu’elle est mise en place dans la bilbiothèque OpenCV. Il s’agissait de détecter un geste traduisant la sélection d’un élément dans l’espace. Des nombreuses possibilités qu’offrent une main, le mouvement ci-contre paraissait le plus intuitif et visuellement identifiable.  

Base d’images exemple

La méthode de Viola et Jones est connue pour détecter les visages avec une grande efficacité. Mais rien n’est dit pour les mains, moins encore pour le dos des mains. Il faut donc entrainer le programme a détecter ces éléments précis. Pour déterminer les caractéristiques pseudo-Haar sur lesquelles repose la méthode de détection, l’algorithme a besoin d’un grand nombre d’images. Un ensemble d’images contenant l’élément à détecter. Et une collection d’images ne contenant pas cet élément. Les images négatives sont suffisamment nombreuses sur internet. Pour produire les images positives : j’ai développé un petit programme permettant d’industrialiser le processus. 

 

  1. Ce programme utilise les images capturées par une webcam.
  2. Un compte à rebours de six secondes laisse le temps à l’utilisateur de positionner l’objet dans la zone de capture.
  3. Au terme de ce compte à rebours, l’image contenue dans le cadre est mise à l’échelle et sauvegardée.
  4. Apparence de la main oblige, l’image finale est de forme rectangulaire (et non carrée). Cela ne pose aucun problème.
  5. Le fichier image est alors retraité par un utilisaire de la bibliothèque OpenCV (createsamples). A partir d’une image positive, celui-ci permet de générer d’autres images, légèrement déformées. Contraste modifié, couleurs inversées, rotation de l’image sur plusieurs axes, …
  6. A partir d’une image de référence, le programme en créé 20.

   L’objectif de 1500 images positives a ainsi pu être atteint en moins de 10 minutes.

 

Apprentissage supervisé

Avec 1500 images positives et 3500 négatives, Opencv disposait d’éléments en quantité suffisante pour calculer ses caractéristiques pseudo-Haar. Là aussi, la bibliothèque dispose d’un utilitaire (haartraining) qui fait le travail pour nous. L’objectif est de détecter la forme avec un maximum de tolérance, quitte à obtenir quelques faux positif. Il aura fallu un petit peu plus de 8h au logiciel pour calculer une détection en dix passages répondant au besoin. Ci-dessous quelques exemples de caractéristiques calculées:  

Détection

Les résultats sont plutôt intéressants, surtout compte tenu de la courte durée de l’apprentissage. La forme d’origine est bien détectée, les faux positifs sont assez rares et peuvent être écartés facilement.

Chargement de la Vidéo…


Cette reconnaissance de forme pourra servir d’étape de détection intermédiaire. Elle indiquera des pistes que le logiciel pourra suivre afin de déterminer s’il s’agit bien d’une volonté d’interaction de l’utilisateur.

 

Références
La documentation de la bibliothèque OpenCV
L’excellent tutorial sur le blog de Naotoshi Seo