我正在 Windows 7 上开发一个语音识别项目,我正在使用 .net 附带的 system.speech API 包,我正在 C# 上进行。
我面临的问题是听写识别不够准确。然后,每当我启动应用程序时,桌面语音识别都会自动启动。这对我来说是一个很大的麻烦。由于我所说的话已经不够清晰,并且冲突的识别被解释为正在执行诸如应用程序切换最小化之类的命令和动作。
除了这个微软的错误之外,你能为我推荐任何好的语音 API 吗?能听懂简单的听写语法就好了。
我认为桌面识别正在开始,因为您正在使用共享桌面识别器。您应该仅将 inproc 识别器用于您的应用程序。您可以通过在应用程序中实例化 SpeechRecognitionEngine() 来实现此目的。
既然您使用的是听写语法和桌面Windows识别器,我相信它可以由说话者进行训练以提高其准确性。完成 Windows 7 识别器训练,看看准确性是否有所提高。
要开始使用 .NET 语音,几年前在 http://msdn.microsoft.com/en-us/magazine/cc163663.aspx 发表了一篇非常好的文章。这可能是迄今为止我找到的最好的介绍性文章。它有点过时,但非常有帮助。 (AppendResultKeyValue 方法在测试版后被删除。)
这里是一个快速示例,展示了使用我能想到的听写语法的最简单的 .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();
}
}
有关比较 Microsoft 提供的各种语音引擎和 API 的更多信息,请访问 System.Speech.Recognition 和 Microsoft.Speech.Recognition 之间有什么区别??
如果每个人都需要使用具有 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 平台应用程序。 我不建议制作 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 类中的大多数方法都需要异步调用,这意味着您必须在具有异步参数、异步方法或异步任务方法。
为了使其正常工作,请转到操作系统中的“设置”->“隐私”->“语音”,然后检查是否允许在线语音识别。