System.Speech.Recognition 和 Microsoft.Speech.Recognition 之间有什么区别?
-
24-10-2019 - |
题
.NET 中有两个类似的用于语音识别的命名空间和程序集。我试图了解其中的差异以及何时适合使用其中一种。
System.Speech.Recognition 来自程序集 System.Speech(在 System.Speech.dll 中)。System.Speech.dll是.NET Framework类库3.0及更高版本中的核心DLL
还有来自程序集 Microsoft.Speech(位于 microsoft.speech.dll 中)的 Microsoft.Speech.Recognition。Microsoft.Speech.dll 是 UCMA 2.0 SDK 的一部分
我发现文档令人困惑,我有以下问题:
System.Speech.Recognition 说它是“Windows 桌面语音技术”,这是否意味着它不能在服务器操作系统上使用或不能用于大规模应用程序?
UCMA 2.0 语音 SDK ( http://msdn.microsoft.com/en-us/library/dd266409%28v=office.13%29.aspx )表示它需要 Microsoft Office Communications Server 2007 R2 作为先决条件。然而,我在会议上被告知,如果我不需要 OCS 功能(例如状态和工作流程),我可以使用 UCMA 2.0 语音 API,而不使用 OCS。这是真的?
如果我正在为服务器应用程序构建一个简单的识别应用程序(假设我想自动转录语音邮件)并且我不需要 OCS 的功能,那么这两个 API 之间有什么区别?
解决方案
简短的答案是Microsoft.speech.reventition使用SAPI的服务器版本,而system.speech.reventition使用SAPI的桌面版本。
API大多是相同的,但是基础发动机是不同的。通常,服务器引擎旨在接受命令和控制应用程序的电话质量音频;台式机旨在接受命令和控制和听写应用程序的高质量音频。
您可以在服务器操作系统上使用System.SpeeCh.recognition,但它的设计并不像Microsoft.speech.reventition一样缩放。
差异是服务器引擎不需要培训,并且会使用较低质量的音频,但识别质量的质量比台式机发动机较低。
其他提示
我发现 埃里克的回答 真的很有帮助,我只是想添加一些我发现的更多细节。
System.Speech.Recognition 可用于对桌面识别器进行编程。SAPI 和桌面识别器已包含在产品中:
- Windows XP:SAPI v5.1,无识别器
- Windows XP 平板电脑版:SAPI v5.1 和识别器 v6.1
- Windows Vista:SAPI v5.3 和识别器 v8.0
- Windows 7的:SAPI v5.4 和识别器 v8.0?
服务器带有 SAPI,但没有识别器:
- Windows Server 2003:SAPI v5.1,无识别器
- Windows Server 2008 和 2008 R2:SAPI v5.3?并且没有识别器
桌面识别器也出现在 Office 等产品中。
- 微软Office 2003:识别器 v6.1
Microsoft.Speech.Recognition 可用于对服务器识别器进行编程。服务器识别器已包含在产品中:
- 语音服务器(各种版本)
- Office Communications Server (OCS)(各种版本)
- UCMA – 这是 OCS 的托管 API,(我相信)包含一个可再分发的识别器
- Microsoft 服务器语音平台 – 识别器 v10.2
Microsoft Server Speech Platform 10.2 版本的完整 SDK 可在以下位置获取: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4. 。语音引擎可免费下载。版本 11 现已发布: http://www.microsoft.com/download/en/details.aspx?id=27226.
有关 Microsoft Speech Platform SDK 11 信息和下载,请参阅:
- 语言包 -http://www.microsoft.com/en-us/download/details.aspx?id=27224
- 运行时引擎 - http://www.microsoft.com/en-us/download/details.aspx?id=27225
- SDK-http://www.microsoft.com/en-us/download/details.aspx?id=27226
- MSDN 文档 - http://msdn.microsoft.com/en-us/library/dd266409
桌面识别器设计为运行 inproc 或共享。共享识别器在桌面上非常有用,其中使用语音命令来控制任何打开的应用程序。服务器识别器只能在进程内运行。当单个应用程序使用识别器或需要识别 wav 文件或音频流时(共享识别器无法处理音频文件,只能处理来自输入设备的音频),请使用 Inproc 识别器。
仅桌面语音识别器包含听写语法(系统提供用于自由文本听写的语法)。System.Speech.Recognition.DictationGrammar 类在 Microsoft.Speech 命名空间中没有补充。
您可以使用 API 来查询确定您安装的识别器
- 桌面:System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
- 服务器:Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
我发现我还可以通过查看注册表项来查看安装了哪些识别器:
- 桌面识别器:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech ecognizers okens
- 服务器识别器:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v10.0 ecognizers okens
- - 更新 - -
正如中所讨论的 Microsoft 语音识别 - 我需要添加什么参考资料?, 、Microsoft.Speech 也是用于 Kinect 识别器的 API。这在 MSDN 文章中有记录 http://msdn.microsoft.com/en-us/library/hh855387.aspx
这是语音库(MS Server语音平台)的链接:
似乎Microsoft写了一篇文章,该文章清除了有关Microsoft语音平台和Windows SAPI之间差异的内容 - https://msdn.microsoft.com/en-us/library/jj127858.aspx. 。我在将Kinect的语音识别代码从Microsoft.speech转换为System.speech时发现了自己的区别(请参阅 http://github.com/birbilis/hotspotizer)前者支持具有标记式的SGRS语法=语义/1.0升,而后者则不支持,您必须通过更改x将x更改为out =“ x”来转换为语义/1.0;在标签