API Microsoft Speech

La partie reconnaissance vocale de S.A.R.A.H. s’appuie entièrement sur les API Microsoft Speech (SAPI). L’objectif étant de s’intégrer finement avec le Kinect un Microphone Array de qualité.
Un microphone array est indispensable pour faire de la reconnaissance vocale dans une pièce car l’outil doit être capable d’isoler les bruits ambiants:
- Parquet qui craque
- TV en bruit de fond
- Conversations
- …
C’est la raison pour laquelle j’ai de gros doutes sur l’efficacité du projet Ubi.
Le principe de l’API Microsoft est simple:
- Une grammaire décrit les combinaisons de mots/commandes à détecter
- Quand une commande est détectée, elle est soumise à approbation avec un niveau de confidence (entre 0 et 1)
- Si elle est approuvée, un résultat sémantique est retourné.
Une grammaire peut être construite en C# ou en XML. Voici un exemple de grammaire XML:
[crayon]
Sarah il est quelle heure ?
Sarah
il est quelle heure
quelle heure est il
à NewYork
à Paris
[/crayon]
Le MSDN décrit la liste des tags ainsi qu’un cas concret de jeu de solitaire.
Grammaire Enrichie
Dans le contexte de S.A.R.A.H., j’ai normalisé la sémantique afin de passer des commandes depuis le XML.
L’objet Action encapsule toutes les actions à effectuer:
- Les attributs de cet objet déclenchent des actions à effectuer
- Tous les sous éléments de Action sont transformés en paramètre de requête HTTP
- La réponse HTTP est ensuite vocalisée
[crayon]
Sarah quelle est la météo pour demain ?
out.action=new Object();
Sarah
quelle est la météo
est-ce qu’il pleut
comment dois-je m’habiller
aujourd’huiout.action.date= »1″;
en ce momentout.action.date= »1″;
après demainout.action.date= »4″;
out.action._attributes.uri= »http://127.0.0.1:8080/sarah/phantom/meteo »;
[/crayon]
La balise permet d’encapsuler du code JavaScript qui sera exécuté au moment où la grammaire est reconnue.
- Le
out.action.dateajoute un paramètre date dans l’URL - Le
out.action._attributes.uridéclenche l’envoie d’un requête
Voici la sémantique renvoyée:
[crayon]
1
[/crayon]
Ce code va entraîner une requête à http://127.0.0.1:8080/sarah/phantom/meteo?date=1. La réponse HTTP sera ensuite vocalisée.
Tips
Les caractères spéciaux comme ‘&’ doivent être encodés ‘&’ pour que le XML soit valide. Ensuite pour que la requête envoyé à NodeJS soit valide il faut aussi encoder le paramètre: out.action.param1=encodeURIComponent("Sam & Max")
Attributs de l’objet Action
Voici la liste des attributs que l’on peut mettre sur l’objet Action:
| Name | Description |
|---|---|
| uri | Définit la requête à effectuer |
| tts | Entraîne immédiatement un Text To Speech |
| notts | Stop un Text To Speech |
| dictation | Envoie l’audio à Google puis le Text via le param. dictation. (true ou préciser la langue en-US) |
| play | Joue un MP3/WAV/WMA local ou stream |
| picture | Upload une photo prise par le kinect |
| threashold | Modifie le niveau de confidence requis |
| context | Active une liste de grammaires séparées par ‘,’ |
| listen | Active/Désactive l’écoute |
| restart | Recharge toute la mécanique |
Contextes
Certaines grammaires ne doivent pas être chargées tout le temps car elles n’ont du sens que dans un certains contextes.
- Par défaut toutes les grammaires sont chargées
- WSRMacro peut démarrer avec « -context fichier.xml »
- Les règles qui commencent par « lazy » ne sont pas activées
- dans le nom de la règle ou du fichier
- Une grammaire peut activer une autre avec l’attribut « context »:
- out.action._attributes.context = « chatterbot.xml »
- out.action._attributes.context = « default »
- Il est aussi possible d’envoyer une requête HTTP à WSRMacro avec le paramètre « context »
Dictée et Wildcard
La version 2.2 fournit les briques pour faire de la reconnaissance wildcard !!
Besoin
Comment faire des phrases contenant des mots non prévus ?
– Sarah recherche {mot} sur wikipedia
– Sarah quand passe {mot} au ciné
– Sarah appel {mot} sur Skype
– Sarah joue {mot} sur Spotify
Problème
Ce n’est pas possible avec l’API Microsoft:
- L’API « par design » ne sait pas reconnaître un mot
- Le XML n’a pas prévu ce concept
- La reconnaissance est très mauvaise
Solution
Il faut convertir l’audio via Google:
- L’attribut « dictation » déclenche la conversion « audio to text »
- Le tag GARBAGE indique des zones texte
- La conversion est ensuite envoyée via
...?dictation=texte



Répondre à danogena Annuler la réponse.