语音 SDK 11 Microsoft语法过多

本文关键字:语法 Microsoft SDK 语音 | 更新日期: 2023-09-27 18:35:28

>我编写简单的语音识别应用程序,可以将语法加载到引擎中。

但我明白了,这不能将许多语法加载到引擎中,而不是 1024 个语法。

Additional information: Too many grammars have been loaded. Number of grammars cannot exceed 1024.

当我加载 1024 语法时 - 它无法识别输入流.wav(和我的语音)文件:

 Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");
        // Create a new SpeechRecognitionEngine instance.
         _sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("ru-RU"));
         _sre.SpeechHypothesized += _sre_SpeechHypothesized;
         _sre.SpeechDetected += _sre_SpeechDetected;
         _sre.SetInputToWaveFile(@"c:'Test'Wavs'Wavs-converted'file.wav");

 public void LoadGrammarIntoEngine(IEnumerable<String> textColl)
    {
        Choices choises = new Choices();
        GrammarBuilder gb = new GrammarBuilder();
        gb.Culture = new CultureInfo("ru-RU");

        if (choises != null && textColl != null)
        {
            choises.Add(textColl.ToArray());
            if (gb != null)
                gb.Append(choises);
            else
            {
                Console.WriteLine();
            }
            if (_sre.Grammars.Count < 1024)
            {
                Grammar g = new Grammar(gb);
                if (_sre != null && g != null)
                    _sre.LoadGrammar(g);
                else
                {
                    Console.WriteLine();
                }
            }
            else
            {
               Console.WriteLine("too many grammars");
            }
        }
    }

附言当我加载 5-10 个语法(每个 100 个单词)时 - 效果很好。

也许我可以''应该一起使用多个识别引擎?

语音 SDK 11 Microsoft语法过多

从评论来看,你从根本上采取了错误的方法。 您需要使用类似System.Speech.Recognition.DictationGrammar的东西 - 它使用Microsoft桌面SR引擎。

这将接受大多数英语单词。 如果您需要将其限制为 1000 个单词,有几个选项。

如果你的单词列表包含不在默认单词列表中的单词(这是相当广泛的),你可以使用词典接口,遗憾的是,它不是通过System.Speech.Recognition公开的,所以你必须下降到SAPI才能使用它们。

这也假设您可以拒绝词汇外识别。 如果不是这样,您可以使用听写资源工具包,该工具包可让您构建自定义语言模型;请注意,它是由语音科学家为语音科学家构建的,因此文档非常困难。

在实践中,用户会说一些词汇不合时宜的话;最好检查它们并拒绝它们。 小(是的,1000个单词很小)词汇表往往存在误报问题(用户说一些超出词汇量的东西被识别为词汇表中的东西)。 命令和控制语法也会发生这种情况。