Vous êtes sur la page 1sur 11

Interface multimodale

Rapport Travail pratique

Logiciel de reconnaissance vocale Sphinx-4

Philippe Galley, Blaise Grand & Samuel Rossier

19 mai 2006

Table des matires


1 Introduction 2 Informations gnrales sur Sphinx-4 2.1 2.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prsentation de Sphinx-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 2.2.2 Fonctionnement de la reconnaissance vocale . . . . . . . . . . . . . . . . . Architecture de Sphinx-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 2 3 3 3 6 6 7 7 8 8 8 8

3 Installation 3.1 3.2 Logiciels requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implmentation de la librairie avec Eclipse . . . . . . . . . . . . . . . . . . . . . .

4 Application Tank Speech 4.1 4.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implmentation de la reconnaissance vocale . . . . . . . . . . . . . . . . . . . . . 4.2.1 4.2.2 4.2.3 4.3 Code Java pour limplmentation de la reconnaissance vocale . . . . . . . Fichier de grammaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fichier de conguration . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Rsultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Conclusion

Interface multimodale

Introduction

La reconnaissance vocale est une technologie informatique permettant un logiciel dinterprter une langue naturelle humaine. Le principe est simple : un enregistrement de quelques mots prononcs par un locuteur est interprt en texte. Cela permet entre autres la transcription automatique et le contrle de systmes par la voix. Cette technologie utilise des mthodes informatiques des domaines du traitement du signal et de lintelligence articielle. Une phrase enregistre et numrise est donne au programme de reconnaissance vocale. Celui-ci catgorise chaque phonme quil distingue selon un modle de probabilits statistiques. Une fois catgoriss, les phonmes1 sont interprts pour former des mots encore une fois selon un modle statistique. Il y a plusieurs logiciels de reconnaissance vocale, parmi les plus connus : Dragon Naturally Speaking Via voice Crescendo Sphinx-4 Ce rapport trate de linstallation, du fonctionnement et lutilisation de lAPI2 Sphinx-4. Un exemple dintgration de Sphinx dans une application sera galement prsent.

2
2.1

Informations gnrales sur Sphinx-4


Introduction

Sphinx-4 est un systme de reconnaissance vocale entirement crit dans le langage de programmation Java. Il a t cr conjointement par le groupe Sphinx luniversit Carnegie Mellon, les laboratoires Sun Microsystems et Hewlett-Packard.

2.2

Prsentation de Sphinx-4

Sphinx-4 est une librairie de reconnaissance vocale crite entiremenent en Java. Les buts de Sphinx sont davoir une reconnaissance vocale hautement exible, dgaler les autres produits commerciaux et de mettre en collaboration les centres de recherche de diverses universits, des laboratoires Sun, des laboratoires HP et du MIT. Sphinx-4 est hautement congurable. La reconnaissance de Sphinx-4 supporte notamment les mots isols et les phrases (utilisation de grammaires). Larchitecture de Sphinx-4 est modulable pour permettre de nouvelles recherches et pour tester de nouveaux algorithmes. La qualit de la reconnaissance dpend directement de la qualit des donnes vocales3 (voice data). Cest pour cela que lquipe de recherche de Sphinx-4 dveloppe actuellement un entraneur pour rassembler le plus de donnes vocales possibles. Les donnes vocales sont la cl dune bonne reconnaissance vocale.
Un phonme est la plus petite unit discrte ou distinctive que lon puisse isoler par segementation dans la chane parle. 2 Interface de programmation. Ore des fonctions supplmentaires 3 Les donnes vocales sont les informations relatives une voix propre. Ce sont par exemple les dirents phonmes, les dirents mots (lexique), les dirents faons de prononciation. Plus ces informations seront importantes et connues par le systme, meilleure sera sa raction et ses choix faire.
1

cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale 2.2.1 Fonctionnement de la reconnaissance vocale

Fig. 1 Fonctionnement de la reconnaissance vocale La gure 1 illuste le fonctionnement de la reconnaissance vocale. Le principe est simple : une voix audio est enregistre par le systme de reconnaissance. Ce dernier, avec laide des donnes vocales, dtermine les mots ou les phrases prononcs. 2.2.2 Architecture de Sphinx-4

