27

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

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

这是我的应用程序的一个关键部分,我恳请您为我推荐任何好的语音 API,而不是这个微软的错误。即使它可以理解简单的听写语法也很好。

4

2 回答 2

36

我认为桌面识别正在开始,因为您正在使用共享桌面识别器。您应该只为您的应用程序使用 inproc 识别器。您可以通过在应用程序中实例化 SpeechRecognitionEngine() 来做到这一点。

由于您使用的是听写语法和桌面窗口识别器,我相信它可以由说话者进行训练以提高其准确性。通过 Windows 7 识别器培训,看看准确性是否有所提高。

要开始使用 .NET 演讲,几年前在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx上发表了一篇非常好的文章。这可能是迄今为止我发现的最好的介绍性文章。它有点过时了,但很有帮助。(AppendResultKeyValue 方法在 beta 之后被删除。)

这是一个快速示例,它显示了使用我能想到的听写语法的最简单的 .NET Windows 窗体应用程序之一。这应该适用于 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();
    }                          
}

在 System.Speech.Recognition 和 Microsoft.Speech.Recognition 之间有什么区别??

于 2011-03-29T13:35:56.907 回答
0

如果每个人都需要使用具有 Cortana 90% 准确率的语音识别引擎,则应遵循以下步骤。

步骤 1) 下载 Nugget 包 Microsoft.Windows.SDK.Contracts

步骤 2) 迁移到包引用 SDK --> https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/

上述 SDK 将为您提供 Win32 应用程序中的 windows 10 语音识别系统。必须这样做,因为使用此语音识别引擎的唯一方法是构建通用 Windows 平台应用程序。我不建议在通用 Windows 平台中制作 AI 应用程序,因为它具有沙盒功能。沙盒功能将应用程序隔离在一个容器中,它不允许它与任何硬件通信,它还会使文件访问变得非常痛苦,并且不可能进行线程管理,只有异步功能。

步骤 3) 在命名空间部分添加这个命名空间。此命名空间具有与在线语音识别相关的所有功能。

using Windows.Media.SpeechRecognition;

步骤 4) 添加语音识别实现。



Task.Run(async()=>
{
  try
  {
    
    var speech = new SpeechRecognizer();
    await speech.CompileConstraintsAsync();
    SpeechRecognitionResult result = await speech.RecognizeAsync();
    TextBox1.Text = result.Text;
  }
  catch{}
});

Windows 10 SpeechRecognizer 类中的大多数方法都需要异步调用,这意味着您必须在 Task.Run(async()=>{}) lambda 函数中使用异步参数、异步方法或异步任务方法。

为此,请转到操作系统中的设置 -> 隐私 -> 语音并检查是否允许在线语音识别。

于 2021-11-19T22:04:13.523 回答