Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu Napoli

blog technique

Reconnaissance et synthèse vocale : SAPI 5.1

Bonjour à tous,
Aujourd'hui, un petit article sur la reconnaissance et la synthèse vocale.

Définitions

Reconnaissance vocale : 2 utilisations : l'utilisateur dicte un texte qui est retranscrit par l'ordinateur, ou l'utilisateur énonce des commandes auxquelles l'ordinateur est programmé pour répondre. Nous ne parlerons pas de l'identification à l'aide de l'empreinte vocale.

Synthèse vocale (ou Text-To-Speech, TTL) : l'ordinateur lit un texte pour le synthétiser vocalement avec une "parole" artificielle.

Utilisation

Actuellement, je n'ai réussi qu'a trouvé qu'une seule façon de faire de la reconnaissance vocale : en utilisant les API Microsoft SAPI 5.1, contenues dans le Microsoft Speech SDK 5.1. Relativement efficace (mais moins efficace que Dragon Naturally Speaking par exemple), ces API ne sont bien entendu disponibles que sur plateforme Windows, on ne peut donc pas les utiliser sur Linux ou autre... De plus, à l'heure actuelle, seule la langue anglaise (et japonaise avec un patch) est supportée. Donc préparez votre accent pour une bonne reconnaissance.

Notion à comprendre : La reconnaissance vocale peut se faire de 2 façons.

  • Il peut s'agir d'une dictée libre de texte, c'est à dire que vous dictez du texte et l'ordinateur essaye de retranscrire ce que vous dites.
  • Ou alors il peut s'agir du mode "Control & Command" (ou C&C) qui est basé sur une liste de commandes prédéfinies. Dans ce mode, SAPI a une reconnaissance beaucoup plus efficace, car il y'a beaucoup moins de possibilités de reconnaissance.

Pour la synthèse vocale, dans ce SDK sont présentes plusieurs voix anglaises. Mais vous pouvez également télécharger des voix françaises ou autres, soit gratuites faites par Microsoft (je n'ai pas de lien pour l'instant), soit faites par des entreprises extérieures (mais pas toujours gratuites).

Téléchargement et installation du SDK

Petite précision : le SDK est la partie de Microsoft Speech API qui est utilisable par les développeurs pour l'intégrer à leur application. C'est donc uniquement un outil pour développeur et non pas une application en soi.

Pour télécharger le SDK, c'est ici : télécharger SAPI SDK 5.1
Je vous conseille de télécharger "SpeechSDK51.exe", c'est la partie qui nous sera utile.

Une fois installé, rendez-vous dans le panneau de configuration et ouvrez "Voix". Creez-vous un nouveau profil, faites de l'apprentissage pour améliorer la reconnaissance et configurez les options pour le Text-To-Speech en choisissant votre voix.

Une fois le tout configuré, testez les démos proposées pour vous donner une idée de ce qu'il est possible de faire. Vous remarquerez qu'il est bien entendu possible d'utiliser SAPI dans n'importe quel langage, C++, C#, VB, VB.Net, même Javascript d'après la démo. À noter que les sources des démos sont fournies, donc vous pouvez vous y mettre facilement.

Le fichier de documentation est le fichier sapi.chm, qui se trouve dans C:\Program Files\Microsoft Speech SDK 5.1\Docs\Help. Il peut paraitre rebutant au début, mais c'est une mine d'or.

