优秀的语音识别API

29

我正在进行一项大学项目,使用语音识别技术。目前我正在Windows 7上开发,并使用随带 .net 的 system.speech API 包,使用 C# 进行开发。

我遇到的问题是语音识别不够准确。每当我启动应用程序时,桌面语音识别会自动启动,这给我带来了很大的麻烦。由于我说的话不够清晰,在冲突的情况下,它可能被解释为命令和操作,例如切换应用程序和最小化等操作。

这是我的应用程序中关键的一部分,我请求您推荐除了这个Microsoft失误之外的其他好的语音API。即使它只能理解简单的口头语法也可以。


3
没有神奇的药水。购买更好的麦克风并训练语音识别引擎,培养与其交流的方式也会很有帮助。清晰的发音是关键。同时尝试保持命令模式或口述模式,需要一小组固定的命令,或者使用逐句构建来猜测它听到的单词。混用这些模式会使其表现不佳。 - Tedd Hansen
是的,将它们分开确实提高了识别的准确性。谢谢... - swordfish
你使用单词列表吗?还是希望它能识别任何单词? - Saeed A Suleiman
2个回答

36
我认为桌面识别开始是因为您使用了共享的桌面识别器。您应该只为您的应用程序使用内部识别器,可以通过在您的应用程序中实例化一个SpeechRecognitionEngine()来实现。由于您正在使用听写语法和桌面 Windows 识别器,我相信它可以通过训练说话者来提高准确性。请进行Windows 7 识别器的训练,看看准确性是否有所提高。
要开始使用 .NET 语音,有一篇非常好的文章在几年前发布在http://msdn.microsoft.com/en-us/magazine/cc163663.aspx上。这可能是我迄今为止找到的最好的入门文章。它有点过时,但非常有帮助。(AppendResultKeyValue 方法在 beta 版本之后被删除了。)
以下是一个快速示例,展示了一个使用听写语法的最简单的.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();
    }                          
}

你可以在这里了解有关 Microsoft 发布的不同语音引擎和 API 的更多信息。


谢谢您...我还有很长的路要走,但我的演示时间越来越近了...我想我需要更加努力和快速地训练我的系统。感谢您的帮助。 - swordfish
很好的解释,伙计。真的帮了我很多。 - Viku
4
由于SpeechRecognitionEngine是可释放的,所以应该在using块中使用。毫无疑问,它在内部使用本机资源。 - Drew Noakes

0

如果每个人都需要使用一个准确率达到90%的Cortana语音识别引擎,可以按照以下步骤进行操作:

第一步: 下载Nugget包Microsoft.Windows.SDK.Contracts

第二步: 迁移SDK的包引用--> https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/

上述提到的SDK将为您提供Win32应用程序中的Windows 10语音识别系统。这是必须完成的步骤,因为使用这种语音识别引擎的唯一方法是构建通用Windows平台应用程序。 我不建议在通用Windows平台上制作人工智能应用程序,因为它有沙盒功能。沙盒功能将应用程序隔离在容器中,不允许其与任何硬件通信,也会使文件访问变得非常麻烦,线程管理也不可能,只能使用异步函数。

第三步: 在命名空间部分添加此命名空间。该命名空间包含所有与在线语音识别相关的功能。

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函数中使用async参数、async方法或async Task方法来运行它们。
为了使其正常工作,请转到操作系统中的“设置” -> “隐私” -> “语音”,并检查是否允许在线语音识别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接