System.Speech.Recognition和Microsoft.Speech.Recognition有什么区别?

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

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

还有Microsoft.Speech.Recognition从程序集Microsoft.Speech(在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功能,我可以使用UCMA 2.0 Speech API,而不需要OCS。 这是真的?

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

简而言之,Microsoft.Speech.Recognition使用SAPI的Server版本,而System.Speech.Recognition使用SAPI的Desktop版本。

这些API大部分是相同的,但底层引擎是不同的。 通常,服务器引擎被设计为接受电话质量的音频用于命令和控制应用; 桌面引擎旨在为命令和控制以及听写应用程序接受更高质量的音频。

您可以在服务器操作系统上使用System.Speech.Recognition,但它的设计不像Microsoft.Speech.Recognition那样大。

不同的是,服务器引擎不需要培训,可以使用较低质量的音频,但识别质量会比桌面引擎低。

我发现埃里克的答案真的很有帮助,我只是想添加一些我发现的细节。

System.Speech.Recognition可以用来编程桌面识别器。 SAPI和桌面识别器已经在产品中发货:

  • Windows XP:SAPI v5.1和不识别器
  • Windows XP Tablet Edition:SAPI v5.1和Recognizer v6.1
  • Windows Vista:SAPI v5.3和Recognizer v8.0
  • Windows 7:SAPI v5.4和Recognizer v8.0?

服务器带有SAPI,但没有识别器:

  • Windows Server 2003:SAPI v5.1和不识别器
  • Windows Server 2008和2008 R2:SAPI v5.3? 没有识别器

桌面识别器也出现在办公室等产品中。

  • Microsoft Office 2003:识别器v6.1

Microsoft.Speech.Recognition可以用来编程服务器识别器。 服务器识别器已在产品中发货:

  • 语音服务器(各种版本)
  • Office Communications Server(OCS)(各种版本)
  • UCMA – 这是一个托管的OCS(我相信)包括一个可再发行的识别器的API
  • 微软服务器语音平台 – 识别器v10.2

完整的Microsoft Server Speech Platform 10.2版SDK可以从http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4获取 。 语音引擎是免费下载的。 现在可以从http://www.microsoft.com/download/en/details.aspx?id=27226获取版本11。

有关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

以下是语音库(MS Server Speech Platform)的链接:

微软服务器语音平台10.1发布(26种语言的SR和TTS)

似乎微软写了一篇文章,清除有关微软语音平台和Windows SAPI之间的差异 – https://msdn.microsoft.com/en-us/library/jj127858.aspx 。 我将Kinect的语音识别代码从Microsoft.Speech转换为System.Speech(见http://github.com/birbilis/Hotspotizer )时发现我自己的区别在于前者支持SGRS语法,其tag-format = semantics / 1.0-文字,而后者不,你必须转换为语义/ 1.0通过改变X出=“X”; 在标签