Microsoft Speech SDK 11中的语法太多

时间:2014-12-29 05:57:22

标签: c# speech-recognition grammar microsoft-speech-platform

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

但是我知道,这不能将多个语法加载到引擎中,而不能超过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");
            }
        }

    }

P.S。当我加载5-10个语法(每个100个单词) - 它运作良好。

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

1 个答案:

答案 0 :(得分:3)

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

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

如果您的单词列表包含默认单词列表中的单词(非常广泛),您可以使用Lexicon Interfaces,遗憾的是,它不会通过系统公开。 Speech.Recognition,因此您必须转到SAPI才能使用它们。

这也假设您可以拒绝词汇外识别。如果不是这样, 您可以使用Dictation Resource Kit,它可以让您构建自定义语言模型;请注意,它是由语音科学家为语音科学家建造的,所以文档很难进行。

在实践中,用户会说出词汇外的东西;最好检查一下并拒绝它们。小的(是的,1000个单词很小)词汇表往往会出现误报问题(用户说的是词汇表外的东西,被识别为词汇表中的东西)。这也发生在命令和控制语法中。