La partie technique

Reconnaissance vocale

Nous y voilà enfin. Les mordus de code source vont être servis.
Après avoir fait une analyse rapide mais complète des capacités de notre petit robot, nous nous sommes intéressés à étudier son interaction avec le monde qui l’entourait. A l’aide de son micro intégré, Tux peut récupérer des sons de l’extérieur. Nous avons donc pensé à utiliser cette capacité dans le but de reconnaitre certains sons et ainsi le faire réagir en fonction : les prémices d’une reconnaissance vocale. Après plusieurs recherches autour d'un logiciel libre de reconnaissance vocale sous linux, nous nous sommes arrêtés sur CMU sphinx 3. Celui-ci semblait assez aboutit et avait l'avantage de fonctionner en python.

L'installation a été faite à partir de la documentation suivante. La bibliothèque Française afin d'avoir la reconnaissance de cette langue a été téléchargé ici (le clean speech et le telephone speech ont donné les mêmes résultats). Cette page a ensuite servi à élaborer un test simple.

Afin de tester rapidement notre reconnaissance vocale, nous avons codé un script simple mais qui nous donnerait rapidement un aperçu des capacités du logiciel :

#script python - Test de synthèse vocale sphinx + Tux droid.

import _sphinx3, string, os, sys
sys.path.append('/opt/tuxdroid/api/python')
from tux import *
#inclusions qui vont bien

_sphinx3.parse_argfile("cfgfile")
_sphinx3.init() 

var = tux.status.mouth_closed() #on ouvre la bouche du Tux si ce n'est pas le cas
if(var == 0):
	tux.cmd.mouth_on()
tux.micro.on()
tux.sys.wait(1.0)
print 'Parlez'
tux.micro.capture_start('enre.wav',2.0) #on récupère la voix par le micro
tux.sys.wait(2.0)
tux.micro.capture_stop()
tux.micro.off()
tux.destroy()

file = "enre.wav"
file2 = string.split(file,".")[0]+".raw" #on prépare le nouveau nom de fichier car nous allons
transformer notre fichier wav en raw 
os.system('sox '+file+' -r 16000 -c 1 -s -w '+file2) #conversion wav -> raw sphinx travaille
avec ce type de fichier 
data = open(file2).read()
result = _sphinx3.decode_raw(data) #décodage du fichier 
os.system('rm '+file2) 
print 'le resultat est '+result[0] #dernière ligne affichage du résultat #fin

Bilan :

La reconnaissance a marché sur un fichier wav contenant un mot [bonjour, oui, non] enregistré puis nettoyé avec Audacity. Le nettoyage consistait à enlever les silences autour du mot.
Avec un .wav issu du micro du Tux, la reconnaissance ne fonctionne quasiment pas. En effet, le son est trop bruité.
De plus, le décodage du .wav par sphinx3 est assez long et est donc une entrave à l'interactivité entre le robot et l'enfant.
La solution apportée par CMU sphinx 3 n'est pas satisfaisante. Nous avons revu nos objectifs et plutôt qu'une vraie reconnaissance vocale, une comparaison entre un fichier wav contenant une réponse clé [oui, non, etc] avec un autre contenant la réponse directe de l'enfant sera envisagée.

La comparaison de 2 fichiers wav :

Après en avoir discuté avec notre professeur de traitement du signal, il semblait difficile, à notre niveau, de pouvoir exploiter rapidement cette solution, nos connaissances dans le domaine n’étant encore qu’à leur minimum.
Finalement, nous avons écarté cette idée de faire converser Tux et l’enfant et avons décidé de nous concentrer sur les faits et gestes du robot vis-à-vis des résultats obtenus par l’enfant grâce au logiciel Gcompris présenté dans la partie « Choix du logiciel ».

Administration du site