Fig. 2 Architecture de Sphinx-4 Le graphique 2 illustre larchitecture gnrale de Sphinx-4. Front-End Le Front-End dcoupe la voix enregistre en direntes parties et les prpare pour le dcodeur. Base de connaissances La base de connaissance est linformation quutilise le dcodeur pour dterminer les mots et les phrases prononces. La base de connsaissance est compose : Dun dictionnaire. Classication des mots. Prononciation des mots (un mot peut avoir plusieurs prononciations). Prononciation reprsente comme des sons ou dans dautres units. 2 cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale Peu varier en taille, de quelque mots plusieurs centaines de milliers. Dun modles acoustique. Dun modle de langage. Dcrit ce qui peut tre dit dans un contexte bien spcial. Aide rtrcir lespace de recherche. Il y a trois sortes de modle de language : le plus simple est utilis pour les mots isols, le deuxime pour les applications bases sur des commandes et des contrles et le dernier pour le langage courant. Dcodeur Le dcodeur est le coeur de Sphinx-4. Cest lui qui trate les informations reues depuis le Front-End, les analyse et les compare avec la base de connaissances pour donner un rsultat lapplication.

3
3.1

Installation
Logiciels requis

Sphinx-4 a t compil et test sur Solaris, Mac OS X, Linux et Windows. Lexcution, la compilation et les tests de Sphinx-4 demandent des logiciels supplmentaires. Les logiciels suivants doivent tre installs sur la machine : Java 2 SDK, Standard Edition 5.0. http://java.sun.com. Les direntes librairies qui composent Sphinx-4 (sphinx4-1.0beta-bin.rar). http://cmusphinx. sourceforge.net/sphinx4/ Cette archive contient les direntes libraires (lib), la javadoc de Sphinx-4 et des dmonstrations (sources et excutables).

3.2

Implmentation de la librairie avec Eclipse

Limplmentation de Sphinx-4 dans une application quelconque se fait relativement facilement. La premire tat consiste crer un nouveau projet (Menu Fichier - Nouveau - Projet). La gure 3 illustre la cration dun nouveau projet dans Eclipse.

Fig. 3 Cration dun nouveau projet Il faut, dans la deuxime tape, insrer les librairies Sphinx-4 dans le projet. Pour ceci, on fait un clique droit sur le projet et on va dans les proprits du projet. On choisit ensuite le menu Java Build Path . On clique enn sur Add External JARs pour ajouter les direntes librairies fournies par Sphinx (gure 4). Les librairies ajouter sont les suivantes : cole dIngnieurs et dArchitectes de Fribourg 3

Interface multimodale

