好的语音识别API
Posted
技术标签:
【中文标题】好的语音识别API【英文标题】:good Speech recognition API 【发布时间】:2011-07-24 23:32:06 【问题描述】:我正在从事一个使用语音识别的大学项目。目前我正在 Windows 7 上开发它,我正在使用随 .net 一起提供的 system.speech API 包,我正在 C# 上进行。
我面临的问题是听写识别不够准确。然后,每当我启动我的应用程序时,桌面语音识别就会自动启动。这对我来说是一个很大的麻烦。由于我说的话已经不够清楚,并且相互冲突的识别被解释为命令和动作,如应用程序切换最小化正在执行。
这是我的应用程序的一个关键部分,我恳请您为我推荐任何好的语音 API,而不是这个微软的错误。哪怕只是简单的听写语法也能理解就好了。
【问题讨论】:
没有魔药。购买更好的麦克风并训练语音识别引擎。训练你如何与它说话也很有帮助。清晰的发音是关键。还要尝试将其保持在命令模式或听写模式。它需要一小组命令,或者使用句子构建来猜测它听到了什么单词。混合这些会使其表现不佳。 是的,保持它们分开确实会提高识别的准确性。谢谢... 你使用单词表吗?还是你想让它识别任何单词? 【参考方案1】:我认为桌面识别正在启动,因为您使用的是共享桌面识别器。您应该只为您的应用程序使用 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\n0 - 1.", exception.Source, exception.Message);
finally
recognizer.UnloadAllGrammars();
更多信息可以在What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition??上找到微软提供的各种语音引擎和 API 的比较信息?
【讨论】:
谢谢...我还有很长的路要走,但演示的时间越来越近了...我认为我必须更加努力地训练我的系统。感谢您的帮助。 很好的解释伙伴。真的帮了我很多。 由于SpeechRecognitionEngine
是一次性的,它应该在using
块中。毫无疑问,它在内部使用原生资源。【参考方案2】:
如果每个人都需要使用具有 Cortana 90% 准确率的语音识别引擎,则应遵循以下步骤。
步骤 1) 下载 Nugget 包 Microsoft.Windows.SDK.Contracts
Step 2) 迁移到SDK引用的包 --> https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/
上述 SDK 将为您提供 Win32 应用程序中的 windows 10 语音识别系统。必须这样做,因为使用此语音识别引擎的唯一方法是构建通用 Windows 平台应用程序。 我不建议制作 A.I.通用 Windows 平台中的应用程序,因为它具有沙盒功能。沙盒功能将应用程序隔离在一个容器中,它不允许它与任何硬件进行通信,它还会使文件访问变得非常痛苦,并且无法进行线程管理,只有异步功能。
步骤 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 函数中运行它们,async方法或异步任务方法。
为此,请转到操作系统中的设置 -> 隐私 -> 语音并检查是否允许在线语音识别。
【讨论】:
以上是关于好的语音识别API的主要内容,如果未能解决你的问题,请参考以下文章