2

Also habe ich diesen Spracherkennungscode, mit dem ich mit der Spracherkennungs-Engine von Microsoft gearbeitet habe.Microsoft Speech Recognition Engine Zwischen den Grammatiken wechseln

Leider ist es nicht so fantastisch, Sprache zu verstehen, also habe ich über Möglichkeiten nachgedacht. Eine davon ist das Wechseln zwischen spezifischen Grammatiken und allgemeinen Wörterbuchgrammatiken. Ich kann mir nicht vorstellen, wie ich zwischen Grammatiken wechseln kann, wenn man die gegebene Sprache nicht erkennt.

Wenn mir jemand helfen kann, herauszufinden, wie man das konstruiert, wieder die Möglichkeit, von, sagen wir, meine CommandList-Grammatik zu DictationGrammar() zu wechseln, wenn meine CommandList-Grammatik die gesprochene Sprache nicht erkennen kann. Hier

ist der Code:

//using Microsoft.Speech.Recognition; 

using System; 
using System.Speech.Recognition; 
using System.Windows.Forms; 
using System.Collections.Generic; 

namespace vRec 
{ 
    public class Form1 
    { 
     static int counter = 0; 
     static bool stop = false; 
     static string command = null; 
     static List<String> commandList = new List<string>() { "zooey", "open", "quit", "search", "close", "yes", "no" }; 
     static Choices keywords = new Choices(); 

    public static void Main() 
    { 
     command = null; 
     stop = false; 

     // Create an in-process speech recognizer for the en-US locale. 
     using (
     SpeechRecognitionEngine recognizer = 
     new SpeechRecognitionEngine(
      new System.Globalization.CultureInfo("en-US"))) 
     { 

     keywords.Add(commandList.ToArray()); 
     GrammarBuilder grammarBuilder = new GrammarBuilder(keywords); 
     Grammar testGrammar = new Grammar(grammarBuilder); 
     recognizer.LoadGrammar(testGrammar); 
     recognizer.LoadGrammar(new DictationGrammar()); 

     // Add a handler for the speech recognized event. 
     recognizer.SpeechRecognized += 
      new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized); 

     // Configure input to the speech recognizer. 
     recognizer.SetInputToDefaultAudioDevice(); 

     // Start asynchronous, continuous speech recognition. 
     recognizer.RecognizeAsync(RecognizeMode.Multiple); 

     Console.WriteLine("NOT TERMINATED"); 

     // Keep the console window open. 
     if(!stop) 
     Console.ReadLine(); 
    } 
} 

    // Handle the SpeechRecognized event. 
    public static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     if (counter == 2 && (e.Result.Text.ToUpper() == "YES" || e.Result.Text.ToUpper() == "US" || e.Result.Text.ToUpper() == "AS")) 
     { 
      counter = 0; 
      Console.WriteLine("THANK YOU LORD JEBUS"); 
      stop = true; 
      SendKeys.SendWait("{ENTER}"); 
      //command string to be passed in for functions in c++ code 
     } 
     else if (counter == 2 && (e.Result.Text.ToUpper() == "NO" || e.Result.Text.ToUpper() == "NOW" || e.Result.Text.ToUpper() == "KNOW" || e.Result.Text.ToUpper() == "OH" || e.Result.Text.ToUpper() == "NOT" || e.Result.Text.ToUpper() == "NOPE" || e.Result.Text.ToUpper() == "NAH")) 
     { 
      Console.WriteLine("Can you spell that?"); 
      counter = 1; 
      command = e.Result.Text; 
     } 
     else if (counter == 2 && (e.Result.Text.ToUpper() != "YES" || e.Result.Text.ToUpper() != "US" || e.Result.Text.ToUpper() != "AS" || e.Result.Text.ToUpper() != "NO" || e.Result.Text.ToUpper() != "NOW" || e.Result.Text.ToUpper() != "KNOW" || e.Result.Text.ToUpper() != "OH" || e.Result.Text.ToUpper() != "NOT" || e.Result.Text.ToUpper() != "NOPE" || e.Result.Text.ToUpper() != "NAH")) 
     { 
      //Console.WriteLine(counter); 
      Console.WriteLine("Can you repeat that?"); 
      counter = 1; 
     } 

     if (counter == 1) 
     { 
      command = e.Result.Text; 

      if (e.Result.Text.ToUpper() == "ALL BEEN" || e.Result.Text.ToUpper() == "OPIUM" || e.Result.Text.ToUpper() == "OLD AND" || e.Result.Text.ToUpper() == "HOLE IN" || e.Result.Text.ToUpper() == "HOPING" || e.Result.Text.ToUpper() == "OLD BEEN" || e.Result.Text.ToUpper() == "OPEN") 
       command = "open"; 

      if (e.Result.Text.ToUpper() == "WAIT" || e.Result.Text.ToUpper() == "QUITE" || e.Result.Text.ToUpper() == "QUIP" || e.Result.Text.ToUpper() == "QUICK" || e.Result.Text.ToUpper() == "CLIP" || e.Result.Text.ToUpper() == "QUIT") 
       command = "quit"; 

      if (e.Result.Text.ToUpper() == "SUCH" || e.Result.Text.ToUpper() == "SORT" || e.Result.Text.ToUpper() == "SEARCH") 
       command = "search"; 

      if (e.Result.Text.ToUpper() == "RULES" || e.Result.Text.ToUpper() == "FELLOWS" || e.Result.Text.ToUpper() == "CLOSE") 
       command = "close"; 

      commandList.Add(command); 
      Console.WriteLine(counter); 
      Console.WriteLine("Recognized text: " + command); 
      Console.WriteLine("Is this correct?"); 

      for (int i = 0; i < commandList.Count; i++) 
      { 
       Console.WriteLine("/" + commandList[i]); 
      } 

      counter++; 

     } 

     if (e.Result.Text.ToUpper() == "ZOOEY" || e.Result.Text.ToUpper() == "ZOE" || e.Result.Text.ToUpper() == "EASILY" || e.Result.Text.ToUpper() == "SALLY" || e.Result.Text.ToUpper() == "ZONE" || e.Result.Text.ToUpper() == "ZONE WE" || e.Result.Text.ToUpper() == "SOLELY" || e.Result.Text.ToUpper() == "ZOELLICK" && counter == 0) 
     { 
      counter++; 
      Console.WriteLine("How can I help you?"); 
     } 

     Console.WriteLine("Recognized text: " + e.Result.Text); 
    } 

    public static string getCommand() 
    { 
     return command; 
    } 

    } 
} 

Jede Hilfe würde geschätzt.^^

Antwort

0

Ein Weg, ich denken konnte.

Stellen Sie eine Vertrauensschwelle willkürlich 0,6 zu wählen und dann die Grammatik Schalt wenn die aufgenommene Rede unterhalb dieser Schwelle in Ihrer recognizer_SpeechRecognized Methode. Für welche, sollten Sie ‚SpeechRecognitionEngine.UnloadAllGrammars‘ in Verbindung mit SpeechRecognitionEngine.LoadGrammarAsync zu erhalten, das Vertrauen der erkannten Sprache verwenden,

e.Result.Confidence`, so your code could look like: 
    if (e.Result.Confidence <0.6) { 
     recognizer.RequestRecognizerUpdate(); 
     recognizer.UnloadAllGrammars(); 
     recognizer.LoadGrammarAsync(//switch your grammmars); 

    } 

Sie einen Blick auf die Verfügbarkeit Ihrer Grammatiken nehmen haben, usw. in diesem Umfang. Hoffe, das hilft!