至少需要加载一个语法才能进行识别

你好,我尝试创建一个简单的AI程序,因此我定义了两个语法并加载它们,但出现了这个错误:至少需要加载一个语法才能进行识别。Visual Studio的错误信息是:

在System.Speech.dll中发生类型为’System.InvalidOperationException’的异常,但在用户代码中未处理
附加信息:至少需要加载一个语法才能进行识别。

这是代码,这是类定义:

class DefineGrammar{    /// <summary>    /// 定义选择    /// </summary>    Choices greeting;    Choices DateAndTime;    /// <summary>    /// 定义语法变量    /// </summary>    Grammar greetingGrammar;    Grammar DateAndTimeGrammar;    SpeechRecognitionEngine rec = new SpeechRecognitionEngine();    public void LoadGrammar()    {        // 把数据放入选择中        greeting = new Choices(new string[] { "hello", "how are you" });        DateAndTime = new Choices(new string[] { "what time is it", "what is today" });        // 定义语法构建器以便将选择放入其中        GrammarBuilder greetingGrammarBuillder = new GrammarBuilder(greeting);        GrammarBuilder DateAndTimeGrammarBuilder = new GrammarBuilder(DateAndTime);        // 将语法构建器放入语法中        greetingGrammar = new Grammar(greetingGrammarBuillder);        greetingGrammar.Name = "GreetingGrammar";        DateAndTimeGrammar = new Grammar(DateAndTimeGrammarBuilder);        DateAndTimeGrammar.Name = "DateAndTimeGrammar";        rec.LoadGrammar(greetingGrammar);        rec.LoadGrammar(DateAndTimeGrammar);    }}

这是主页面:

public partial class MainWindow : Window{    SpeechSynthesizer s = new SpeechSynthesizer();    SpeechRecognitionEngine rec = new SpeechRecognitionEngine();    DefineGrammar gr = new DefineGrammar();    public MainWindow()    {        rec.RequestRecognizerUpdate();        gr.LoadGrammar();        rec.SpeechRecognized += Rec_SpeechRecognized;        rec.SetInputToDefaultAudioDevice();        rec.RecognizeAsync(RecognizeMode.Multiple);    }}

回答:

在你的DefineGrammar类中,你有一个SpeechRecognitionEngine类型的成员字段,当调用LoadGrammar()时,你会向这个字段加载语法。

在你的主类中,你有另一个该类型的实例,并尝试在这个实例上进行识别操作。

现在,错误的原因是你有两个独立的SpeechRecognitionEngine实例。

解决这个问题的一种方法可以是修改你的DefineGrammar类如下:

public void LoadGrammar()改为public void LoadGrammar( SpeechRecognitionEngine rec ),并删除该类中的成员字段rec

还有其他可能的解决方案,但这种方法可以解决问题。区别在于现在你将语法加载到主类中使用的实例,而不是另一个实例。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注