【发布时间】:2015-02-06 23:48:49
【问题描述】:
如果我给微软的SpeechRecognitionEngine 一个Grammar,它只会识别该语法中的单个选择,而不是选择的组合。
是否有任何内置方法可以让它识别选择组合而不是一次识别一个选择,而不是将该组合添加到选择中。
----例如,让它识别"Open Firefox",而不是"Open",然后是"FIrefox"
代码如下
namespace SpeachTest
{
public class MainClass
{
static void Main()
{
MainClass main = new MainClass();
SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
Choices choiceList = new Choices();
choiceList.Add(new string[]{"Hello", "Open", "Close", "Firefox"} );
Grammar grammar = new Grammar(choiceList);
sre.SpeechRecognized += main.sreEvent;
sre.SetInputToDefaultAudioDevice();
sre.LoadGrammar(grammar);
sre.RecognizeAsync(RecognizeMode.Multiple);
while(true){
Console.ReadLine();
}
}
void sreEvent(Object sender, SpeechRecognizedEventArgs e){
Console.WriteLine(e.Result.Text);
}
}
}
我知道DictationGrammar 会这样做,但我想避免使用,因为它的准确度很低。
【问题讨论】:
-
您忽略了显而易见的解决方案,只需将“打开 Firefox”添加到选项中即可。尽管我的荷兰语轻巧,但我尝试时效果很好..
-
@tyh - 我查看了语法 bulider 类,但没有发现任何用处。
-
@Hans Passant - 如果我按照您建议的方式进行操作,我将不得不为每个选择添加每个可能的组合
-
查看this MSDN page 了解如何使用 GrammarBuilder 构造句子。
标签: c# speech-recognition grammar speech