【问题标题】:Building a good grammar with Microsoft.Speech使用 Microsoft.Speech 构建良好的语法
【发布时间】:2014-09-08 15:30:27
【问题描述】:

我在使用 Microsoft.Speech 构建葡萄牙语语法构建语法时遇到了一些问题。

我手动构建了一个语法,但还不够好。我听说我可以在 System.Speech 中使用听写语法来构建我的语法,但它似乎不支持葡萄牙语。

我的程序必须能够识别一些音频文件。这些音频文件的声音非常清晰(而且声音总是一样的)。声音由一些字母组​​成,但我只是不知道如何构建一个好的语法。

有没有办法使用 Microsoft.Speech 构建葡萄牙语字母语法?

一些示例:

private static readonly Dictionary<string, string> _lettersGrammar = new Dictionary<string, string>() 
    {             
        { "a",       "a" },
        { "bê",      "b" },
        { "cê",      "c" },
        { "dê",      "d" },
        { "é",       "e" },
        { "efe",     "f" },
        { "gê",      "g" },
        { "agá",     "h" },
        { "i",       "i" },
        { "jota",    "j" },
        { "cá",      "k" },
        { "ele",     "l" },
        { "eme",     "m" },
        { "ene",     "n" },
        { "ó",       "o" },
        { "pê",      "p" },
        { "quê",     "q" },
        { "erre",    "r" },
        { "esse",    "s" },
        { "tê",      "t" },
        { "u",       "u" },
        { "vê",      "v" },
        { "dáblio",  "w" },
        { "xis",     "x" },
        { "ípsilon", "y" },
        { "zê",      "x" }
    };

recognizer = new SpeechRecognitionEngine (new CultureInfo("pt-BR"));
recognizer.LoadGrammar (new Grammar (new GrammarBuilder (new Choices (_lettersGrammar.Keys.ToArray ()))) { Name = "Letters_Grammar" });

recognizer.SpeechRecognitionRejected += SpeechRecognitionRejected;
recognizer.SpeechRecognized          += SpeechRecognized;
recognizer.RecognizeCompleted        += RecognizeCompletedHandler;

有什么建议吗?

非常感谢你们!

【问题讨论】:

  • 可能不是语法问题。可能您的文件质量低下(例如 8khz 电话输入)。
  • 可能是这个……但是声音很清晰……而且语法中只有几个单词……这很奇怪。感谢您的回答@NikolayShmyrev

标签: c# speech-recognition grammar


【解决方案1】:

我注意到的一件事是您没有设置GrammarBuilderCulture 属性。 GrammarBuilderCulture 属性必须与 SpeechRecognitionEngine 的属性匹配,否则您将无法获得任何识别。

Microsoft.Speech 识别引擎不支持听写,所以这不是一个选项。

您提供的语法与 一个 字母匹配。如果你想重复,你需要添加一个中间repeat GrammarBuilder

【讨论】:

  • 哇,谢谢 Erick =) 很棒的答案!只是想看看我是否理解......如果我的音频中必须有 10 个字母(并且只有 10 个)我必须像这样初始化我的语法吗? new GrammarBuilder (choices, 10, 10) { Culture = new CultureInfo("pt-BR") }
  • 是的,这需要正好 10 个字母。 8 或 9 个字母不匹配。
  • 这很奇怪......我运行了一个包含 10 个字母的样本......结果没问题......然后我包含了这个 10,10 参数并返回了 0 个匹配项...... whaaaaaaaaaat? oO
  • 如果没有最新的源代码很难诊断。
猜你喜欢
  • 1970-01-01
  • 2010-11-27
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多