如果我给微软的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
会这样做,但我希望避免使用,因为它的准确度很低。
答案 0 :(得分:2)
GrammarBuilder builder = new GrammarBuilder();
Choices choice = new Choices (new string[] {"Open", "Close"});
builder.Append(choice);
builder.Append("Firefox");
Grammar grammar = new Grammar(builder);
创建Grammar
,处理“打开Firefox”和“关闭Firefox”。
现在,如果你在想
那意味着我需要创建大量的锅炉板代码来创建 所有我的语法,因为我希望能够识别数百个 像“打开记事本”,“关闭Chrome”和“最小化Visual Studio”这样的短语。
您可以创建某种工厂,返回Grammar
具有某些默认选项的工厂,例如Open,Close,Minimize,Maximize,Focus等......