Lecteur Multimeodial Rapport du projet Cours sur les interfaces multimodales Christophe Gisler Denis Bossy Département d’Informatique Université de Fribourg Suisse 20 juin 2007 Table des matières 1 Introduction 1 2 Fonctionnalités de l’application 2.1 Lancement de l’application . . . . . . 2.2 GUI principale . . . . . . . . . . . . 2.3 Menu “Speech” . . . . . . . . . . . . 2.4 Fenêtres des lecteurs vidéo et audio . 2.5 Captures d’écran . . . . . . . . . . . 2.6 Exportation de fichiers vidéo et audio . . . . . . 1 1 1 2 3 7 7 3 Réalisation du projet 3.1 Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Environnement de travail . . . . . . . . . . . . . . . . . . . . . 9 9 9 4 Architecture 9 5 Libraires utilisées 5.1 avetanaBluetooth JSR-82 v1.3.16a . 5.2 WiiRemoteJ v0.8 . . . . . . . . . . 5.3 Sphinx-4 v1.0beta . . . . . . . . . . 5.4 Apple Quicktime for Java v6.1 . . . 5.5 Java Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 10 11 11 11 6 Problèmes rencontrés 6.1 Avec la Wiimote . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Avec Sphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Avec Quicktime for Java . . . . . . . . . . . . . . . . . . . . . 11 12 13 13 7 Améliorations potentielles 13 8 Conclusion 13 i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 INTRODUCTION 1 1 Introduction Dans le cadre du cours de Master en informatique sur les interfaces multimodales (MMI ou Multi-Modal Interfaces), il était demandé aux étudiants de concevoir par groupe de deux ou trois personnes une application multimodale, c’est-à-dire utilisant plusieurs modalités d’interaction avec la machine. Le but était mieux saisir la portée des problèmes auxquels il faut faire face dans la réalisation de ce genre d’applications nouvelles mais de plus en plus fréquemment utilisées grâce à la floraison de technologies chaque jour plus performantes. Notre groupe (Christophe Gisler et Denis Bossy) a choisi de créer un lecteur multimédia intuitif et multimodal dans le sens que l’utilisateur peut interagir avec lui en utilisant les deux modalités suivantes : la voix et la Wiimote (i.e. la manette d’une console de jeux Nintendo Wii fonctionnant par Bluetooth). Notre programme est capable de gèrer les fichiers vidéo et audio. 2 Fonctionnalités de l’application Cette section fait aussi office de manuel de l’utilisateur. 2.1 Lancement de l’application Afin de lancer l’application, il est indispensable que l’utilisateur soit en possession d’une Wiimote et d’un module Bluetooth installé et activé. De plus (et c’est la reconnaissance vocale avec Sphinx qui le requiert), il est nécessaire de donner -Xmx256m en argument de la VM Java. 2.2 GUI principale Après ouverture, la première fenêtre qui apparaı̂t est celle de la GUI (interface utilisateur) principale. Elle se présente comme dans la figure 1. Un texte dans la fenêtre informe l’utilisateur qu’il doit attendre quelques secondes pour que la reconnaissance de parole s’active. Il peut ensuite sélectionner un fichier vidéo ou audio au moyen de sa Wiimote en la bougeant de haut en bas et de gauche à droite ou en la faisant pivoter axialement (voir les figures ci-dessous). Les fichiers chargés proviennent du dossier par défaut nommé “Videos”. S’il y a plus de six fichiers chargés, la fenêtre devient trop grande, son défilement se fait alors automatiquement (autoscroll ) en suivant le cadre de sélection. Pour activer la reconnaissance vocale, il faut appuyer 2 FONCTIONNALITÉS DE L’APPLICATION 2 Fig. 1 – GUI principale sur le bouton “A” (comme “Audio”) de la Wiimote. A ce moment-là, l’utilisateur peut ouvrir le fichier vidéo ou audio sélectionné en prononçant le mot “Open”, ou tout simplement quitter l’application en prononçant le mot “Quit” (ou “Close”). D’une manière générale dans l’application, chaque fois que l’utilisateur veut utiliser une commande vocale, il doit préalablement appuyer sur “A” pour activer la reconnaissance vocale. 2.3 Menu “Speech” Durant l’utilisation du Lecteur Multimeodial, il est à noter qu’à tout moment les commandes vocales reconnues sont affichées dans la barre des menus, plus précisément dans un menu qu’on appellera par la suite le menu “Speech”. Lors des premières utilisations du programme, l’utilisateur a la possibilité de cliquer sur ce menu (avec la souris !) pour afficher la liste de tous les mots qu’il peut employer comme commandes vocales, au cas où il ne les aurait pas encore mémorisés. De plus, tout événement important qui se produit durant la lecture d’un fichier audio ou vidéo est aussi affiché dans ce menu (cf. figures dans les paragraphes suivants). 2 FONCTIONNALITÉS DE L’APPLICATION 3 Fig. 2 – Mouvements possibles dans le GUI principal Fig. 3 – Menu “Speech” 2.4 Fenêtres des lecteurs vidéo et audio Les fonctionnalités de lecture de fichiers vidéo ou audio sont les suivantes : Play, Play backward, Pause, Volume up, Volume down : Ce sont les fonctionnalités standards de tout lecteur multimédia, sauf pour la lecture en arrière (i.e. à l’envers) qui est peu commnune mais amusante ! La fonction de lecture s’enclenche automatiquement à l’ouverture d’un film ou d’une musique. L’état de “pause” s’obtient en faisant un bref mouvement vertical de haut en bas avec la Wiimote (et ceci est possible à tout moment durant la lecture, l’avancement ou le reculement). Backward, Forward Ces deux fonctions d’avancement ou de reculement dans un film ou un morceau de musique ont ceci de particulier dans le Lecteur Multimeodial qu’il est possible d’en modifier dynamiquement la vitesse avec la Wiimote en faisant des mouvements circulaires respectivement dans les sens inverse et normal des aiguilles d’une montre, comme l’illustre la figure 8. Ces deux utilisations combinées par exemple aux fonctions vocales d’exportation (présentées par la suite) constituent probablement une des attractions phares de l’application. Elles ne sont pas envisageables avec une 2 FONCTIONNALITÉS DE L’APPLICATION Fig. 4 – Lecture d’un fichier audio Fig. 5 – Lecture d’une piste audio Fig. 6 – Play ou lecture Fig. 7 – Play backward ou lecture en arrière 4 2 FONCTIONNALITÉS DE L’APPLICATION 5 télécommande normale... Fig. 8 – Mouvements pour Forward et Backward Fig. 9 – Forward ou avancement rapide Fig. 10 – Backward ou reculement rapide Backward slowly, Forward slowly C’est seulement après activation du mode précis (Precise Mode On), que l’utilisateur a la possibilité de reculer ou d’avancer lentement, c’est-à-dire avec une vitesse de lecture située entre -1 et 1. Comme le montre la figure 11 ci-dessous, le mode précis s’active ou se désactive en faisant un bref et rapide mouvement dans l’axe frontal en s’éloignant de soi (c’est-à-dire généralement en direction de l’écran). Il se désactice aussi automatiquement aussitôt que la vitesse de lecture franchit l’une des 2 bornes -1 ou 1. 2 FONCTIONNALITÉS DE L’APPLICATION 6 Fig. 11 – Dés-/Activation du mode précis d’avancement ou de reculement Fig. 12 – Dés-/Activation du mode précis d’avancement ou de reculement Fig. 13 – Forward slowly ou avancement lent mais plus précis Fig. 14 – Backward slowly ou reculement lent mais plus précis 2 FONCTIONNALITÉS DE L’APPLICATION 2.5 7 Captures d’écran Lors de la lecture d’un film, il est possible de faire une capture d’écran et de l’afficher dans une nouvelle fenêtre en prononçant la commande vocale ”Picture”. Le fichier de la capture d’écran est automatiquement sauvegardée sur le disque dur de l’ordinateur dans le dossier par défaut nommé “Screenshots”. Ensuite, il suffit simplement de dire ”Close” pour fermer la fenêtre de la capture d’écran effectuée et revenir au lecteur. Fig. 15 – Capture d’écran d’une vidéo 2.6 Exportation de fichiers vidéo et audio Lors de la lecture d’un film ou d’un morceau musical, il est possible d’en faire l’exportation d’une partie et de l’afficher dans un nouveau lecteur en prononçant les commandes vocales ”From”, ”To” et ”Export” pour respectivement déterminer les points de départ et d’arrivée et afficher le fichier alors exporté. Ce dernier est automatiquement sauvegardé sur le disque dur de l’ordinateur dans le dossier par défaut nommé “Exports”. Ensuite, il suffit simplement de dire ”Close” pour fermer la fenêtre du lecteur créé spécialement pour le fichier exporté et revenir au précédent lecteur laissé dans son état. Au cas où l’utilisateur ne dirait pas les mots “From” ou “To”, ce sont le début et la fin du fichier d’origine qui sont respectivement pris par défaut. 2 FONCTIONNALITÉS DE L’APPLICATION Fig. 16 – Exportation d’une vidéo Fig. 17 – Exportation d’une piste audio 8 3 RÉALISATION DU PROJET 3 3.1 9 Réalisation du projet Planning Notre groupe, composé des étudiants Christophe Gisler et Denis Bossy, s’est répartit les tâches comme suit tout au long de la réalisation du projet. De la fin du mois d’avril au début du mois de juin, il était prévu que chacun travaille de son côté, Christophe étant responsable de la partie “Lecteur” (i.e. gestion de la lecture d’un fichier audio ou vidéo et tout ce qui va autour) et Denis de la partie GUI principale (affichage d’un interface utilisateur chargeant tous les fichiers audio et vidéo à partir d’un dossier). C’est pourquoi au début du projet, le premier a plutôt touché à tout ce qui était du domaine de Quicktime et Wiimote, et le second à tout ce qui touchait à Java Swing et Sphinx. Ensuite, depuis début juin jusqu’à aujourd’hui, ils ont effectué la mise-en-commun des deux parties, la finalisation (intégration de Sphinx et de la Wiimote pour les commandes du lecteur) et le déboggage pour finir par la rédaction du présent rapport et de la présentation. 3.2 Environnement de travail Le seul matériel que nous avons emprunté au groupe DIVA était la manette Wiimote. Nous avons développé notre projet dans l’environnement de programmation Java Eclipse SDK (v3.2.2) de Sun Microsystems, et principalement travaillé sous Mac OS X (v10.4.9) puisque l’implémentation de la stack Bluetooth (avetena) requirait une license achetée et fournit par le département d’informatique pour une seule adresse MAC de module Bluetooth par groupe, et nous avons choisi le MacBook Pro de Christophe. 4 Architecture Cette section se propose de décrire l’architecture de notre programme Java en listant et décrivant ses différentes classes. Le Lecteur Multimeodial est ainsi constitué d’un unique paquetage comprenant les six classes suivantes : MultimeodialPlayer.java est la classe principale du programme. Elle contient la méthode main() et est responsable de gérer les événements retournés par la Wiimote et Sphinx, ainsi que les interactions entre la GUI et le lecteur. PlayMovie.java est la classe qui va créer la fenêtre Quicktime du lecteur proprement dit. 5 LIBRAIRES UTILISÉES 10 CreatePictFile.java a pour but d’enregistrer sur le disque dur et d’afficher une image dans une nouvelle fenêtre Quicktime. Dans notre programme, elle est utilisée pour l’affichage et la sauvegarde des captures d’écran durant la lecture de films. SphinxManager.java est responsable de tout ce qui concerne le processus de reconnaissance vocale avec Sphinx. Elle est simplement une adaptation du programme de démonstration “Helloworld” disponible sur le site du projet Sphinx. GUI.java est la classe qui, comme son nom l’indique, a pour but la création de l’interface graphique principale. MediaListing.java est la classe qui va parser le dossier par défaut qui contient tous les fichiers audio et vidéo pour retourner un objet permettant à la GUI de les afficher et de les ouvrir. 5 Libraires utilisées Pour développer notre programme, nous avons eu besoin d’importer les librairies suivantes : 5.1 avetanaBluetooth JSR-82 v1.3.16a L’implémentation avetanaBluetooth JSR-82 permet de mettre à disposition d’un programme Java les fonctionnalités Bluetooth de façon transparente. Ainsi, en ajoutant le module avetanaBluetooth à un programme Java, on lui offre les services Bluetooth de recherche de périphériques sans fil et de connexion aux services fournit par ces derniers en utilisant une interface Java bien documentée : JSR-82. avetanaBluetooth supporte les profiles Bluetooth SDP, L2CAP, BTSPP et OBEX et est disponible pour Windows, MacOS X et Linux. Le programme avetanaBluetooth est basé sur les piles (stacks) de protocole Bluetooth les plus répandues et n’utilise donc pas de hardware ou software spécial, ce qui permet un développement facile, bon marché et multiplateforme d’applications Java “Bluetooth-enabled”. Le seul petit bémol est que ce programme est payant. Le département d’informatique a donc dû acheter quelques licenses dont une pour l’adresse MAC du module Bluetooth de mon ordinateur portable. 5.2 WiiRemoteJ v0.8 WiiRemoteJ constitue la librairie Java pour faire fonctionner la Wiimote elle-même. Elle est gratuite et livrée avec la JavaDoc ainsi qu’un programme 6 PROBLÈMES RENCONTRÉS 11 de test, WRLImpl.java, que nous avons repris comme base pour notre classe MultimeodialPlayer.java et que nous avons aussi beaucoup utilisé pour afficher les courbes des valeurs retournées par les trois accéléromètres de la Wiimote au fil du temps, puisque c’était là sa fonction première. 5.3 Sphinx-4 v1.0beta Sphinx-4 est un système de pointe de reconnaissance de parole écrit entièrement en langage de programmation Java. Il est le fruit d’une collaboration commune entre le groupe Sphinx à l’Université de Carnegie Mellon, les laboratoires de Sun Microsystems, Mitsubishi Electric Research Labs (MERL) et Hewlett Packard (HP), avec les contributions de l’Université de Californie à Santa Cruz (UCSC) et du Massachusetts Institute of Technology (MIT). 5.4 Apple Quicktime for Java v6.1 QuickTime est l’architecture logicielle multimédia d’Apple. Il est multiplatforme et constitue un standard dans l’industrie. Il est utilisé par les développeurs de logiciels, les constructeurs de hardware et les auteurs de contenu multimédia pour créer et publier des graphiques, sons, vidéos, textes, musiques et médias 3D et VR. QuickTime for Java rassemble la puissance de QuickTime d’Apple et Java, permettant aux développeurs de créer des applications Java tirant avantage des riches capacités multimédia qu’offre Quicktime, incluant entre autres celles de lire, créer et éditer des vidéos, de capturer de l’audio et de vidéo, et de faire des animations 2D et 3D sophistiquées. De nombreuses applications d’exemples sont mis à disposition des programmeurs sur le site d’Apple, ce qui nous a été très utile étant donné que la prise en main n’est pas du tout évidente. 5.5 Java Swing Nous avons utilisé la librairie Swing de Java pour créer l’interface graphique utilisateur principale (GUI). 6 Problèmes rencontrés Les principaux problèmes auxquels nous fûment confrontés furent les suivants : 6 PROBLÈMES RENCONTRÉS 6.1 12 Avec la Wiimote La détection des mouvements avec la Wiimote est très imprécise car dans notre cas nous ne pouvons utiliser que ses trois accéléromètres et pas son émetteur-récepteur infra-rouge qui constitue une aide fort importante (notamment pour la console de jeux Nintendo). De plus, chaque utilisateur fait des mouvements différents et qui varient avec le temps, ce qui ajoute encore une composante aléatoire à cette imprécision. Nous avons donc eu de grandes difficultés à déterminer les caractéristiques pouvant différencier un mouvement d’un autre. Pour illustrer ceci, voici ci-dessous deux figures représentant les valeurs retournées par les trois accéléromètres au cours du temps pour différents mouvements de la Wiimote en utilisation typique de notre lecteur. Fig. 18 – Mouvements resp. : haut, bas, droite et gauche Fig. 19 – Mouvements circulaires pour resp. avancer et reculer 7 AMÉLIORATIONS POTENTIELLES 6.2 13 Avec Sphinx Comme tout logiciel de reconnaissance vocale, Sphinx est peu robuste au bruit, si bien qu’il fait souvent des fausses détections, ce qui peut entraver le bon déroulement du programme et vite avoir tendance à frustrer et énerver l’utilisateur. C’est la raison pour laquelle, à l’instar d’autres groupes, nous avons opté pour la solution de devoir appuyer sur le bouton ‘A’ de la Wiimote pour activer la reconnaissance vocale, ceci chaque fois avant de parler. Finalement, nous avons aussi remarqué que l’utilisation d’une grammaire simple augmente le taux de réussite. Mais d’une manière générale, la reconnaissance vocale reste difficile à intégrer dans un programme si l’on a comme objectif qu’elle soit utile et nécessaire ! 6.3 Avec Quicktime for Java La librairie Quicktime for Java est tellement grande, complète, difficile à prendre en main et à comprendre, que parfois des comportements aléatoires d’affichage surviennent lors de l’utilisation de notre lecteur. Nous ne savons pas si c’est nous qui avons programmé quelque chose d’incorrect, mais après de mutilples recherches sur internet et ses divers forums, nous ne savons pas encore d’où vient le problème. 7 Améliorations potentielles Comme améliorations potentielles futures, nous avons pensé qu’il pourrait être utile et judicieux d’ajouter les fonctionnalités suivantes : – Les possibilités d’annoter les vidéos et captures d’écran, et de sauvegarder ces annotations ; – La possibilité d’enregistrer des sortes de “checkpoints” durant la lecture, de manière à pouvoir revenir à des endroits bien précis après coup ; – La possibilité de classer les fichiers audio et vidéo selon des critères communs, comme le font la plupart des lecteurs multimédia. 8 Conclusion Le but intrinsèque que nous nous étions fixé pour ce projet de Lecteur Multimeodial était d’exploiter au maximum les deux modalités que constituent la voix et la Wiimote de manière à utiliser le moins de boutons possible et en aucune manière la souris. Ce but a été quasiment atteint puisque nous 8 CONCLUSION 14 n’utilisons que les boutons ‘+’, ‘-’ et ‘A’ de la Wiimote pour respectivement régler le volume sonore et activer la reconnaissance vocale. Cependant nous avons trouvé très difficile de trouver des idées pertinentes pour combiner ces modalités de manière à créer des fonctionnalités nouvelles et utiles à l’utilisateur. Finalement, nous avons trouvé le projet très intéressant, puisqu’il nous a donné l’opportunité de découvrir un peu des technologies que nous ne connaissions pas, à savoir Quicktime For Java, Sphinx et la Wiimote. RÉFÉRENCES 15 Références [1] Apple Quicktime for Java http://developer.apple.com/quicktime/ qtjava/ http://developer.apple.com/quicktime/qtjava/ javadocs.html http://developer.apple.com/samplecode/Java/ idxQuickTime-date.html [2] Nintendo Wiimote for Java http://www.world-of-cha0s. hostrocket.com/WiiRemoteJ/WiiRemoteJ%20v0.8.zip.gz http: http://www.wiili.org/ //www.wiili.org/index.php/Main Page forum/wiimote-via-java-t983-s110.html [3] Avetana Bluetooth JSR-82 implementation for Java http://www. avetana-gmbh.de/avetana-gmbh/produkte/jsr82.eng.xml [4] Sphinx4 speech recognizer for Java http://cmusphinx.sourceforge. net/sphinx4