2011-03-30 152 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 但请先阅读有关使用情况以防止错误。