0

我正在使用 c# 和 windows 语音识别来与我的程序进行通信。唯一要识别的词是“是”,这在我的程序中运行良好唯一的问题是,由于语音识别被激活,它会输入我所说的内容有没有办法限制语音识别程序只识别一个词,在这种情况下是“是”这个词?

谢谢

4

2 回答 2

3

您是什么意思“由于语音识别被激活,它会输入我所说的内容”?您是说桌面识别器继续运行和处理命令吗?也许您应该使用 inproc 识别器而不是共享识别器(请参阅Using System.Speech.Recognition opens Windows Speech Recognition

你在使用听写语法吗?如果您只想识别有限的一组单词或命令,请不要使用听写语法。使用 GrammarBuilder(或类似的)并创建一个简单的语法。请参阅http://msdn.microsoft.com/en-us/library/hh361596

几年前在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx上发表了一篇非常好的文章。这可能是迄今为止我发现的最好的介绍性文章。它有点过时了,但很有帮助。(AppendResultKeyValue 方法在 beta 之后被删除。)看看他们如何构建订购披萨的语法的示例。

要记住一件事,一个单词的语法可能会显示很多误报(因为识别器会尝试匹配您语法中的某些内容)。您可能希望至少输入 Yes 和 No,这样它就可以进行比较。

于 2012-07-11T17:15:33.510 回答
0

如果您的代码类似于以下内容:

SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();
recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.SpeechRecognized += (s, args) =>
{
    foreach (RecognizedWordUnit word in args.Result.Words)
    {
        Console.WriteLine(word.Text);
    }
};
recognitionEngine.LoadGrammar(new DictationGrammar());

只需使用 if 语句:

foreach (RecognizedWordUnit word in args.Result.Words)
{
    if (word.Text == "yes")
        Console.WriteLine(word.Text);
}

请注意,recognitionEngine.SpeechRecognized 是一个事件处理程序,只要它识别一个单词就会发生,并且可以以其他方式使用,例如:

{
    recognitionEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
}
//this method is static because I called it from a console main method. It can be changed.
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
     Console.WriteLine(e.Result.Text);
}

我的示例在控制台中,但它对 GUI 的工作方式相同。

于 2012-07-11T16:42:42.307 回答