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

Mic*_*evy 78 .net speech-recognition speech ucs ucma2.0

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

从程序集System.Speech(在System.Speech.dll中)有System.Speech.Recognition.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 Speech 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之间有什么区别?

Eri*_*own 101

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

API大致相同,但底层引擎不同.通常,服务器引擎旨在接受命令和控制应用程序的电话质量音频; Desktop引擎旨在为命令和控制以及听写应用程序提供更高质量的音频.

您可以在服务器操作系统上使用System.Speech.Recognition,但它的设计规模几乎与Microsoft.Speech.Recognition不同.

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


Mic*_*evy 51

我发现Eric的答案非常有用,我只是想添加一些我发现的细节.

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:Recognizer 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中有记录.

  • 如果我正确阅读文档,只有桌面语音识别器包括听写语法(系统提供的语法用于自由文本听写).System.Speech.Recognition.DictationGrammar类在Microsoft.Speech命名空间中没有补充. (3认同)

小智 7

以下是语音库(MS Server语音平台)的链接:

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

  • 10.2 最近也发布了。http://www.microsoft.com/downloads/en/details.aspx?FamilyID=bb0f72cb-b86b-46d1-bf06-665895a313c7 (2认同)

Geo*_*lis 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;在标签

  • 顺便说一句,您可能会发现我的 SpeechLib 代码很有用(http://SpeechLib.codeplex.com)。您可以从那里删除 System.Speech 引用并使用 Microsoft.Speech 并设置适当的条件编译符号(请参阅源代码)以在代码中使用 Microsoft.Speech(主要影响 using 子句,其余代码相同) (3认同)