В чем разница между 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", означает ли это, что ее нельзя использовать на серверной ОС или нельзя использовать для высокопроизводительных приложений?
В 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?
4 ответа
Краткий ответ: Microsoft.Speech.Recognition использует версию SAPI для сервера, а System.Speech.Recognition использует версию SAPI для настольных компьютеров.
API в основном одинаковы, но базовые движки разные. Как правило, серверный механизм предназначен для приема аудиосигнала телефонного качества для приложений управления и контроля; движок рабочего стола предназначен для приема высококачественного звука как для командно-контрольных приложений, так и для диктовки.
Вы можете использовать System.Speech.Recognition на серверной ОС, но он не предназначен для такого же масштабирования, как Microsoft.Speech.Recognition.
Разница в том, что серверный движок не будет нуждаться в обучении и будет работать с более низким качеством звука, но будет иметь более низкое качество распознавания, чем движок рабочего стола.
Я нашел ответ Эрика очень полезным, я просто хотел добавить еще несколько деталей, которые нашел.
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: распознаватель v6.1
Microsoft.Speech.Recognition можно использовать для программирования распознавателей сервера. Распознаватели серверов поставляются в следующих продуктах:
- Речевой сервер (различные версии)
- Сервер Office Communications (OCS) (различные версии)
- UCMA - это управляемый API для OCS, который (я считаю) включает в себя распространяемый распознаватель
- Microsoft Server Speech Platform - распознаватель версии 10.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 см. В следующих разделах:
- Языковые пакеты - http://www.microsoft.com/en-us/download/details.aspx?id=27224
- Среда выполнения - http://www.microsoft.com/en-us/download/details.aspx?id=27225
- SDK - http://www.microsoft.com/en-us/download/details.aspx?id=27226
- Документация MSDN - http://msdn.microsoft.com/en-us/library/dd266409
Распознаватели рабочего стола предназначены для запуска inproc или shared. Распознаватели общего доступа полезны на рабочем столе, где голосовые команды используются для управления любыми открытыми приложениями. Распознаватели серверов могут работать только inproc. Распознаватели Inproc используются, когда одно приложение использует распознаватель или когда необходимо распознать wav-файлы или аудиопотоки (общие распознаватели не могут обрабатывать аудиофайлы, только звук с устройств ввода).
Только настольные распознаватели речи включают грамматику диктовки (система предоставляет грамматику, используемую для диктовки свободного текста). Класс System.Speech.Recognition.DictationGrammar не имеет дополнения в пространстве имен Microsoft.Speech.
Вы можете использовать API для запроса, чтобы определить ваши установленные реконгизаторы
- Рабочий стол: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
- Сервер: Microsoft.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers()
Я обнаружил, что я также могу видеть, какие распознаватели установлены, посмотрев на ключи реестра:
- Настольные распознаватели: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\ Распознаватели \ Токены
- Распознаватели серверов: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v10.0\ Распознаватели \ Токены
--- Обновить ---
Как уже говорилось в Microsoft Speech Recognition, какую ссылку я должен добавить? Microsoft.Speech - это также API, используемый для распознавателя Kinect. Это описано в статье MSDN http://msdn.microsoft.com/en-us/library/hh855387.aspx
Вот ссылка на речевую библиотеку (речевая платформа MS Server):
Выпущена Microsoft Server Speech Platform 10.1 (SR и TTS на 26 языках)
Похоже, что 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=semantics/1.0- литералы, в то время как последний не делает, и вы должны преобразовать в семантику / 1.0, изменив x на out="x"; в тегах