Fig. 4 Insertion des librairies Sphinx-4 dans le projet js.jar. jsapi.jar (Celle-ci doit tre cre en lanant lapplication jsapi.exe qui se trouve dans le rpertoire lib de larchive tlcharge). Cette librairie est utilis entre autre par Java pour enregistrer le son. sphinx4.jar. TIDIGITS_8gau_13dCep_16k_40mel_130Hz_6800Hz.jar. Pour la reconnaissance des nombres uniquement. WSJ_8gau_13dCep_8kHz_31mel_200Hz_3500Hz. WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz. Ces librairies sont fournies dans larchive tllchargeable sur le site ociel de Sphinx-4 (http: //cmusphinx.sourceforge.net/sphinx4/). Il faut crer ensuite un chier monFichier.gram. Ce chier contient la grammaire utilise par lapplication, cest--dire les mots ou les phrases qui sont potentiellement prononables. Exemple de grammaire 1
1 2 3 grammar test; public <simple> = hello world ;

Listing 1 Exemple 1 de chier grammaire Le chier grammaire ci-dessus permet de comprendre la phrase suivante
1 hello world

Exemple de grammaire 2
1 2 3 4 5 public <basicCmd> = <startPolite> <command> <endPolite>; <command> = <action> <object>; <action> = /10/ open |/2/ close |/1/ delete |/1/ move; <object> = [the | a] (window | file | menu);

cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale

6 7 8

<startPolite> = (please | kindly | could you | oh mighty computer) *; <endPolite> = [ please | thanks | thank you ];

Listing 2 Exemple 2 de chier grammaire Le chier grammaire ci-dessus permet de comprendre toutes les phrases suivantes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 move a menu thanks kindly open the menu thanks could you delete a menu delete a menu thanks delete the window thanks could you oh mighty computer could you open file please oh mighty computer please could you open menu thanks could you could you could you could you kindly please close the file please close file move a file please please please move window please oh mighty computer open window please oh mighty computer delete file could you please please open window thanks kindly open menu kindly close the menu please oh mighty computer could you move file thanks could you close the menu open the menu oh mighty computer please kindly delete menu thanks

La gure 5 illustre la grammaire ci-dessus de faon graphique.

Fig. 5 Graphe correspondant une grammaire Aprs avoir crit le chier de grammaire, il faut crer le chier de conguration monFichier.cong.xml. Le plus simple est dutiliser un chier de conguration dune des direntes dmonstrations fournies dans larchive tlcharge. Ce chier permet de spcier entre autre le dictionnaire utilis et la grammaire utilise.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... <!-- ******************************************************** --> <!-- The Grammar configuration --> <!-- ******************************************************** --> <component name="jsgfGrammar" type="edu.cmu.sphinx.jsapi.JSGFGrammar"> <property name="dictionary" value="dictionary"/> <property name="grammarLocation" value="resource:/tankspeech.TankRadio!/tankspeech/"/> <property name="grammarName" value="grammaireTank"/> <property name="logMath" value="logMath"/> </component> ... <!-- ******************************************************** --> <!-- The Dictionary configuration --> <!-- ******************************************************** --> <component name="dictionary" type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> <property name="dictionaryPath" value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/ WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/> <property name="fillerPath" value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/ WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/fillerdict"/> <property name="addSilEndingPronunciation" value="false"/> <property name="allowMissingWords" value="false"/> <property name="unitManager" value="unitManager"/> </component> ...

Listing 3 Extrait du chier de conguration La dernire tape de limplmentation de Sphinx-4 est dcrire le code Java qui va enregistrer la voix, linterprter et excuter le code en consquence. Le code ci-dessous illustre ceci. cole dIngnieurs et dArchitectes de Fribourg 5

Interface multimodale

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

try { // Identification du fichier de configuration. URL url = TankRadio.class.getResource("tankspeech.config.xml"); // Chargement de la configuration. ConfigurationManager cm = new ConfigurationManager(url); // Cration de lobjet de reconnaissance. Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); // Cration de lobjet microphone. Microphone microphone = (Microphone) cm.lookup("microphone"); // Allocation des ressources pour la reconnaissance. recognizer.allocate(); // On teste si le microphone est prt enregistrer. if (microphone.startRecording()) { // On reconnait un mot ou une phrase. Result result = recognizer.recognize(); // On teste si le rsultat est NULL. Si il ny a aucun rsultat, on affiche un // message derreur dans la barre de titre de lapplication. if (result != null) { // On rcupre la chane reconnue si le rsultat enregistr est non NULL. String resultText = result.getBestFinalResultNoFiller(); // On appelle la mthode ou le code correspondant la commande reue. if(resultText.compareTo("left")==0)this.monTank.tournerAGauche(); } else { this.monTank.afficherMessage("Rpter sil vous plat"); } } else { recognizer.deallocate(); } } catch (Exception e) { System.out.println("Problme: " + e); }

4
4.1

Application Tank Speech


Introduction

Lapplication prsente pour illustrer lintgration de Sphinx est un petit jeu nomm Tank Speech. Le but de ce jeu est de diriger un char dassaut en lui donnant des ordres orals tel que left, right, slow, quick, start, stop ou attack.

Fig. 6 Interface du jeu Tank Speech La gure 6 prsente linterface du jeu Tank Speech. Celle-ci est trs sommaire. En eet, seul le char est reprsent dans la fentre. Par ailleurs, lorsque la commande attack est appele, une 6 cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale bombe est envoye et explose dans la direction dans laquelle elle a t lance. Lorsquune commande est reue par le tank, le nom de cette commande est inscrite dans la barre de titre de la fentre.

4.2
4.2.1

Implmentation de la reconnaissance vocale


Code Java pour limplmentation de la reconnaissance vocale

Le code ci-dessous prsente limplmentation de la reconnaissance pour notre application.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 /* * Auteur: Philippe Galley, Blaise Grand, Samuel Rossier. * Date: 8 mai 2006. * Description: Cette classe implmete la reconnaisance vocale pour * le jeu Tank Speech. Elle coute et interprte les * les commandes donnes par lutilisateur et excute * les mthodes en consquence. */ package tankspeech; import import import import import import tankspeech.TankRadio; edu.cmu.sphinx.frontend.util.Microphone; edu.cmu.sphinx.recognizer.Recognizer; edu.cmu.sphinx.result.Result; edu.cmu.sphinx.util.props.ConfigurationManager; java.net.URL;

public class TankRadio extends Thread { Tank monTank; public TankRadio(Tank monTank){ this.monTank = monTank; } public void run() { try { // Identification du fichier de configuration. URL url = TankRadio.class.getResource("helloworld.config.xml"); // Chargement de la configuration. ConfigurationManager cm = new ConfigurationManager(url); // Cration de lobjet de reconnaissance. Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); // Cration de lobjet microphone. Microphone microphone = (Microphone) cm.lookup("microphone"); // Allocation des ressources pour la reconnaissance. recognizer.allocate(); // On teste si le microphone est prt enregistrer. if (microphone.startRecording()) { // On dmarre le tank. this.monTank.start(); // On indique que lon est prt recevoir des ordres vocaux. this.monTank.afficherMessage("Jcoute vos ordres..."); // On coute indfiniment les commandes. while (true) { // On reconnait un mot ou une phrase. Result result = recognizer.recognize(); // On teste si le rsultat est NULL. Si il ny a aucun rsultat, on affiche un // message derreur dans la barre de titre de lapplication. if (result != null) { // On rcupre la chane reconnue si le rsultat enregistr est non NULL. String resultText = result.getBestFinalResultNoFiller(); // On affiche la chane reconnue. this.monTank.afficherMessage(resultText); // On appelle la mthode du tank correspondante la commande reue. if(resultText.compareTo("left")==0)this.monTank.tournerAGauche(); if(resultText.compareTo("right")==0)this.monTank.tournerADroite(); if(resultText.compareTo("slow")==0)this.monTank.ralentir(); if(resultText.compareTo("quick")==0)this.monTank.accelerer(); if(resultText.compareTo("stop")==0)this.monTank.stopper(); if(resultText.compareTo("attack")==0)this.monTank.attaquer(); } else { this.monTank.afficherMessage("Rpter sil vous plat"); } } } else { recognizer.deallocate(); } } catch (Exception e) { System.out.println("Problme: " + e); } } }

cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale

Listing 4 Code utilis pour implmenter la reconnaissance vocale

4.2.2

Fichier de grammaire

Le chier sert dclarer toutes les commandes possibles pour diriger et actionner le Tank.
1 2 3 4 5 #JSGF V1.0; grammar grammaireTank; public <greet> = ( left | right | quick | slow | stop | restart | attack);

Listing 5 Fichier de grammaire du jeu Tank Speech

4.2.3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Fichier de conguration

<!-- ******************************************************** --> <!-- The Grammar configuration --> <!-- ******************************************************** --> <component name="jsgfGrammar" type="edu.cmu.sphinx.jsapi.JSGFGrammar"> <property name="dictionary" value="dictionary"/> <property name="grammarLocation" value="resource:/tankspeech.TankRadio!/tankspeech/"/> <property name="grammarName" value="grammaireTank"/> <property name="logMath" value="logMath"/> </component>

<!-- ******************************************************** --> <!-- The Dictionary configuration --> <!-- ******************************************************** --> <component name="dictionary" type="edu.cmu.sphinx.linguist.dictionary.FastDictionary"> <property name="dictionaryPath" value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/ WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/cmudict.0.6d"/> <property name="fillerPath" value="resource:/edu.cmu.sphinx.model.acoustic.WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz.Model!/edu/cmu/sphinx/model/acoustic/ WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/fillerdict"/> <property name="addSilEndingPronunciation" value="false"/> <property name="allowMissingWords" value="false"/> <property name="unitManager" value="unitManager"/> </component>

Listing 6 Fichier de conguration du jeu Tank Speech

4.3

Rsultats

Le rsultat de lapplication est trs satisfaisant. La majorit des ordres sont compris par le Tank qui les excutes correctement. Mme en prononant plusieurs commandes la suite, celles-ci sont en principe toutes excutes. On peut voir dans ce petit exemple que limplmentation de la reconnaissance vocale est relativement simple et vite fait dans la mesure o ce sont des mots ou des phrases relativement simples. En eet, la comprhension de phrases plus complexe demanderait un travail plus consquent au niveau du chier de grammaire.

Conclusion

Ltude de cette librairie tait trs intressante. Malgr le peu dinformations et dexemples sur Internet, nous avons pu, grce aux exemples fournis par lquipe Sphinx-4, implmenter notre propre application utilisant la reconnaissance vocale. Notre application ne reconnait que 8 cole dIngnieurs et dArchitectes de Fribourg

Interface multimodale mots isols (grammaire simple), il serait intressant maintenant de dvelopper une plus grosse application avec une grammaire plus complexe, pouvant reconnatre des phrases plus ou moins longues.

Rfrences
[1] http ://cmusphinx.sourceforge.net/sphinx4.

cole dIngnieurs et dArchitectes de Fribourg