A propos de l'apprentissage :

  • Lorsque vous allez faire l'apprentissage pour la première fois, il se peut que l'ordinateur ne reconnaisse RIEN, et qu'il ne se passe rien. Ne paniquez pas, n'abandonnez pas. Passez des mots, voir des pages entières, et essayez d'arriver à faire reconnaitre quelques mots. Une fois les premiers mots reconnus, le reste devrait suivre.
  • J'ai remarqué qu'une fois que l'apprentissage est efficace, si on essaye encore de l'améliorer, la reconnaissance se dégrade. J'imagine que c'est l'effet classique du sur-apprentissage. Moralité, une fois que la reconnaissance est à peu près bonne, ne poussez pas trop le bouchon sinon vous risquez d'avoir à supprimer votre profil et en recréer un nouveau (et donc de refaire l'apprentissage).
  • Pour vous donner un ordre d'idée, pour ma part la reconnaissance est bonne en 2 à 3 séances d'apprentissage. Quand je dis qu'elle est bonne, c'est que la reconnaissance de commandes dans les applis de démo du SDK est fiable. Par contre en ce qui concerne la dictée libre de texte, c'est la cata quoi que je fasse. Mais je ne maitrise encore pas trop le terrain de la "dictée" libre.

Exemple d'utilisation

Voici un court paragraphe sur l'utilisation que je fais de SAPI. Il s'agit d'une application permettant de contrôler le PC avec la voix.

L'application tourne donc en tache de fond et est inactive. Elle est simplement à l'écoute du mot clé qui la rend active (par exemple "Computer").

Lorsque je prononce le mot clé, l'application me répond "Yes ?" et devient active pour écouter ma commande. Lorsque je donne une commande, la reconnaissance se fait dans une liste prédéfinie de commandes (donc en mode Control&Command). Ainsi mon application sait reconnaitre et exécuter les commandes "Open google", "Play music", "Go to next song" etc... Mais si je dis une commande qu'elle ne connait pas, elle ne fera rien.

Pour aller plus loin, je travaille actuellement à mélanger le mode "liste de commandes définies" (Control&Command) et "dictée libre". Ainsi, il sera possible de faire des commandes comme :

  • "Open XXX" (ou XXX est une application, un fichier, une adresse web...)
  • "Send mail to YYY" (ou YYY est un contact ou une adresse mail)

Les possibilités sont énormes, et il est possible de faire des commandes très évoluées avec une grammaire s'inspirant des expressions régulières, par exemple en mettant des mots optionnels (par ex. "please" avant chaque commande), en mettant des variables (comme précédemment : "open XXX"), de définir quel "pattern" une commande doit suivre, etc... Si cela vous intéresse, lisez donc la partie "Grammaire".

Grammaire

Les grammaires sont un élément essentiel de la reconnaissance vocale. Ce n'est pas compliqué, prenez le temps de lire cette partie avant d'attaquer le code. Au début, vous pourrez commencer avec une grammaire très simple, puis avec le temps vous pourrez l'étoffer et la rendre très puissante.

Le tutorial concernant la grammaire fera l'objet d'un article à part entière prochainement. Les liens seront mis à jour lorsque l'article sera fait.

Code

L'utilisation de SAPI dans le code fera l'objet d'un article à part entière prochainement. Les liens seront mis à jour lorsque l'article sera fait.

Redistribution

Pour la redistribution de SAPI 5.1 dans l'installeur de votre application, je vous conseille l'article suivant :

http://support.microsoft.com/?scid=kb%3Ben-us%3B320207&x=15&y=16

Aller plus loin

Ma carte son (Realtek High Audio) possède une option permettant de supprimer l'écho acoustique. En d'autre termes, si mon PC joue de la musique, mon micro capte ma voix plus la musique, mais pré-traite le signal pour en soustraire le son qui sort dans les enceintes (donc la musique). Au final, même si mon PC joue de la musique, SAPI n'entend que ma voix et donc cela ne gène pas la reconnaissance vocale.

C'est d'ailleurs assez impressionnant, on ne s'entend même pas dire la commande mais le PC la comprend sans problème. Par contre cette option est désactivée par défaut, donc si votre carte son propose cette option, essayez de l'activer. Ça évitera également que lorsque la synthèse vocale vous parle, la reconnaissance vocale croit que vous lui donnez des commandes (c'est bête, mais chez moi ça faisait des commandes en boucle, l'ordinateur se parlait à lui-même :-).

J'espère que cette introduction à SAPI vous a plut, si vous connaissez d'autres moteurs de reconnaissance vocale, en particulier qui pourrait être en Français ou tourner sous Linux, merce de le partager dans les commentaires. Également, si vous avez des bonnes idées pour utiliser ça, n'hésitez pas à partager.

J'essayerai de faire une vidéo de présentation de mon application un de ces jours.



Merci à ghuysmans99 pour les corrections de fautes d'orthographe.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: dimanche 3 mai 2009 16:13 par MadMatt

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 5 heures et 48 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59