2011-03-30 196 views
6

我使用System.Speech庫能夠識別語音,但它通常認識到非常不同。改進語音識別C#

SpeechRecognizer_rec = new SpeechRecognizer(); 
DictationGrammar grammar = new DictationGrammar(); 

grammar.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(grammar_SpeechRecognized); 
_rec.LoadGrammar(grammar); 

如何改善recgonition?它與Grammer類有關係嗎?

回答

5

如果你能負擔得起要求用戶去訓練過程中,一定會產生你更好的結果。我用於自己(我有一個口音),它顯着改善了我的應用程序中識別的準確性。 至少你可以自己嘗試一下(控制面板,語音識別,訓練你的電腦以更好地理解你)。真的,培訓或減少模型(或者當然在一個安靜的地方用更好的麥克風使用你的應用程序)是提高結果準確性的唯一方法。

+0

你能訓練語音識別引擎嗎? – NuWin 2016-08-30 00:17:54

+0

看起來你可以使用SAPI。 – NuWin 2016-08-30 01:32:00

7

您必須限制語音識別引擎使用的模型(基本上是從語音輸入到允許的英文文本輸出的映射)以獲得高置信度輸出。模型越小,結果就越好,因爲識別器挑選的機會較小,即兩個相似的探測詞之間的詞是錯誤的。

這個簡單的例子,即只能夠從一個識別號碼三:

SpeechRecognizer rec = new SpeechRecognizer(); 
Choices c = new Choices(); 

c.Add("one"); 
c.Add("two"); 
c.Add("three"); 

var gb = new GrammarBuilder(c); 
var g = new Grammar(gb); 
rec.LoadGrammar(g); 
+0

但我需要識別用戶的說。 – Kaan 2011-03-30 17:32:30

+0

@Kaan:通常對於呼叫中心語音識別,該模型僅限於特定的選擇,即「我想要我的蛋糕」或「也吃它」,您將不得不構建自定義語法以允許不同的組合。如果你想堅持使用標準模型,那麼你就不可能提高準確性 - 除非你要根據特定的說話人(或口音)重新訓練模型,這通常是不實際的,甚至是不可行的。 – BrokenGlass 2011-03-30 17:39:36

2

The DictationGrammar會產生某種奇怪的結果,我嘗試了SpeechRecognitionEngine的不同屬性,幾乎沒有成功。 嘗試: SpeechRecognitionEngine.BabbleTimeOut 但請先閱讀有關使用情況以防止錯誤。