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


79

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

程序集System.Speech中有System.Speech.Recognition(位于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/zh-cn/library/dd266409%28v=office.13%29.aspx)表示,它需要Microsoft Office Communications Server 2007 R2作为先决条件。但是,在会议上有人告诉我,如果我不需要诸如状态和工作流程之类的OCS功能,我可以使用不带OCS的UCMA 2.0 Speech API。这是真的?

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

Answers:


102

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

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

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

区别在于Server引擎不需要培训,并且可以使用较低质量的音频,但是与Desktop引擎相比,其识别质量较低。


52

我发现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?而且没有识别器

桌面识别器也已在Office等产品中提供。

  • Microsoft Office 2003:识别器v6.1

Microsoft.Speech.Recognition可用于对服务器识别器进行编程。服务器识别器已随附在产品中:

  • 语音服务器(各种版本)
  • Office Communications Server(OCS)(各种版本)
  • UCMA –这是OCS的托管API(我相信)包括可重新分发的识别器
  • Microsoft服务器语音平台–识别器v10.2

可从http://www.microsoft.com/downloads/zh-CN/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4获得Microsoft Server Speech Platform 10.2版本的完整SDK 。语音引擎是免费下载的。现在可以从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/zh-cn/library/hh855387.aspx中对此进行了记录


3
如果我正确阅读了文档,则只有桌面语音识别器会包含听写语法(系统提供的用于自由文本听写的语法)。System.Speech.Recognition.DictationGrammar类在Microsoft.Speech命名空间中没有补码。
Michael Levy 2010年

根据MSDN API,C#中有一个DictationGrammar和WildcardGrammar(我使用它)。但我不知道如何激活它throught XML还看到:(黑客解析器?)stackoverflow.com/questions/12101120/...
让-菲利普·昂科斯

我安装了从microsoft.com/en-us/download/details.aspx?id=27224下载的意大利语,但是System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers将en-US显示为语音识别的唯一活动语言。我想念什么吗?
战俘

7

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

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


2
10.2也是最近发布的。microsoft.com/downloads/en/...
迈克尔·利维

谢谢(你的)信息。我看到现在包括一个语法验证器。我很头疼,想找出正在创建的错误。我应该在哪里继续关注有关未来版本的新闻?
Switch Commerce 2010年

“我应该在哪里继续关注有关未来版本的新闻?” 是个好问题!!!microsoft.com/speech/developers.aspx已过时。语音博客(例如blogs.msdn.com/b/speakblogs.msdn.com/b/speech)并不总是具有最新更新。您可以尝试gotspeech.net或诸如gotuc.net之类的相关站点。但是,正如您所看到的,我也没有找到保持最新状态的好资源。
Michael Levy 2010年


顺便说一句,因为上面提到了语法验证器,请参见msdn.microsoft.com/en-us/library/hh378407%28v=office.14%29.aspx,以获取语法工具列表
George Birbilis

4

似乎Microsoft撰写了一篇文章,澄清了有关Microsoft Speech Platform和Windows SAPI之间的区别的内容-https: //msdn.microsoft.com/zh-cn/library/jj127858.aspx。在将Kinect的语音识别代码从Microsoft.Speech转换为System.Speech(请参阅http://github.com/birbilis/Hotspotizer)时,我发现自己的一个不同之处是前者支持tag-format = semantics / 1.0-的SGRS语法。字面量,而后者不然,您必须通过将x更改为out =“ x”来转换为语义/1.0;在标签


3
顺便说一句,您可能会发现我的SpeechLib代码很有用(SpeechLib.codeplex.com)。您可以从此处删除System.Speech引用,而改用Microsoft.Speech,并在代码中设置适当的条件编译符号(请参阅源代码)以使用Microsoft.Speech(大多数情况下会影响using子句,其余代码相同)
George Birbilis '16

1
上述评论中提到的SpeechLib已移至github.com/zoomicon/SpeechLib(因为Codeplex现在已冻结为存档模式)
George Birbilis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.