В чем разница между System.Speech.Recognition и Microsoft.Speech.Recognition?

В .NET существует два похожих пространства имен и ассемблирования для распознавания речи. Я пытаюсь понять различия и когда это целесообразно использовать один или другой.

Появляется System.Speech.Recognition из сборки System.Speech(в System.Speech.dll). System.Speech.dll является базовой DLL в библиотеке классов .NET Framework 3.0 и более поздней версии

Существует также Microsoft.Speech.Recognition из сборки Microsoft.Speech(в microsoft.speech.dll). Microsoft.Speech.dll является частью UCMA 2.0 SDK

Я считаю, что документы запутаны, и у меня есть следующие вопросы:

System.Speech.Recognition говорит, что это для "Windows Desktop Speech Technology", означает ли это, что он не может использоваться на серверной ОС или не может использоваться для высокопроизводительных приложений?

В 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, такие как присутствие и рабочий процесс, я могу использовать API-интерфейс UCMA 2.0 без OCS. Это правда?

Если я создаю приложение простого распознавания для серверного приложения (скажем, я хочу автоматически записывать голосовую почту), и мне не нужны функции OCS, каковы различия между этими двумя API?

Ответ 1

Короткий ответ заключается в том, что Microsoft.Speech.Recognition использует версию сервера SAPI, а System.Speech.Recognition использует версию SAPI для рабочего стола.

API-интерфейсы в основном те же, но в основе движков разные. Как правило, движок сервера предназначен для приема звука с качеством телефона для приложений управления и контроля; система Desktop предназначена для приема высококачественного звука для приложений командной и контрольной и диктовки.

Вы можете использовать System.Speech.Recognition на серверной ОС, но он не предназначен для масштабирования почти так же, как Microsoft.Speech.Recognition.

Различия в том, что движок сервера не нуждается в обучении и будет работать с более низким качеством звука, но будет иметь более низкое качество распознавания, чем рабочий стол.

Ответ 2

Я нашел Erics answer действительно полезным, я просто хотел добавить еще некоторые подробности, которые я нашел.

System.Speech.Recognition можно использовать для программирования распознавателей рабочего стола. SAPI и Desktop распознаватели отправлены в продукты:

  • 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 - это управляемый API для OCS, который (я считаю) включает в себя распространяемый распознаватель
  • Речевая платформа Microsoft Server - распознаватель v10.2

Полный SDK для версии Microsoft Server Speech Platform 10.2 доступен по адресу 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. Инициаторы Inproc используются, когда одно приложение использует распознаватель или когда необходимо распознавать wav файлы или аудиопотоки (общие распознаватели не могут обрабатывать аудиофайлы, только аудио с устройств ввода).

Только распознаватели речи для настольных компьютеров включают грамматику диктовки (система предоставляет грамматику, используемую для бесплатной текстовой диктовки). Класс System.Speech.Recognition.DictationGrammar не имеет никакого дополнения в пространстве имен Microsoft.Speech.

Вы можете использовать API-интерфейсы для запроса определения ваших установленных recongizers

  • Рабочий стол: 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 - это также API, используемый для распознавателя Kinect. Это описано в статье MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx

Ответ 4

Кажется, что Microsoft написала статью, в которой разъясняются различия между Microsoft Speech Platform и Windows SAPI - https://msdn.microsoft.com/en-us/library/jj127858.aspx. Разница, которую я обнаружил при преобразовании кода распознавания речи для Kinect из Microsoft.Speech в System.Speech(см. http://github.com/birbilis/Hotspotizer), заключалась в том, что первая поддерживает SGRS-грамматики с tag-format = семантика/1.0-литералы, в то время как последнее не выполняется, и вам нужно преобразовать в семантику /1.0, изменив x на out = "x"; в тегах