Le présent article illustre l’utilisation du module de reconnaissance vocale Say-it de Parallax sur un robot Boe-Bot afin de piloter celui-ci par la voix. La reconnaissance de la parole est en effet un atout important pour un robot, démultipliant ainsi sa capacité à interagir avec l’homme et surtout lui permettant d’interagir via le mode le plus naturel pour l’homme.
Le Say-It module est une carte spécialement réalisée par la société Veear (http://www.veear.eu) pour le compte de Parallax. |
Dans cet article, on montrera comment installer le module de reconnaissance vocale Say-It sur un robot Boe-Bot, comment paramétrer le module Say-It à l’aide de l’interface graphique fournie, tester ces paramétrages et enfin générer du code bs2 afin de déclencher des actions en fonction des mots reconnus car après tout, il s’agit de l’objectif ultime. L’article suit donc un cheminement logique. Mais avant de présenter le module de reconnaissance vocale Say-it, il n’est pas inutile de rappeler les grands principes de la reconnaissance vocale.
Pour une présentation du robot Boe-Bot de Parallax, se reporter à l’article suivant : Pour une présentation du robot Boe-Bot de Parallax, se reporter à l’article suivant.
Les grands principes de la reconnaissance de la parole
Présentation et fonctionnement
La reconnaissance vocale (Automatic Speech Recognition en anglais) fait partie avec la synthèse vocale (Speech Synthesis en anglais) de ce que l’on appelle le traitement de la parole.
L’objectif de la reconnaissance de la parole est de pouvoir analyser un mot ou une phrase captée par un microphone et le transcrire dans sa version textuelle sur un ordinateur (ou l’équivalent) afin qu’il soit ensuite utilisable. Les grandes utilisations de la reconnaissance de la parole sont la dictée automatique ou bien les applications vocales via téléphone.
Le fonctionnement se déroule en deux grandes étapes :
- L’extraction du signal acoustique et le découpage en tranches de 30 ms analysables. Pour chacune de ces tranches, on en extraire ce que l’on appelle une image acoustique, en fait un vecteur des principales caractéristiques du signal.
- Ensuite, pour chacune de ces tranches, l’idée est de déterminer le phonème ayant la plus grande probabilité de correspondre à ce signal. Le phonème est la plus petite unité de langage parlé. La langue française en compte 36. Pour chaque tranche de signal, le programme détermine la probabilité de correspondance avec chaque phonème et combine ces probabilités aux probabilités de prononciation d’un mot (un mot étant un enchainement de phonème, certaines suites de phonèmes sont donc plus probables que d’autres car elles forment des mots) ainsi qu’aux probabilités d’occurrence d’un mot dans la langue cible (certains mots sont en effet plus fréquents que d’autres).
Pour en savoir plus :
http://fr.wikipedia.org/wiki/Reconnaissance_vocale
Sphinx est un logiciel open source de reconnaissance vocale : http://cmusphinx.sourceforge.net
Dans le cadre de la robotique
Introduire la reconnaissance vocale est un objectif naturel en robotique car il s’agit de l’une des manières les plus courantes d’interagir pour les humains. Dans le cadre du langage humain, on parlera de langage naturel. Celui-ci est très évolué car il dépend du contexte, de la personne, du moment… La robotique actuelle, bien que faisant de nombreux progrès n’en est pas là.
En ce qui concerne la robotique personnelle (ne tenons pas compte des robots très avancés dans les laboratoires comme ICub ou bien des avancées très impressionnantes dans le domaine militaire), les problèmes que l’on rencontre son plus prosaïques. En effet, la reconnaissance vocale avec un robot mobile tient à la qualité des composants mais aussi à l’environnement (comme toujours avec la robotique) qui peut être bruyant ou provoquer de l’écho ou modifier la perception du son en raison de sa forme (le robot pourra percevoir un signal différent s’il longe un mur par exemple). Comme vous le découvriez par la suite, commander un robot par la voix est plus ardu que de faire la dictée à l’aide d’un microphone devant son ordinateur sur son bureau.
Installation et configuration du module Say-it
Le module Say-it
Le module de reconnaissance vocale Say-It est une carte de 6,3 cm de long et 1,3 cm d’épaisseur qui se branche sur le connecteur applicatif. Il comporte un micro sur la partie supérieure ainsi qu’une LED très utile car elle indique à l’utilisateur quand le module est en mode reconnaissance vocale. Il permet d’enregistrer jusqu’à 32 commandes (des mots paramétrés).
Branchement du module Say-it sur le Robot
Le module de reconnaissance vocale Say-it se branche sur connecteur applicatif (entouré en rouge dans la figure ci-dessous). Le branchement s’effectue avec l’interrupteur fournissant l’énergie sur 0.
Attention, le sens de branchement est important. Pour ne pas se tromper, le signe Vdd (Vdd est l’entrée régulée à +5V) est noté en bas à gauche, au dos du module Say-it. Il faut donc connecter la branche la plus proche de ce signe avec le connecteur noté Vdd sur le connecteur Applicatif (en bas à gauche sur le schéma ci-dessus).
Une fois connecté, le module Say-it est dans la position suivante :
Une fois la carte branchée, téléchargez et installez l’application « Say-it GUI ». Elle est disponible en cliquant sur le lien suivant : http://www.parallax.com/Portals/0/Downloads/docs/prod/comm/SayItGUI-1.1.5.zip
Une fois le logiciel installé, alimentez la carte Say-it en plaçant l’interrupteur d’énergie du Boe-Bot sur 1 et lancez le logiciel « Say-it GUI ». Vous devez spécifier le port COM sur lequel est connecté le robot Boe-bot et appuyer sur le bouton « Connecter » (tous les deux entourés de rouge dans la figure suivante). Attention, le terminal de Debug de l’environnement de programmation Basic Stamp Editor doit être fermé lorsque vous cliquez sur le bouton « Connecter ».
Si c’est la première fois que vous connectez le module Say-it, il va automatiquement vous proposer de télécharger sur votre Basic Stamp ce que l’on nomme le Bridge (le pont). Cet add-on au microprogramme du Basic Stamp est nécessaire pour faire fonctionner le module Say-it, cliquez sur « Yes » et laissez le télécharger le Bridge. Lorsqu’il a terminé, la barre de progression en haut à droite de l’interface « Say-it GUI » est totalement verte.
Ca y est ! Vous êtes prêt pour démarrer l’utilisation du module.
Pour toute précision, téléchargez la documentation complète en anglais du module Say-it qui est disponible à l’adresse http://www.parallax.com/Portals/0/Downloads/docs/prod/comm/30080_SayItModulev1.2.pdf
Un premier test
Avant modifier le paramétrage du module, nous allons tester les mots (en anglais) qui sont préparamétrés sur le module afin de sa familiariser avec son utilisation et les différents concepts dont nous aurons besoin par la suite.
Pour réaliser les tests suivants, assurez-vous que votre robot est bien connecté à l’aide du câble USB à votre ordinateur et que vous avez bien connecté le robot dans l’interface « Say-it GUI » comme indiqué avant dans ce document. Placez l’interrupteur d’énergie de votre robot sur la position 1 (c'est-à-dire carte allumée mais moteurs éteints).
Dans l’interface « Say-it GUI », sélectionnez la première ligne dans la liste disponible à gauche, celle qui affiche le mot Trigger (déclencheur) puis cliquez sur le bouton « Test group » comme présenté dans la figure suivante.
Lorsque vous appuyez sur ce bouton, le module Say-it est en mode d’écoute pendant quelques secondes et tente de reconnaitre le ou les mots contenus dans le groupe sélectionné (ici le mot « Robot » est le seul mot paramétré dans le groupe « Trigger ». Non loin du microphone de la carte Say-it, prononcez le mot Robot (avec l’accent anglais). S’il ne reconnait pas le mot, il affichera une petite fenêtre indiquant « timeout », cela signifie qu’il n’a pas réussi à reconnaitre le mot robot durant la phase pendant laquelle il écoute. Si au contraire vous avez bien prononcé ce mot, il le surligne en vert clair dans votre interface (vert clair clignotant pendant quelques secondes).
Vous avez remarqué que la led présente sur la carte Say-it s’allume lorsque le robot est en mode écoute. Cela sera très utile par la suite.
Vous pouvez vous entraîner sur d’autres groupes comme le groupe WordSet n°1 qui contient 8 mots ou les deux autres Wordsets qui contiennent 6 et 11 mots.
Précisons les concepts
Dans le paragraphe précédent, nous avons vu le concept de déclencheur (Trigger), ainsi que d’autres concepts comme les groupes et les WordSets. Définissons ces concepts.
Le trigger (déclencheur)
Il s’agit du mot qui permettra de déclencher la reconnaissance vocale, d’où son nom. Le robot sait ainsi qu’après ce mot, vous allez prononcer un mot qui va correspondre à une commande.
Les groupes
Les mots paramétrés sont des commandes car elles seront censés (nous le ferons plus tard) déclencher une action. Les commandes sont regroupées dans des groupes.
WordSets
Les WordSets sont des groupes préparamétrés dans on ne peut pas supprimer ou ajouter de mots.
Paramétrage de ses propres commandes
Les étapes pour ajouter une nouvelle commande sont :
- Sélectionnez le groupe dans lequel vous souhaitez ajouter la nouvelle commande
- Cliquez sur le bouton « Add command » qui est le bouton en forme de bulle de bande dessinée avec une croix verte dessus
- Saisissez le nom de la commande dans la ligne qui vient d’être ajoutée dans la fenêtre de droite. Le nom peut être n’importe qu’elle chaine.
- Sélectionnez la ligne que vous venez d’ajouter en cliquant dessus (elle doit être surlignée en bleue)
- Cliquez sur le bouton « Train Command » en forme de bulle de bande dessinée avec une roue crantée dessinée dessus. La fenêtre suivante apparait :
- Cliquez sur le bouton « Phase 1 » et dites le mot que vous souhaitez enregistrer une fois.
- Cliquez sur le bouton « Phase 2 » (qui a remplacé le bouton Phase 1) et redites le mot correspondant à la commande.
Ca y est, votre commande est à présent configurée. Pour la tester, utiliser le bouton « Test Group » comme précédemment. Si vous n’êtes pas satisfait, recommencez le paramétrage. Supprimer une commande s’effectue à l’aide du bouton « Remove Command ».
A présent que vous savez comment ajouter une commande, vous pouvez ainsi enrichir vos propres groupes.
Génération d’un code bs2
A présent que nous avons vu que le module Say-it pouvait reconnaitre des commandes et que nous pouvions en ajouter, voyons comment indiquer au robot de réaliser des actions en réponse à cette reconnaissance.
Le Say-it GUI permet de générer du code bs2 (PBASIC) en utilisant le bouton « Generate Code » (celui qui représente une baguette de magicien sur une feuille blanche ».
Génération et test du code généré
Dans notre exemple, nous avons ajouté les 5 commandes suivantes au groupe 1 :
- AVANCE
- STOP
- RECULE
- DROITE
- GAUCHE
L’interface demande comment nommer et où placer le code généré.Une fois cette opération réalisée, vous pouvez fermer le « Say-it GUI » et utiliser le Basic Stamp Editor, environnement de programmation du Boe-Bot.
Le code généré est assez long mais avant de le tester, vous devez modifier un paramètre, à savoir la valeur du paramètre VRGROUP. En effet, sa valeur par défaut est 0, c'est-à-dire qu’il s’attend à reconnaitre des commandes contenues dans le groupe 0. Dans notre exemple, nous avons ajouté les 5 commandes dans le groupe 1, donc la valeur de VRGROUP doit être 1.
De même, afin que notre test soit plus significatif, nous avons modifié une partie du code comme suit. Si cette modification n’est pas indispensable, elle rend le test plus parlant (sans jeu de mot).
Avant modification | Après modification |
Lancez le programme ainsi modifié et testez les différentes commandes les unes après les autres. Le Debugger Terminal doit ressembler à la figure suivante :
La première ligne présente le mot « error » cela signifie qu’il n’a reconnu aucune commande paramétrée durant la phase d’écoute. Cela permet de comprendre le mode de fonctionnement du code généré, à savoir que la phase d’écoute est dans une boucle où chaque tour dure 5 secondes. Pour changer ce paramètre, changez la valeur du paramètre VRA1 à la ligne 81.
Ajout des commandes du robot
Dans le code final, nous avons rajouté en fin de programme une série de routines permettant au robot d’avancer, de reculer… et nous avons ajouté également l’appel à ces routine dans le morceau de code déjà modifié précédemment comme le présente la figure suivante :
A présent le code permet de piloter le robot par la voix ! le code complet est téléchargeable en suivant ce lien.
Pour allez plus loin, un code d’exemple est fourni par Parallax à l’adresse http://www.parallax.com/Portals/0/Downloads/docs/prod/comm/SayItExampleCode.zip. Il permet en particulier de tester la notion de trigger.
Il ne vous reste donc plus qu’à tester ce module de reconnaissance vocale !
Génération Robots (http://www.generationRobots.com)
Tout usage et reproduction soumis à autorisation explicite préalable.