CMU Sphinx est un logiciel de reconnaissance vocale sous licence BSD. Cette page explique comment démarrer une application utilisant la reconnaissance vocale avec sphinx. Nous utilisons sphinx4 (en java), mais il existe aussi pocketsphinx, qui a l'air plus simple. Pour l'instant, cette page décrit l'utilisation de sphinx en langage Java. Il existe aussi une version en C.
Téléchargez ici les sources de sphinx. La dernière version stable en juillet 2014 est la 4.1.0beta6. Décompressez l'archive, vous obtiendrez un dossier sphinx4-1.0beta6.
Une partie de sphinx (la "jsapi") n'est pas sous licence libre, contrairement au reste. Pour installer cette partie, qui nous sera utile par la suite, il faut lancer un script qui va nous demander d'accepter cette licence puis décompresser la jsapi. Pour cela depuis le dossier sphinx4-1.0beta6 obtenu en décompressant les sources de sphinx dans un terminal:
cd sphinx4-1.0beta6-src/sphinx4-1.0beta6/lib/
jsapi.sh
exécutablejsapi.sh
avec la commande : sh jsapi.sh
appuyer sur <espace> pour faire défiler le texte de la licence, puis répondre y
à la question Accept (y/n)?:
- Si l'on obtient l'erreur suivante, c'est qu'il faut installer le paquet sharutils (cf Pré-requis):
jsapi.sh: 257: jsapi.sh: uudecode: not found
Première étape: tester un code d'exemple présent dans le paquet. La reconnaissance vocale sera en anglais. Nous allons compiler un des programmes d'exemple ("hello world") depuis eclipse.
Exception in thread "main" java.lang.NullPointerException
at edu.cmu.sphinx.util.props.SaxLoader.load(SaxLoader.java:74) at edu.cmu.sphinx.util.props.ConfigurationManager.<init>(ConfigurationManager.java:58) at edu.cmu.sphinx.demo.helloworld.HelloWorld.main(HelloWorld.java:33) C'est parce qu'il faut importer les "ressources" dans le projet. Dans le "project explorer", dérouler l'arborescence jusqu'à voir la classe HelloWorld ("HelloWorld" avec un 'c' blanc sur fond vert à gauche). Cliquer avec le bouton droit sur la classe, et choisir "Import…". Choisir "General → FileSystem", ce qui ouvre une boîte de dialogue dans laquelle on clique sur "browser". On navigue dans l'arborescence, on sélectionne le répertoire "sphinx-4.1.0/src/apps/edu/cmu/sphinx/demo/helloworld". Une fois le répertoire sélectionné cocher tous les fichiers qui s'affichent, puis cliquer sur "Terminer".
<property name="fillerPath" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/noisedict"/>
et remplacer "noisedict" par "fillerdict". On obtient:
<property name="fillerPath" value="resource:/WSJ_8gau_13dCep_16k_40mel_130Hz_6800Hz/dict/fillerdict"/>
<property name="modelDefinition" value="etc/WSJ_clean_13dCep_16k_40mel_130Hz_6800Hz.4000.mdef"/> <property name="dataLocation" value="cd_continuous_8gau/"/>
à partir d'ici, pas vérifié
Dans le fichier de configuration, trouver la section concernant le dictionnaire. L'un des items de cette section indique le chemin du dictionnaire (commence par /resource…) Il faut remplacer ce chemin par la position où nous avons importé le dictionnaire de notre projet, par exemple ressource:/edu/sphinx/…/helloworld/dict Faire de même avec la grammaire et le dictionnaire de filler.
On peut maintenant tester le helloworld en cliquant sur Debug (flèche verte). Si la qualité de la reconnaissance est mauvaise, c'est normal.
Modifier le "helloworld" anglais pour l'adapter au français. Pour cela, il faut récupérer les ressources (grammaire, dictionnaire et modèle acoustique), et modifier le fichier de configuration pour que ces nouvelles ressources soient prises en compte.
Dictionnaire: récupérer le fichier french62K.dic ici, l'importer dans le projet eclipse, puis modifier le chemin du dictionnaire dans la section "dictionnary" du fichier configuration.xml, Grammaire: il faut créer une grammaire, sur le modèle de celle qui existe en anglais, l'importer dans le projet eclipse, puis modifier le chemin pour qu'elle soit prise en compte, Modèle acoustique: il faut l'importer dans le projet eclipse, puis le pointer depuis le fichier de configuration. On le récupère à cette adresse le fichier dmp ici.