.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之间有什么区别?
答案 0 :(得分:100)
简短的回答是Microsoft.Speech.Recognition使用SAPI的服务器版本,而System.Speech.Recognition使用桌面版的SAPI。
API大致相同,但底层引擎不同。通常,服务器引擎被设计为接受用于命令的电话质量音频。控制应用;桌面引擎旨在接受命令和指令的更高质量的音频。控制和听写申请。
您可以在服务器操作系统上使用System.Speech.Recognition,但它的设计规模几乎与Microsoft.Speech.Recognition一样。
不同之处在于服务器引擎不需要培训,并且可以使用质量较低的音频,但识别质量低于桌面引擎。
答案 1 :(得分:51)
我发现Eric’s answer非常有用,我只是想添加一些我发现的细节。
System.Speech.Recognition可用于对桌面识别器进行编程。 SAPI和桌面识别器已在产品中附带:
服务器附带SAPI,但没有识别器:
桌面识别器也已发布在办公室等产品中。
Microsoft.Speech.Recognition可用于对服务器识别器进行编程。服务器识别器已在产品中发布:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4提供了完整的Microsoft Server Speech Platform 10.2版SDK。语音引擎是免费下载的。版本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查询确定已安装的识别器
我发现通过查看注册表项,我还可以看到安装了哪些识别器:
---更新---
正如Microsoft Speech Recognition - what reference do I have to add?中所讨论的,Microsoft.Speech也是用于Kinect识别器的API。这在MSDN文章http://msdn.microsoft.com/en-us/library/hh855387.aspx
中有记录答案 2 :(得分:7)
以下是语音库(MS Server语音平台)的链接:
Microsoft Server Speech Platform 10.1 Released (SR and TTS in 26 languages)