首页 文章

良好的语音识别API

提问于
浏览
27

我正在开展一个大学项目,我正在使用语音识别 . 目前我正在Windows 7上开发它,我正在使用与.net一起提供的system.speech API包,我正在C#上进行 .

我面临的问题是听写识别不够准确 . 然后每当我启动应用程序时,桌面语音识别都会自动启动 . 这对我来说是一个很大的麻烦 . 正如我所说的话已经不够清楚,并且冲突的识别被解释为正在执行诸如应用程序切换最小化之类的命令和动作 .

这是我的应用程序的一个关键部分,我恳请你为我提出任何好的语音API,除了这个微软的错误 . 即使它只能理解简单的听写语法也会很好 .

1 回答

  • 35

    我认为桌面识别正在启动,因为您使用的是共享桌面识别器 . 您应该仅为您的应用程序使用inproc识别器 . 您可以通过在应用程序中实例化SpeechRecognitionEngine()来完成此操作 .

    由于您使用的是听写语法和桌面窗口识别器,我相信它可以由扬声器训练以提高其准确性 . 完成Windows 7识别器培训,看看准确度是否有所提高 .

    为了开始使用.NET语音,几年前在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx发表了一篇非常好的文章 . 这可能是迄今为止我发现的最好的介绍性文章 . 它有点过时了,但非常好 . (测试结束后,AppendResultKeyValue方法被删除了 . )

    这是一个快速示例,它显示了一个最简单的.NET窗体应用程序,可以使用我能想到的听写语法 . 这应该适用于Windows Vista或Windows 7.我创建了一个表单 . 在它上面放了一个按钮,使按钮变大 . 添加了对System.Speech和行的引用:

    using System.Speech.Recognition;
    

    然后我将以下事件处理程序添加到button1:

    private void button1_Click(object sender, EventArgs e)
    {         
        SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
        Grammar dictationGrammar = new DictationGrammar();
        recognizer.LoadGrammar(dictationGrammar);
        try
        {
            button1.Text = "Speak Now";
            recognizer.SetInputToDefaultAudioDevice();
            RecognitionResult result = recognizer.Recognize();
            button1.Text = result.Text;
        }
        catch (InvalidOperationException exception)
        {
            button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message);
        }
        finally
        {
            recognizer.UnloadAllGrammars();
        }                          
    }
    

    有关比较微软发布的各种语音引擎和API的更多信息,请访问What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?

相关问题