Lentre gestuelle et la reconnaissance de gestes Quelques
- Slides: 48
L’entrée gestuelle et la reconnaissance 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) 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 user interface prototypes. UIST 2007 https: //scholar. google. ca/scholar? q=wobbrock+wilson+gestures+without+libraries +toolkits+training+recognizer
Le Graffiti
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 “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 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 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 d’encre? • Réponse au prochain diapo…
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
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
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’ouest, ensuite sud, faits avec souris et pavé tactile
• 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 : 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 = 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 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 ], 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 ( 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. . .
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 clavier: saisir du texte Clic + clic + drag: sélection rectangle Widgets pour déplacer, dupliquer, supprimer, redimensionner
Fureteur web http: //dolphin. com/
Samsung Galaxy Note
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
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
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
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!
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:
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 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: //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 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 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 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
- Apres quelques temps tu apprendras
- Décrivez en quelques lignes votre parcours professionnel
- Formation formateur gestes et postures
- Formateur gestes qui sauvent
- Network mapping reconnaissance
- Lunar reconnaissance orbiter
- Network reconnaissance tools
- Mounim el yacoubi
- Reconnaissance in to kill a mockingbird
- La reconnaissance est la mémoire du coeur
- Cue card mc design
- Reconnaissance magnetic
- Prc-137 hf radio
- Reconnaissance visuelle des objets
- Types of patrols
- Manoeuvre lspcc reconnaissance d'appartement
- Aircraft reconnaissance
- Burke-macgregor, llc
- Reconnaissance
- Double reconnaissance
- Reconnaissance intelligente de caractères
- Reconnaissance tih