EA2014 speech recognition

= Présentation =


 * Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
 * Sujet : Reconnaissance automatique de la parole
 * Date : 17 octobre 2014
 * Auteur : Paul Labat 
 * Télécharger les slides de la présentation : [[Media:EA2104_speech_recognition.pdf]]

=Résumé= La reconnaissance automatique de la parole, plus couramment appelée reconnaissance vocale ou reconnaissance de la parole, est une technique qui permet d'obtenir le texte correspondant à un dialogue. C'est un sujet de recherche complexe et dont les premiers travaux remontent au début du 20e siècle. Le développement des méthodes de reconnaissances vocales a été rendu possible grâce au développement de l'informatique. On retrouve de nos jours la reconnaissance automatique de la parole dans de nombreux domaines d'applications : recherche vocale, saisie de texte, commande vocale, identification vocale, etc.

=Mots clefs= Traitement de la parole, langage naturel, traitement du signal, commande vocale, interface utilisateur vocale

=Abstract= The speech recognition, also known as automatic speech recognition or speech to text, is a technique that aims to translate a speech into words. It is a complex subject of research and whose early drafts dated of the early 20th century. The development of speech recognition technics was possible thanks to the improvement of computer science. Nowadays, we can find the speech recognition in many applications fields: voice search, text input, voice control, voice identification, etc.

=Key Words= Speech processing, natural language, signal processing, voice command, voice user interface

=Synthèse= La reconnaissance vocale fait partie des nombreux domaines du traitement de la parole.

Histoire
Les premiers travaux datent du début du 20e siècle. Mais le premier système pouvant reconnaitre de la parole date de 1952. C’est un système électronique, conçu au sien des laboratoires Bell par trois ingénieurs : Davis, Biddulph et Balashek. Ce système se limitait à reconnaitre quelques chiffres. Vous pouvez consulter le fichier PDF qui contient le résultat de leurs recherches. En 1972, le premier système de reconnaissance vocale est commercialisé par la société Threshold Technologies. Ce dernier n’est capable de reconnaitre que 32 mots, malgré l’utilisation de méthodes de calculs numériques. Il faut attendre l’année 1987 avant la commercialisation d’outils pouvant reconnaitre plus de 20 000 mots (le vocabulaire d’un humain contient entre 10 000 et 150 000 mots).

Algorithmes
Trois algorithmes sont ou ont été utilisés par les systèmes de reconnaissance :
 * La déformation temporelle dynamique
 * Les réseaux de neurones artificiels
 * Le modèle de Markov caché

La déformation temporelle dynamique est historiquement le premier algorithme à avoir été créer. Il est encore utilisé, mais pour des tâches plus spécifiques. Le dernier est le plus utilisé à l’heure actuelle par les systèmes modernes. Cependant, certains peuvent utiliser les réseaux de neurones artificiels et le modèle de Markov caché.

Concurrents
Grâce à la démocratisation de l’électronique grand publique (smartphone, ordinateur, tablette, etc.) et au rapide gain de puissance de ceux-ci, la reconnaissance automatique de la parole est de plus en plus présente.

On retrouve un grand nombre d’assistants personnel sur système mobile. Les plus connus sont les suivants (liste non exhaustive) :
 * Apple Siri
 * Google Now
 * Microsoft Cortana

Il existe également des logiciels pour ordinateur (liste non exhaustive) :
 * Dragon NaturalySpeaking
 * SpeechMagic

Domaines d'utilisations
La reconnaissance vocale trouve de nombreux usages (liste non exhaustive).
 * Avionique : commande vocale à bord des avions de chasse (F-16, F-35, Mirage …) et des hélicoptères (Puma)
 * Téléphonie : Android, iOS, Windows Phone
 * Domotique
 * Automobile
 * Santé
 * Jeux vidéo

CMU-Sphinx
CMU-sphinx est un ensemble d’outils open source permettant de développer des systèmes de reconnaissance vocale. Le premier outil de reconnaissance fut développé en 2000 par l’université Carnegie Mellon aux États-Unis. Parmi les outils on trouve :
 * Sphinx2
 * Sphinx3
 * SPhinx4
 * PocketSphinx
 * Sphinxtrain
 * Cmudict

Sphinxtrain est un outil qui permet de créer son propre modèle acoustique et sont propre modèle de langage. Le dernier permet la mise au point de dictionnaire de prononciation. Les quatre premiers sont des systèmes de reconnaissance vocale. PocketSphinx ayant été écrit a des fins de légèreté et de portabilité. Il est en effet compatible avec la majorité des OS de bureau et des OS mobiles (iOS, Android, Windows Phone). En plus d’avoir des possibilités de décodage multi-plate-forme, il est possible de développer avec plusieurs langages, laissant le choix à l’utilisateur :
 * iOS
 * Android
 * Windows Phone
 * Java
 * C
 * Python

