语法的语言与语音识别器的语言不匹配

美好的一天! 它是关于Microsoft Server Speech SDK v11.0(服务器版本)。

我在MSDN示例中运行了测试示例 。 所以英语短语-red,blue–很好。 但我也想识别俄语 – 安装微软语音识别语言-TELE(ru-RU)并运行我的app /

码:

static void DoWork() { Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU"); // Create a new SpeechRecognitionEngine instance. SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); // Configure the input to the recognizer. sre.SetInputToWaveFile(@"c:\Test\красный.wav"); // Create a simple grammar that recognizes "red", "green", or "blue". Choices colors = new Choices(); // colors.Add(new string[] { "red", "green", "blue","красный" }); colors.Add(new string[] { "красный" }); //russian word- "red" // Create a GrammarBuilder object and append the Choices object. GrammarBuilder gb = new GrammarBuilder(); gb.Culture = new CultureInfo("ru-RU"); // add Culture Info gb.Append(colors); Console.WriteLine(gb.Culture.CultureTypes); // Create the Grammar instance and load it into the speech recognition engine. Grammar g = new Grammar(gb); sre.LoadGrammar(g); // Register a handler for the SpeechRecognized event. sre.SpeechRecognized += new EventHandler(sre_SpeechRecognized); // Start recognition. sre.Recognize(); } // Create a simple handler for the SpeechRecognized event. static void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { Console.WriteLine(String.Format("Speech recognized: {0}",e.Result.Text)); } 

此行出现错误:

  sre.LoadGrammar(g); The language for the grammar does not match the language of the speech recognizer. 

那么,如何修复此错误? 我尝试设置CultureInfo,但它不起作用……谢谢!

看起来你需要

 SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine( new System.Globalization.CultureInfo("ru-RU"))) 

更改GrammarBuilder.Culture属性将解决此错误。

后:

 GrammarBuilder gb = new GrammarBuilder(); 

加:

 gb.Culture = Thread.CurrentThread.CurrentCulture 

因此语法文化与识别器相匹配。

语法构建器文化必须与语音识别器匹配。 最简单的方法是将语法文化设置为与语音识别器相同,如下所示:

 var sr = new SpeechRecognizer(); var gb = new GrammarBuilder(); // set the culture gb.Culture = sr.RecognizerInfo.Culture;