10juin 2008
La reconnaissance Vocale, application avec les MFCC
14:43 - Par Great A'Tan - Mes Projets - 3 commentaires
Auteur: Gaetan Semet, Grégory Treffot.
Voici donc mon TIPE de cette année (2001-2002):
La reconnaissance vocale.
Il ne s'agit pas de reconnaissance vocale comme il est question avec les applications de dictée vocale ou aide aux handicapés, mais plus d'une présentation d'une méthode qui fonctionnaient très bien dans les premiers téléphones portables (même si ce n'est pas tout à fait cette méthode qui est utilisée, elle s'en rapproche) par exemple: Les MFCC (Mel Frequency Cepstral Coefficients, ou les Coefficients Cepstraux dans l'échelle des Mels).
Concrètement, un MFCC peut se représenter ainsi:

Une matrice 51 (nombre de frames de 512 échantillons dans le fichier = durée du son en gros) x 12 (12 coefficients, c'est fixé à l'avance) caractérise le mot à reconnaitre. Il ne reste par la suite plus qu'à comparer cette "signature" avec une base de référence. Plus d'info dans le dossier.
Le TIPE se compose de 3 documents: le dossier, la fichier synoptique et les transparents.
Le dossier se veut le plus complet dessus avec tous les documents utilisés pendant la présentation (car le TIPE est principalement une épreuve orale), avec les sources des programmes développés,...
La fiche synoptique est une feuille recto-verso (avec une entête) qu'il faut remplir avant l'épreuve; c'est le seul document que le jury sera obligé de lire. Il se veut une présentation de la prestation orale.
Les transparents sont les documents qui seront projetés durant la présentation.
Évidemment, le tout est en LaTeX... ben oui, je suis désolé pour ceux qui ne savent pas comment ça marche, mais moi c'est "LaTeX Forever"...
Il faut aussi préciser que j'ai développé une petite application d'exemple avec le grand Matlab. Le but étant tout simplement d'appliquer la théorie à un exemple concret (car le TIPE est aussi un moyen de faire des expériences scientifiques de manière autonome) Le programme fonctionne très bien. Il repose sur le principe suivant.
Principe de fonctionnement
On suppose qu'on a deux jeux de fichiers sons (chaque fichier correspondant à un mot enregistré sans bruit dans un labo et parfaitement découpé au début et à la fin du mot); le premier jeu est supposé être le DICTIONNAIRE. On connait tous les mots appartenant à ce dictionnaire (on sait par exemple que le fichier "france.wav" correspond au mot France. Le deuxième jeu de fichiers sons représente les mots inconnus: on ne sait pas par exemple que le fichier "France.wav" correspond au mot France. Il ne s'agit évidement pas du même fichier, mais j'ai prononcé deux fois le mot France. Ce mot inconnu a une image correspondante dans le dictionnaire, on s'attend donc que le programme identifie le fichier "france.wav" inconnu avec le fichier "france.wav" appartenant au dictionnaire. De même, il y a des fichiers inconnus qui n'ont pas d'image dans le dictionnaire, par exemple Paris ou New York.
Pour simplifier, je me suis arrangé pour que les sons inconnus à reconnaitre soient des noms de pays, et les sons inconnus à ne pas reconnaitre sont des noms de villes.
En effet, la méthode MFCC repose sur une comparaison d'empreinte, donc il y a des mots qui peuvent ne pas être identifié.
Concrètement, les fichiers sons du dictionnaire sont dans le dossier dic, et les mots à identifier sont dans le dossier test.
Pour "reconnaitre", il faut comparer 2 spectres MFCC. Ceci est fait grâce à l'algorithme DTW mis en place (comparaison dynamique, car la comparaison directe (calcul d'une simple distance euclidienne entre 2 vecteurs ne peut pas fonctionné car un mot prononcé deux fois même par la même personne n'aura pas la même longueur). L'algo DTW (Dynamic Time Wrapping) retourne une "distance" (un nombre réel en fait). Et il suffit ainsi de comparer
Exemple de résultat (avec un petit dictionnaire pour que ça soit visible):

La distance seuil est fixée telle que tous mots du dictionnaires dont les distances sont supérieures à elle soient considérées comme non-valides. Ainsi il doit y avoir qu'un seul mot avec une distance plus petite que le seuil, le bon mot. Pour un mot qui ne doit pas être reconnu (New York par exemple), toutes les distances seront supérieure au seuil.
Et ça marche!!!!!
Remarque : le bon programme est recog2.m. Le programme recog1.m est simplement là pour illustrer le fait que la comparaison directe des spectres est inefficace (lente et ce n'est pas la bonne distance retournée!!).
Deuxième remarque: le programme fonctionne aussi avec un dictionnaire de 74 mots (pays). C'est évidement plus long à comparer, mais ça marche !!!!! Il suffit tout simplement de renommer le dossier largedic en dic
Téléchargement:
Documents compilés :
- Dossier (551 ko)
- Fiche synoptique (34 ko)
- Transparents (303 ko)
Sources
3 commentaires
Le lien de téléchargement des transparents ne marche pas
bonjour je suis actuellement en psi et je fais justement un tipe sur la reconnaissance vocale même si les objectifs ne sont pas exactement les mêmes, je trouve les documents tres bien, tout est bien expliqué j'ai cependant voulu refaire le programme sur matlab et je voulais savoir si il y a besoin d'outils specifiques car celui ci ne marche pas pour moi(j'ai seulement essayé le dtw merci de me repondre rapidement si c'est possible
Bonjour j'ai utilisé un autre soft (Speech Filling System) sans Matlab, cela marche bien aussi. Par contre ce n'est apparement pas indépendant du locuteur puisque j'ai des erreurs lorsque ce n'est pas la même personne qui parle. Est - ce la même chose ici?