SpeechRecognitionEngine始终识别出选择的单词,即使它是错误的

时间:2012-12-21 19:26:55

标签: c# speech-recognition speech

我正在使用SpeechRecognitionEngine库在C#中进行语音识别,我将单词“start”设置为一个单词来识别(Choices):

Choices choices_start = new Choices("start");
GrammarBuilder grBuilder_start = new GrammarBuilder(choices_start);
Grammar grammar_start = new Grammar(grBuilder_start);

SpeechRecognitionEngine speech = new SpeechRecognitionEngine();
speech.LoadGrammar(grammar_start);
speech.SpeechRecognized += RecognizerSpeechRecognized;

private void RecognizerSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    foreach (RecognizedWordUnit word in e.Result.Words)
    {
        switch (word.Text)
        {
            case "start":
                Console.WriteLine(word.Text);
                speech.UnloadGrammar(grammar_start);
                speech.LoadGrammar(grammar_using);
                break;
            default:
                Console.WriteLine(word.Text);
                break;
        }
    }
}

问题在于,无论我说什么,它总是认出“开始”这个词,任何想法为什么?

1 个答案:

答案 0 :(得分:3)

这就是算法的工作原理。只要你给它一个选择,它只会返回给定的单词。您需要为其提供更多文本变体以供查找。

例如,如果要识别任意文本,可以使用DictationGrammar而不是简单语法。请注意,单词列表仍然有限,它将无法识别非常罕见的单词。但名单很大。

如果您的任务是在连续流中查找特定单词,则需要查找关键字定位引擎,而不是语音识别引擎。 Microsoft不提供关键字定位引擎功能。您可以使用CMUSphinx

等开源引擎构建一个