Reconnaissance vocale : récupérer le nom de la règle ?
Bonjour à tous,
je tente de mettre au point un logiciel de reconnaissance vocale. Je passe par Vista et je développe en C# via le framework .NET (bibliothèque System.Speech).
J'ai définit une grammaire de type SRGS (classe Grammar) via un fichier de définition grXML, ce genre là :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN"
"http://www.w3.org/TR/speech-grammar/grammar.dtd">
<grammar xmlns="http://www.w3.org/2001/06/grammar"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/06/grammar
http://www.w3.org/TR/speech-grammar/grammar.xsd"
xml:lang="fr-FR" version="1.0" root="cmd" mode="voice"
tag-format="semantics-ms/1.0" >
<rule id="cmd">
<one-of>
<item>quitter application</item>
<item>éditer</item>
<item>nouveau fichier</item>
</one-of>
</rule>
</grammar> |
Au stade où j'en suis, l'application fonctionne bien : elle reconnait bien mes phrases si elles appartiennent à la grammaire.
Maintenant, je voudrais adapter mon code en fonction de la commande prononcée.
Comment faire ? Est-ce que je dois passer par un "if resultReco == 'ouvrir' " après chaque phrase reconnue ?
N'y a-t-il pas un moyen plus efficace de procéder ?
J'ai trouvé de la documentation sur VoiceXML, mais je crois comprendre qu'on ne peut l'utiliser que pour des applications Web (ce qui n'est pas mon cas).
Quelle solution choisir ?
Merci d'avance :)
Retourner le nom de la règle ?
Bon eh bien je n'ai toujours pas progressé. J'ai abandonné l'idée de VoiceXML.
J'ai une grammaire stockée dans un fichier XML comme expliqué ci-dessus, et j'ai créé une classe SRGSGrammaire, contenant une deuxième grammaire. Je charge les deux, elles sont bien reconnues.
Mon plus gros problème maintenant, c'est pour reconnaître quelle règle de grammaire a été reconnue.
Existe-t-il une propriété que je ne connais pas ?
Voici un bout de mon code, détectant la reconnaissance :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| SpeechRecognitionEngine sre;
...
sre = new SpeechRecognitionEngine();
sre.SetInputToDefaultAudioDevice();
gramCmd = new Grammar("C:\\...\\cmd.xml");
gram = new Grammar(new SrgsGrammar());
/* charge les grammaires */
sre.UnloadAllGrammars();
sre.LoadGrammar(gram);
sre.LoadGrammar(gramCmd);
/* sre_refProduit : fonction déclenchée lorsqu'une phrase est reconnue */
sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sre_refProduit);
sre.RecognizeAsync(RecognizeMode.Multiple); |
Je suis allée voir sur ce tuto de reconnaissance vocale, mais malheureusement il est trop vieux et n'utilise pas mes méthodes.
Existe-t-il une solution pour récupérer le nom de la règle reconnue ?