2017-07-23 2 views
1

J'écris une application WPF qui doit reconnaître les commandes vocales de l'utilisateur. Étant nouveau pour le moteur de reconnaissance vocale, je ne suis pas sûr de la façon dont je peux accomplir ce dont j'ai besoin pour faire le meilleur chemin possible. Le flux de l'application serait la suivante:Moteur de reconnaissance vocale Décompresser une commande

  • utilisateur parle un mot clé « Awaken » l'application (ex Amazon Echo demander à l'utilisateur de dire « Alexa »)
  • utilisateur parle la commande pour l'application de effectuer (ex "Jouer 'une chanson par un artiste'")

Mon problème est que je ne sais pas quoi faire avec mon programme après la reconnaissance du mot-clé. Si je devais jouer la chanson que l'utilisateur dit après que le mot-clé est parlé, aurais-je besoin de commencer un nouveau reconnaissance de la parole? Ceci est un code psuedo de ce que je fais:

private SpeechRecognitionEngine _listen; 

    public frmHome() 
    { 
     InitializeComponent(); 
     SetupListen(); 
    } 

    private void SetupListen() 
    { 
     ResetListener(); 
    } 

    private void ResetListener() 
    { 
     _listen = new SpeechRecognitionEngine(); 

     Choices exChoices = new Choices(); 

     exChoices.Add(new String[] { "keyword" }); 

     GrammarBuilder gb = new GrammarBuilder(); 
     gb.Append(exChoices); 

     Grammar g = new Grammar(gb); 

     _listen.LoadGrammar(g); 
     _listen.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sr_speechRecognized); 
     _listen.SetInputToDefaultAudioDevice(); 
     _listen.RecognizeAsync(); 
    } 

    private void sr_speechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     if (e.Result.Text.Equals("keyword")) 
     { 
      //start listening for the command 
     } 

     ResetListener(); 
    } 

Répondre

0

Vous pouvez avoir une grammaire séparée pour votre marche/arrêt des mots-clés, et une variable de drapeau qui est définie sur true lorsque la commande de démarrage est parlée.

Ensuite, dans votre gestionnaire SpeechRecognized, vous pouvez vérifier le drapeau, puis continuer à rechercher le texte reconnu pour le texte de la commande.

Si vous recherchez un petit mot-clé, tel qu'Alexa, vous pouvez simplement rechercher le mot-clé reconnu pour le mot-clé avant de gérer la commande prononcée. Searching the contents of a string.

J'espère que cet article vous aidera: https://msdn.microsoft.com/en-us/magazine/dn857362.aspx