6

我目前正在通过从 xml 文件加载一个非常简单的规则来测试 SpeechRecognitionEngine。事实上,它是(“解密电子邮件”、“删除加密”)或(“加密电子邮件”、“添加加密”)之间的简单关系。

我已经训练了我的 Windows 7 PC 并另外添加了加密和解密这两个词,因为我意识到它们非常相似。识别器在区分这两者时已经存在问题。

我遇到的问题是它过于频繁地识别事物。我将置信度设置为 0.93,因为当我在安静的房间里说出确切的单词时,我的声音有时只能达到 0.93。但是,如果我打开收音机,播音员的声音或歌曲可能意味着这个识别器认为它已经以超过 0.93 的信心听到了“解密电子邮件”这个词。

也许 Lady Gaga 正在隐藏 Applause 来秘密解密电子邮件 :-)

任何人都可以帮助弄清楚如何做一些事情来使这个识别器可行。

事实上,识别器也将键盘噪音作为“解密电子邮件”。我不明白这怎么可能。

除了我的编辑伙伴之外,MS Speech Microsoft.Speech 和 System.Speech 至少有两个托管命名空间 - 对于这个问题,重要的是要知道它是 System.Speech。

4

1 回答 1

13

如果 System.Speech 识别器正在侦听的唯一内容是“加密电子邮件”,那么识别器将产生大量误报。(特别是在嘈杂的环境中。)如果您并行添加一个 DictationGrammar(特别是一个发音语法),DictationGrammar 将拾取噪音,您可以在事件处理程序中检查语法的(例如)名称以丢弃虚假认可。

一个(子集)示例:

    static void Main(string[] args)
    {
        Choices gb = new Choices();
        gb.Add("encrypt the document");
        gb.Add("decrypt the document");
        Grammar commands = new Grammar(gb);
        commands.Name = "commands";
        DictationGrammar dg = new DictationGrammar("grammar:dictation#pronunciation");
        dg.Name = "Random";
        using (SpeechRecognitionEngine recoEngine = new SpeechRecognitionEngine(new CultureInfo("en-US")))
        {
        recoEngine.SetInputToDefaultAudioDevice();
        recoEngine.LoadGrammar(commands);
        recoEngine.LoadGrammar(dg);
        recoEngine.RecognizeCompleted += recoEngine_RecognizeCompleted;
        recoEngine.RecognizeAsync();

        System.Console.ReadKey(true);
        recoEngine.RecognizeAsyncStop();
        }
    }

    static void recoEngine_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
    {
        if (e.Result.Grammar.Name != "Random")
        {
            System.Console.WriteLine(e.Result.Text);
        }
    }
于 2013-09-17T05:30:45.860 回答