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 :