我正在使用c#和windows语音识别来与我的程序进行通信。唯一要识别的词是“是”,这在我的程序中工作得很好唯一的问题是,因为语音识别被激活它会输入我所说的有限的方法来限制语音识别程序只能识别一个词,在这个例子中是“是”这个词?
谢谢
答案 0 :(得分: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方法被删除了。)看看他们如何构建用于订购Pizza的语法的例子。
要记住一件事,一个单词的语法可能会显示许多误报(因为识别器会尝试匹配语法中的某些内容)。你可能想要放弃是和否,这样它可以有比较的东西。
答案 1 :(得分: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的工作方式相同。