Un modèle acoustique est un ensemble de représentations statistiques des sons qui composent un mot. Il est créé à partir d’un groupe de fichiers audio et de leurs transcriptions textuelles. C’est ce modèle qui permet, avec le modèle de langage, de réaliser de la reconnaissance automatique de la parole. Pour mettre au point ce modèle, il faut utiliser l’outil SphinxTrain. Il permet d’effectuer un entraînement à partir d’un corpus audio. C’est un ensemble de fichiers audio de moins de 30 secondes. Il y a également la représentation textuelle de chacun des fichiers audio. L’entrainement nécessite également d’autres fichiers qui doivent être créés à partir du corpus oral (audio et transcription textuelle) :
 * frenchtraining.dic : dictionnaire phonétique
 * frenchtraining.phone : liste des phonèmes
 * frenchtraining.lm.DMP : modèle de langage, utilisation de celui fourni par CMUSphinx
 * frenchtraining.filler : liste de caractères à remplacer par le caractère « SIL »
 * frenchtraining_train.fileids : liste des fichiers d’entraînement
 * frenchtraining_train.transcription : transcription textuelle des fichiers d’entraînement
 * frenchtraining_test.fileids : liste des fichiers de test
 * frenchtraining_test.transcription : transcription textuelle des fichiers de test

Cette étape de développement est résumée par le schéma suivant :



La reconnaissance quand à elle utilise les fichiers suivant :

=Démonstration=

Reconnaissance sur ordinateur
Il faut installer les logiciels suivants sur un système Linux :
 * sphinxbase
 * pocketsphinx

Pour cela, récupérez les fichiers en suivant les liens fournis, puis téléchargez et exécutez le script bash install.sh dans le dossier contenant les deux archives (en mode administrateur).

Maintenant, vous devez télécharger les fichiers qui sont nécessaires à la reconnaissance vocale du français :
 * Modèle acoustique
 * Modèle de langage
 * Dictionnaire

Mettez ces fichiers dans un dossier comme ceci :
 * models
 * dict -> le dictionnaire
 * hmm -> le modèle acoustique
 * lm -> le modèle de langage

Si vous souhaitez réaliser de la reconnaissance vocale à partir du microphone de votre ordinateur, vous devez utiliser la commande suivante. Cette commande prend en compte le fait que vous soyez dans le dossier contenant les modèles.

pocketsphinx_continuous -hmm models/hmm -lm /models/lm/fr-FR.dmp -dict models/dict/fr-FR.dic

En ce qui concerne la reconnaissance vocale du français dans un fichier audio ou dans un vidéo, il vous faudra installer les logiciels supplémentaires :
 * python-pocketsphinx
 * sox
 * vlc

sudo apt-get install python-pocketsphinx sox vlc

S’il s’agit d’un fichier vidéo, les instructions suivante extraient la piste audio d'un fichier vidéo au format MP4 et la convertie au format Microsoft Wave mono canal échantillonné à 16kHz. vlc -I dummy -- sout "#transcode {acodec=s16l, channels=2}:std access=file, mux=wav, dst=test.wav}" test.mp4 vlc://quit sox test.wav test_mono.wav channels 1 sox test_mono.wav -r 16000 test_16k_mono.wav

Dans le cas d'un fichier audio, vous n'avez besoin que des deux dernières commandes.

Vous pouvez ensuite enregistrez le script python suivant sous le nom pocketsphinx.py :


 * 1) ! /usr/bin/python2.7
 * 2) -*-coding:Utf-8 -*

import pocketsphinx import sys

if __name__ == "__main__" : hmdir = "models/hmm/" lmdir = "models/lm/fr-FR.dmp" dictd = "models/dict/fr-FR.dic" speechRec = pocketsphinx.Decoder(hmm = hmdir, lm = lmdir, dict = dictd) wavFile = file(sys.argv[1],'rb') speechRec.decode_raw(wavFile) result = speechRec.get_hyp file1 = open('transcription.txt', 'w') file1.write(result[0]) file1.close

Lancez la reconnaissance avec la commande suivante : python pocketsphinx.py test_16k_mono.wav

À la fin de la reconnaissance, un fichier transcription.txt est généré. Il contient le texte reconnu.

Reconnaissance sur Android
Si vous souhaitez essayer la reconnaissance vocale sur un smartphone Android, vous pouvez télécharger le projet suivant [[Media:RecoVocalGoogle.tar]] ainsi qu’android studio. Importez le projet dans ce dernier puis cliquez sur run et choisissez votre téléphone.

Ce projet utilise l’API de google pour la reconnaissance et donc, les serveurs de google pour effectuer la reconnaissance. Une application utilisant PocketSphinx pour Android à été développée, mais elle est inutilisable pour de la reconnaissance simple. En effet, cela est trop gourmand en ressources pour le téléphone. Cependant, une démonstration fournie sur le site web de CMU-sphinx permet de voir PocketSphinx en action pour la reconnaissance d’un très petit vocabulaire (moins de 10 mots). Elle permet aussi de voir la reconnaissance de certaines phrases précisées par le développeur (idée de commande vocale). Si vous souhaitez essayer cette démonstration c'est par là.

=Notes et Références=
 * CMU-sphinx-ASR Projet Github avec les codes de reconnaissance + entrainement de modèle acoustique
 * CMU-sphinx
 * Projet Voxforge Enregistrement vocaux de textes pour l'entrainement de modèle acoustique
 * developper.android
 * Wikipedia Speech recognition

=Liens externes=
 * Automatic Recognition of Spoken Digits article sur le premier système de reconnaissance de la parole