MS System.Speech.Recognizer和SpeechRecognitionEngine的准确性

dar*_*bid 6 .net c# vb.net speech-recognition

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

我已经训练了我的Windows 7 PC,并且还添加了加密和解密这两个词,因为我发现它们非常相似.识别器已经存在使这两者产生差异的问题.

我遇到的问题是它经常识别事物.我已经把信心设置为0.93,因为我的声音在一个安静的房间里,说的确切的话有时只会达到0.93.但是,如果我打开收音机,播音员或歌曲的声音可能意味着这个识别器认为它已经以超过0.93的信心听到了"decrpyt the email".

也许Lady Gaga正在回击Applause秘密解密电子邮件:-)

任何人都可以帮助解决如何做一些事情,使这个识别器可行.

事实上,识别器也在拾取键盘噪音,因为"解密了电子邮件".我不明白这是怎么可能的.

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

Eri*_*own 12

如果System.Speech识别器正在监听的唯一内容是"加密电子邮件",那么识别器将产生大量误报.(特别是在嘈杂的环境中).如果您添加DictationGrammar(尤其是语音语法)与此同时,DictationGrammar会拿起噪音,并且可以在事件处理程序检查语法(EG)的名字丢弃假认可.

一个(子集)示例:

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)