В чем разница между 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
Ответ 3
Вот ссылка на речевую библиотеку (речевая платформа MS Server):
Выпущена речевая платформа Microsoft Server 10.1 (SR и TTS на 26 языках)
Ответ 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"; в тегах