TP 10 : Reconnaissance de gestes 1 Implémentation du $1 recognizer

publicité
Université Lille 1 - Master 1
2016-2017
PJE - Interface multitouch
TP 10 : Reconnaissance de gestes
Objectifs
— Implémenter la technique de reconnaissance $1 recognizer,
— l’intégrer dans la toolkit multitouch.
Figure 1 – Exemples de gestes simples reconnus par le $1 recognizer. Pour chaque geste, le point de
départ est indiqué par un petit disque.
1
Implémentation du $1 recognizer
1.1
Les templates
Les templates sont représentés dans la classe Template (fichier Template.java 1 ) par un nom et une
liste de points. Les templates sont gérés par la classe TemplateManager (fichier TemplateManager.java 2 )
qui charge par défaut ceux correspondants aux gestes représentés sur la figure 1 et qui permet l’ajout
de nouveaux templates. Les gestes par défaut sont stockés dans le fichier gestures.xml 3 , chargé par
TemplateManager.
1.2
Préparatifs
Q 1. Créer la classe GestureEvent et l’interface GestureEventListener. La classe GestureEvent
contiendra le nom du template reconnu et le score correspondant. Vous ajouterez les méthodes getTemplateName
et getScore pour accéder à ces informations.
Q 2. Ajoutez les méthodes addGestureEventListener et fireGesturePerformed à MTComponent.
Q 3. Dans la classe Main, ajoutez un gestureEventListener au conteneur de MTSurface. Celui-ci permettra de recevoir les GestureEvent des gestes réalisés en dehors des images. Votre gestureEventListener se
contentera pour l’instant d’afficher le nom du geste reconnu et son score dans la console.
Les étapes suivantes décrivent les traitements que subissent les points d’un geste. A chaque traitement
correspond une ou plusieurs méthodes que vous définirez dans une classe OneDollarRecognizer. Les
trois classes (Template, TemplateManager et OneDollarRecognizer) seront placées dans le package
oneDollarRecognizer.
1. Template.java
2. TemplateManager.java
3. gestures.xml
1
1.3
Définition des points du geste à reconnaître
Q 4. Dans la classe InternalGestureState, ajoutez OneDollarRecognizer comme attribut public de
la classe afin de faciliter son accès dans la classe GestureAnalyzer. De cette manière, vous attachez un
système de reconnaissance à chaque MTComponent.
Q 5. Dans la classe GestureAnalyzer, vous allez pour l’instant analyser le geste quand un seul doigt
est posé sur un composant : quand le doigt est posé sur le composant (add), les points du précédent
geste sont effacés, la mise à jour de la position du doigt (update) enregistre les points qui seront ensuite
traités par $1 dès que le doigt quittera la surface (remove). GestureAnalyzer appelle alors la méthode
fireGesturePerformed de MTComponent pour transmettre le geste reconnu au composant.
1.4
Etape 1 : Ré-échantillonnage
Figure 2 – Algorithme de rééchantillonage.
Q 6. Ecrivez les méthodes resample et pathLength.
1.5
Etape 2 : Rotation basée sur l’"angle indicatif"
Figure 3 – Algorithme de rotation.
Q 7. Ecrivez les méthodes rotateToZero et rotateBy.
1.6
Etape 3 : Mise à l’échelle et translation
Q 8. Ecrivez les méthodes scaleToSquare et translateToOrigin.
1.7
Etape 4 : Reconnaissance
Q 9. Ecrivez les méthodes distanceAtBestAngle et recognize.
2
Figure 4 – Mise à l’échelle et translation.
2
2.1
Intégration dans le toolkit
Exécution de gestes sur les MTComponent
L’exécution de gestes de commande sur les MTComponent ne peut se faire avec un seul doigt puisque
cette interaction est déjà utilisée pour la translation.
Nous allons utiliser la métaphore de la feuille de papier pour exécuter un geste sur un MTComponent :
si deux doigts sont sur le composant et ne bougent pas (on considère donc qu’ils tiennent la feuille) alors
le troisième permet de définir le geste.
Q 10. Après avoir ajouté le nombre de doigts qui se trouvent sur le composant à la classe GestureEvent,
rajouter des listeners sur les MTPicture de façon à traiter le geste sur un MTPicture uniquement quand
3 doigts se trouvent dessus.
Q 11. Faîtes disparaître l’image quand un geste "delete" est reconnu sur une image. Utilisez la méthode
setVisible définie dans la classe Jcomponent et adaptez la méthode draw de MTPicture pour en tenir
compte.
2.2
Exécution de gestes sur les MTContainer
Q 12. Réinitialiser la position et l’orientation des images quand un geste "circle" est réalisé sur le
conteneur.
2.3
Ajout de retour visuel lors de l’exécution de gestes
Le retour visuel permet de guider l’utilisateur dans l’exécution d’un geste. Ce retour doit aussi pouvoir
être configuré sur chaque composant : activation du retour visuel, type de retour...
Q 13. Ajoutez les mécanismes d’écouteurs pour transmettre à un composant de s’abonner à un événement
de type GestureInProgressEvent qui indiquerait qu’un geste de commande est en cours d’exécution et
préciserait la liste de points de ce dernier. Ajoutez le code nécessaire pour afficher le retour visuel.
3
Figure 5 – Reconnaissance.
4
Téléchargement