2015-02-05 77 views
0

如果我給微軟的SpeechRecognitionEngine a Grammar,它將只識別該語法中的各個選項而不是選擇的組合。C#獲取SpeechRecognitionEngine以識別語句

是否有任何內置的方式讓它識別組合的選擇,而不是一次單一的選擇,而沒有添加組合的選擇。

----例如,有它承認"Open Firefox",而不是"Open"然後"FIrefox"

下面

namespace SpeachTest 
{ 
    public class MainClass 
    { 
     static void Main() 
     { 
     MainClass main = new MainClass(); 
     SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")); 

      Choices choiceList = new Choices(); 

      choiceList.Add(new string[]{"Hello", "Open", "Close", "Firefox"}); 
      Grammar grammar = new Grammar(choiceList); 

      sre.SpeechRecognized += main.sreEvent; 
      sre.SetInputToDefaultAudioDevice(); 
      sre.LoadGrammar(grammar); 

      sre.RecognizeAsync(RecognizeMode.Multiple); 
      while(true){ 
      Console.ReadLine(); 
      } 
     } 

     void sreEvent(Object sender, SpeechRecognizedEventArgs e){ 
      Console.WriteLine(e.Result.Text); 
    } 
} 

} 

我知道DictationGrammar會做到這一點,但我想避免使用因代碼準確度低的事實。

+0

試着看一下[GrammarBuilder(https://開頭msdn.microsoft.com/en-us/library/ms554240(v=vs.110).aspx) – tyh 2015-02-05 23:03:14

+1

您忽略了顯而易見的解決方案,只需將「打開Firefox」添加到Choices即可。當我嘗試它時,工作得很好,儘管我的荷蘭語是lilt。 – 2015-02-05 23:31:56

+0

@tyh - 我已經看過語法增強類,但沒有發現任何用處。 – JackBarn 2015-02-06 01:18:30

回答

2
GrammarBuilder builder = new GrammarBuilder(); 
Choices choice = new Choices (new string[] {"Open", "Close"}); 
builder.Append(choice); 
builder.Append("Firefox"); 
Grammar grammar = new Grammar(builder); 

創建一個處理「打開Firefox」和「關閉Firefox」的Grammar

現在,如果你正在考慮

那麼這意味着我需要創建噸的鍋爐板代碼來創建 我所有的語法,因爲我希望能夠認識到數百 短語,如「打開記事本, 「」關閉Chrome「」和「最小化Visual Studio」。

你可以建立某種形式的工廠,返回Grammar有一定的默認選擇像打開,關閉的,最小化,最大化,焦點等..

+0

雖然不完全是我所希望的。這劑量工作,並解決我的問題 – JackBarn 2015-02-07 01:01:48