2012-08-09 47 views
0

例如,可以說我想要一個命令「中心」,在屏幕中央單擊鼠標。瑣碎的例子,但我更關心它的語法方面。如何使用System.Speech將一個確切的短語識別爲命令

如果我只想匹配「中心」怎麼辦?

因此,如果我暫停,說「中心」,然後暫停它是一個匹配。

但是,如果我說「我在房間的中心」,我沒有得到一個匹配。

下面的代碼似乎這個詞「中心」不管配什麼短語的一部分它是說:

  Choices center = new Choices(new string[] { "center" }); 
      SemanticResultKey centerKeys = new SemanticResultKey("center", center); 

      GrammarBuilder centerGrammarBuilder = new GrammarBuilder(); 
      centerGrammarBuilder.Append(centerKeys); 

      speechRecognitionEngine.UnloadAllGrammars(); 

      speechRecognitionEngine.LoadGrammar(new Grammar(centerGrammarBuilder)); 

回答

0

語音引擎通常做一個體面的工作,確保他們不承認的在句子中間的單詞中的單詞。但並不總是,如果你發現引擎識別術語中的一個邊緣情況,我可以推薦兩件事來幫助。

  • 將垃圾規則添加到語法中,然後忽略任何包含垃圾規則的識別事件。通常情況下,這是不推薦的(但可以工作),因爲人們很少使用垃圾規則折衷是在模型構建和性能受損的情況下進行的。你也許會注意到它在某些語言模型中比其他語言更好。再次,這是模型構建和調整的結果。 (一GRXML裏面是這樣的< ruleref特殊=「垃圾」 />) http://msdn.microsoft.com/en-us/library/system.speech.recognition.srgsgrammar.srgsruleref.garbage(v=VS.85).aspx
  • 檢查和調整最終的字的信心。即使它承認中間句子,你也應該在這個短語中得到更低的置信度分數。不幸的是,這種調整有時需要大量的音頻才能正確。