Lentre gestuelle et la reconnaissance de gestes Quelques

  • Slides: 48
Download presentation
L’entrée gestuelle et la reconnaissance de gestes

L’entrée gestuelle et la reconnaissance de gestes

Quelques exemples d’interfaces à entrée gestuelle, et d’ensembles de gestes …

Quelques exemples d’interfaces à entrée gestuelle, et d’ensembles de gestes …

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example a)

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example a) rectangle b) ellipse c) ligne d) groupe e) copie f) rotation g) supprimer (“x”)

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for user interface prototypes. UIST 2007 https: //scholar. google. ca/scholar? q=wobbrock+wilson+gestures+without+libraries +toolkits+training+recognizer

Le Graffiti

Le Graffiti

Edge. Write ( http: //depts. washington. edu/ewrite/ ) • Une contrainte physique qui simplifie

Edge. Write ( http: //depts. washington. edu/ewrite/ ) • Une contrainte physique qui simplifie la reconnaissance de gestes

Edge. Write • Comment distinguer ces gestes? • Réponse: trouver l’ordre dans lequel les

Edge. Write • Comment distinguer ces gestes? • Réponse: trouver l’ordre dans lequel les “coins” sont visités, et cher la séquence de coins dans un dictionnaire

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform Interaction Paradigm, CHI 1995 https: //scholar. google. ca/scholar? q=moran+chiu+kurtenbach+implicit+structure+penbased+systems+freeform+interaction Tivoli

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform Interaction Paradigm, CHI 1995 https: //scholar. google. ca/scholar? q=moran+chiu+kurtenbach+implicit+structure+penbased+systems+freeform+interaction Tivoli

 • Comment fait Tivoli pour retrouver les rangées et colonnes dans des ensembles

• Comment fait Tivoli pour retrouver les rangées et colonnes dans des ensembles d’encre? • Réponse au prochain diapo…

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform

Moran, Chiu, van Melle, and Kurtenbach. Implicit Structure for Pen-based Systems within a Freeform Interaction Paradigm, CHI 1995 https: //scholar. google. ca/scholar? q=moran+chiu+kurtenbach+implicit+structure+penbased+systems+freeform+interaction Tivoli

Tiré de la thèse doctorale de Gord Kurtenbach Menu radial hiéarchique

Tiré de la thèse doctorale de Gord Kurtenbach Menu radial hiéarchique

Combinaison de sélection rectangle et lasso À retenir! • Question: comment l’ordinateur peut-il distinguer

Combinaison de sélection rectangle et lasso À retenir! • Question: comment l’ordinateur peut-il distinguer entre le geste à gauche et celui à droite? • Réponse: vérifier si (length_of_ink_trail) ÷ (straight_line_distance_from_start_to_end_of_drag) > 2. 5

Reconnaissance de gestes

Reconnaissance de gestes

Tiré de la thèse doctorale de Gord Kurtenbach Comment distinguer les gestes dans un

Tiré de la thèse doctorale de Gord Kurtenbach Comment distinguer les gestes dans un “Marking Menu” hiéarchique?

Gestes vers l’est, ensuite sud, faits avec souris et pavé tactile

Gestes vers l’est, ensuite sud, faits avec souris et pavé tactile

Gestes vers l’ouest, ensuite sud, faits avec souris et pavé tactile

Gestes vers l’ouest, ensuite sud, faits avec souris et pavé tactile

 • Comment trouver un "coin" dans un geste ? – Et comment le

• Comment trouver un "coin" dans un geste ? – Et comment le faire lorsque le geste est bruité ? • Y a-t-il des façons générales d'enlever le bruit des positions de souris ou de stylet ou d'autres dispositifs de pointage ?

Une façon de lisser un geste bruité: un filtre uniforme ("box filter") Entrée :

Une façon de lisser un geste bruité: un filtre uniforme ("box filter") Entrée : geste brut de N points ( x_raw[i], y_raw[i] ) pour i=0. . . N-1 for ( i=0; i <= N-3; i++ ) { x_smooth[i] = ( x_raw[i] + x_raw[i+1] + x_raw[i+2] ) / 3. 0 f; y_smooth[i] = ( y_raw[i] + y_raw[i+1] + y_raw[i+2] ) / 3. 0 f; } Sortie : geste lissé de N-2 points ( x_smooth[i], y_smooth[i] ) pour i=0. . . N-3 On utilise un voisinage de 3 pixels pour lisser chaque pixel, et on donne une pondération égale à chaque pixel dans le voisinage. En termes de traitement d'image, on peut parler d'un filtre uniforme ("box filter") avec noyau ("kernel") de taille 3 sur deux signaux (x et y) unidimensionnelles. À retenir!

Une autre façon de lisser un geste bruité: un filtre exponentiel float weight =

Une autre façon de lisser un geste bruité: un filtre exponentiel float weight = 0. 5 f; // entre 0. 0 et 1. 0 int x_smooth, y_smooth; // x, y lissés int x_smooth_old, y_smooth_old; // x, y précédents boolean is. Initialized = false; Qu'arrive-t-il si weight est plus près de 0. 0 ou plus près de 1. 0 ? • Près de 1. 0 : on se "colle" sur les données brutes, donc moins de lissage, et plus de bruit qui passe à travers le filtre • Près de 0. 0 : très lisse, mais plus de délai (nom: "lag", adjectif: "laggy") mouse. Event( x_raw, y_raw /* x, y bruts */ ) { if ( ! is. Initialized ) { x_smooth_old = x_smooth = x_raw; y_smooth_old = y_smooth = y_raw; is. Initialized = true; } else { x_smooth = weight * x_raw + (1 -weight) * x_smooth_old; y_smooth = weight * y_raw + (1 -weight) * y_smooth_old; x_smooth_old = x_smooth; y_smooth_old = y_smooth; }. . . réagir aux coordonnées ( x_smooth, y_smooth ). . . } À retenir!

Un autre exemple de filtrage exponentiel On récupère la position et l'orientation d'un cellulaire

Un autre exemple de filtrage exponentiel On récupère la position et l'orientation d'un cellulaire en 3 D avec une caméra Un filtre exponentiel pour lisser une orientation bruitée et Ar. Uco, mais https: //www. youtube. com/watch? v=D 9 w. Sr. Lvkqo. E l'orientation récupérée est bruitée, donc il faut filtrer. . . Ce genre de filtrage pourrait servir aussi pour stabiliser la localisation de tête ou de contrôleurs en réalité virtuelle / augmentée.

Enlever du bruit sporadique Entrée : geste brut de N points ( x[ i

Enlever du bruit sporadique Entrée : geste brut de N points ( x[ i ], y[ i ] ) pour i=0. . . N-1 À retenir! On veut enlever les points qui sont "très loins" de leurs voisins, un peu comme. . . function distance( i 1, i 2 ) { float delta_x = x[ i 1 ] - x[ i 2 ]; float delta_y = y[ i 1 ] - y[ i 2 ]; return sqrt( delta_x * delta_x + delta_y * delta_y ); } int i = 1; while ( i <= N - 2 ) { if ( distance( i, i-1 ) > seuil && distance( i, i+1 ) > seuil ) { supprimer le point i des tableaux x et y N --; } else i ++; } Comment choisir le seuil ? Y a-t-il une façon automatique de le choisir ?

Enlever du bruit sporadique (suite) float d_totale = 0; // distance totale for (

Enlever du bruit sporadique (suite) float d_totale = 0; // distance totale for ( i=0; i <= N - 2; i++ ) { // pourquoi N - 2 ? d = distance( i, i+1 ); d_totale += d; } float d_moyenne = d_totale / (N-1); // pourquoi N-1 ? float somme_des_carrés = 0; for ( i=0; i <= N - 2; i++ ) { d = distance( i, i+1 ); // comment éviter de refaire ce calcul ? différence = d - d_moyenne; somme_des_carrés += différence * différence; } float sigma = sqrt( somme_des_carrés / ( N - 2 ) ); // écart type À retenir! seuil = d_moyenne + 2. 0 f * sigma; // le 2. 0 ici est simplement un exemple. . . etc. (utiliser le seuil pour filtrer, comme sur le diapo précédent) d_moyenne est le centre de la distribution; sigma est la largeur d

D'autres exemples d'interfaces qui fonctionnent avec des gestes. . .

D'autres exemples d'interfaces qui fonctionnent avec des gestes. . .

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM Clic + touches de

Dabbleboard https: //www. youtube. com/watch? v=5 k. ZDqi. H_n. GM Clic + touches de clavier: saisir du texte Clic + clic + drag: sélection rectangle Widgets pour déplacer, dupliquer, supprimer, redimensionner

Fureteur web http: //dolphin. com/

Fureteur web http: //dolphin. com/

Samsung Galaxy Note

Samsung Galaxy Note

Comment permettre à un utilisateur (ou un concepteur) de définir des nouveaux gestes sans

Comment permettre à un utilisateur (ou un concepteur) de définir des nouveaux gestes sans écrire du code ? • Spécifier les nouveaux gestes avec des exemplaires ! – Nécessite de faire du “pattern matching” entre les exemplaires de gestes pré-fournis, et chaque geste entré pendant l’interaction

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example

Rubine, “Specifying gestures by example”, SIGGRAPH 1991, https: //scholar. google. ca/scholar? q=rubine+specifying+gesture s+example

La reconnaissance de gestes avec l’algorithme de Rubine (1991) À retenir! • Chaque geste

La reconnaissance de gestes avec l’algorithme de Rubine (1991) À retenir! • Chaque geste entré (ou exemple de geste) est réduit à un vecteur de caractéristiques (“feature vector”) et correspond donc à un point multidimensionnel. Il s’agit alors de classifier ces points parmi les catégories de gestes. • Taux de reconnaissance selon les tests de Rubine > 95%

Rubine (1991) https: //scholar. google. ca/scholar? q=rubine+%22 specifying+gestures+by+example%22

Rubine (1991) https: //scholar. google. ca/scholar? q=rubine+%22 specifying+gestures+by+example%22

Chaque geste correspond à un vecteur (ou un point multidimensionnel). Imaginons C=2 classes de

Chaque geste correspond à un vecteur (ou un point multidimensionnel). Imaginons C=2 classes de gestes, et que chaque classe a E=14 exemplaires de gestes. Soit le vecteur vc, e d’un exemplaire, avec indice c pour dire de quelle classe il s’agit, et indice e pour dire de quel exemplaire il s’agit. Ci-dessous, les points verts sont les exemplaires de la première classe (c=1), et les rouges sont de l’autre classe (c=2). L’indice c varie de 1 à C, et l’indice e varie de 1 à E. Chaque vecteur a F=13 caractéristiques, c. à-d. 13 coordonnées. Pour parler des coordonnées individuelles (vc, e, f) d’un vecteur, on utilise un indice supplémentaire, f, qui varie de 1 à F. vecteur de caractéristiques d'un exemplaire

 vecteur de caractéristiques d'un exemplaire geste à classifier

vecteur de caractéristiques d'un exemplaire geste à classifier

1ère solution: comparer la distance entre le nouveau geste et chaque exemplaire (recherche du

1ère solution: comparer la distance entre le nouveau geste et chaque exemplaire (recherche du plus proche voisin / "nearest neighbor") - Comment calculer cette distance? - Combien de temps cela prendra? (Supposons F “features” (donc un espace à F dimensions), C classes (ou sortes de gestes), et E exemplaires par classe). À retenir!

Distance entre le geste à classifier et un exemplaire À retenir!

Distance entre le geste à classifier et un exemplaire À retenir!

2 ième solution: pré-calculer le centroïde de chaque classe d’exemplaires et classifier selon la

2 ième solution: pré-calculer le centroïde de chaque classe d’exemplaires et classifier selon la distance aux centroïdes (= "nearest centroid classifier", à ne pas confondre avec k-moyennes / "k-means" qui est un algo pour retrouver les clusters) - Comment pré-calculer ces centroïdes? - Combien de temps cela prendra? - Comment ensuite classifier le nouveau geste? - Combien de temps cela prendra? centroïde À retenir!

Calcul de centroïde: À retenir! Distance entre le geste à classifier et un centroïde:

Calcul de centroïde: À retenir! Distance entre le geste à classifier et un centroïde:

3 ième solution (proposée par Rubine): pré-calculer des hyperplans pour séparer les exemplaires (machine

3 ième solution (proposée par Rubine): pré-calculer des hyperplans pour séparer les exemplaires (machine à vecteurs de support / "Support Vector Machine" ou SVM). Voir son article pour les détails. Ci-dessous, un exemple d’un cas qui serait mieux classifié avec l’approche par hyperplans qu’en comparant des centroïdes. (Notez qu’en pratique, ces cas sont peut-être rares, et la complexité de programmer le calcul des hyperplans ne vaut peutêtre pas la peine. ) À retenir! Ligne pointillée: mediatrice entre les centroïdes Ligne solide: hyperplan qui sépare les exemplaires

Soit: F “features” (donc un espace à F dimensions), C classes (ou sortes de

Soit: F “features” (donc un espace à F dimensions), C classes (ou sortes de gestes), et E exemplaires par classe À retenir! temps pour précalculer temps pour fiable? classifier un geste 1. plus proche voisin aucun Θ( C E F ) toujours 2. centroïdes Θ(C E F) pour trouver les centroïdes Θ( C F ) si les exemplaires sont linéairement séparables ET chaque classe a environ le même écart type 3. machine à vecteurs de support / hyperplans / approche de Rubine Dépend de l’implementation. Un algorithme itératif, à titre d’exemple, prend Θ( (nombre d'itérations) C 2 E F ) Θ( C F ) si les exemplaires sont linéairement séparables Remarque: l'approche 3 est la plus compliquée à programmer, tout en étant moins rapide que l'approche 2 et moins fiable que l'approche 1. Donc, je vous conseille d'essayer les approches 1 ou 2 avant d'essayer l'approche 3.

Le reconnaissance de gestes avec l’algorithme à “$1” (Wobbrock et al. , 2007) https:

Le reconnaissance de gestes avec l’algorithme à “$1” (Wobbrock et al. , 2007) https: //scholar. google. ca/scholar? q=wobbrock+wilson+%22 gestures+without+libraries%2 C+toolkits+or+training%22 • $1 n'utilise pas de vecteurs de caractéristiques; il compare plutôt la géométrie d'un geste avec la géométrie de chaque exemplaire, point-parpoint. Cela nécessite qu'ils aient tous le même nombre de points. • Tel que présenté dans l’article 2007 de Wobbrock et al. , l’approche $1 utilise seulement des opérations mathématiques de base, est simple à implémenter en peu de code sans librairies, et est rapide. Toutefois, cela est en comparaison à la machine à vecteurs de support de Rubine. Si on simplifie l’approche de Rubine pour classifier les vecteurs de caractéristiques avec plus proche voisin ou k-moyennes (tel que montré dans les diapos précédents), alors l’approche par vecteurs de caractéristiques devient toute aussi simple à implementer et possiblement plus rapide que $1 • Taux de reconnaissance de $1 supérieur à Rubine, tel que mesuré par Wobbrock et al. • Une des étapes clés: rééchantillonage ("resampling") du geste, pour que le geste et les exemplaires aient tous le même nombre de points. • Temps pour classifier un geste: Θ( C E N ), où C est le nombre de classes, E le nombre d'exemplaires par classe, et N le nombre de points par exemplaire À retenir!

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for user interface prototypes. UIST 2007 https: //scholar. google. ca/scholar? q=wobbrock+wilson+gestures+without+libraries+toolkits+training+recognizer

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for user interface prototypes. UIST 2007 https: //scholar. google. ca/scholar? q=wobbrock+wilson+gestures+without+libraries+toolkits+training+recognizer

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for

Wobbrock, Wilson, and Li. Gestures without libraries, toolkits or training: a $1 recognizer for user interface prototypes. UIST 2007 https: //scholar. google. ca/scholar? q=wobbrock+wilson+gestures+without+libraries+toolkits+training+recognizer

Wobbrock et al. (2007) http: //doi. acm. org/10. 1145/1294211. 1294238

Wobbrock et al. (2007) http: //doi. acm. org/10. 1145/1294211. 1294238