80

.NET 中有两个用于语音识别的类似命名空间和程序集。我试图了解差异以及何时适合使用其中一种。

有来自程序集 System.Speech 的 System.Speech.Recognition(在 System.Speech.dll 中)。System.Speech.dll 是 .NET Framework 类库 3.0 及更高版本中的核心 DLL

还有来自 Microsoft.Speech 程序集的 Microsoft.Speech.Recognition(在 microsoft.speech.dll 中)。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 功能(如存在和工作流),我可以在没有 OCS 的情况下使用 UCMA 2.0 Speech API。这是真的?

如果我正在为服务器应用程序构建一个简单的识别应用程序(比如我想自动转录语音邮件)并且我不需要 OCS 的功能,那么这两个 API 之间有什么区别?

4

4 回答 4

103

简短的回答是 Microsoft.Speech.Recognition 使用 SAPI 的服务器版本,而 System.Speech.Recognition 使用 SAPI 的桌面版本。

API 基本相同,但底层引擎不同。通常,服务器引擎旨在接受用于命令和控制应用程序的电话质量音频;桌面引擎旨在为命令与控制和听写应用程序接受更高质量的音频。

您可以在服务器操作系统上使用 System.Speech.Recognition,但它的扩展性不如 Microsoft.Speech.Recognition。

不同之处在于服务器引擎不需要培训,可以处理质量较低的音频,但识别质量低于桌面引擎。

于 2010-06-06T02:39:04.147 回答
53

我发现Eric 的回答真的很有帮助,我只是想添加一些我发现的更多细节。

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 等产品中提供。

  • Microsoft 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 的信息和下载,请参阅:

桌面识别器旨在运行 inproc 或共享。共享识别器在使用语音命令控制任何打开的应用程序的桌面上很有用。服务器识别器只能运行 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\Recognizers\Tokens
  • 服务器识别器:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v10.0\Recognizers\Tokens

- - 更新 - -

Microsoft 语音识别中所述 - 我必须添加什么参考?, Microsoft.Speech 也是用于 Kinect 识别器的 API。这记录在 MSDN 文章http://msdn.microsoft.com/en-us/library/hh855387.aspx

于 2010-06-08T15:50:12.007 回答
7

这是语音库(MS 服务器语音平台)的链接:

Microsoft Server Speech Platform 10.1 发布(26 种语言的 SR 和 TTS)

于 2010-10-01T19:02:27.317 回答
5

似乎微软写了一篇文章,澄清了微软语音平台和 Windows SAPI 之间的差异 - https://msdn.microsoft.com/en-us/library/jj127858.aspx。在将 Kinect 的语音识别代码从 Microsoft.Speech 转换为 System.Speech(请参阅http://github.com/birbilis/Hotspotizer)时,我发现自己的一个不同之处在于前者支持带有 tag-format=semantics/1.0- 的 SGRS 语法文字,而后者没有,您必须通过将 x 更改为 out="x"; 来转换为语义/1.0;在标签

于 2015-09-09T20:55:20.770 回答