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

79

В .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», означает ли это, что его нельзя использовать в серверной ОС или для крупномасштабных приложений?

В пакете SDK UCMA 2.0 Speech ( 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?

Майкл Леви
источник

Ответы:

102

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

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

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

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

Эрик Браун
источник
52

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

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

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

Майкл Леви
источник
3
Если я правильно прочитал документы, только настольные распознаватели речи включают грамматику диктовки (предоставленная системой грамматика, используемая для диктовки свободного текста). Класс System.Speech.Recognition.DictationGrammar не имеет дополнений в пространстве имен Microsoft.Speech.
Майкл Леви,
Согласно API MSDN, в C # есть DictationGrammar и WildcardGrammar (и я их использую). Но я не знаю, как активировать его через XML (взломанный парсер?) См. Также: stackoverflow.com/questions/12101120/…
Жан-Филипп Энкосс
Я установил итальянский язык, загруженный с microsoft.com/en-us/download/details.aspx?id=27224, но System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers показывает en-US как единственный активный язык для распознавания речи. Я что-то упускаю?
POW
7

Вот ссылка на речевую библиотеку (речевая платформа MS Server):

Выпущена платформа Microsoft Server Speech Platform 10.1 (SR и TTS на 26 языках)

Switch Commerce
источник
2
10.2 тоже была выпущена недавно. microsoft.com/downloads/en/…
Майкл Леви
Спасибо за информацию. Я вижу, что теперь включает валидатор грамматики. Я ломал себе голову, пытаясь найти ошибки в тех, которые создавал. Где я должен следить за новостями о будущих выпусках?
Switch Commerce
"Где я должен следить за новостями о будущих релизах?" отличный вопрос !!! microsoft.com/speech/developers.aspx устарел. Речевые блоги, такие как blogs.msdn.com/b/speak и blogs.msdn.com/b/speech , не всегда содержат последние обновления. Вы можете попробовать gotspeech.net или связанные сайты, такие как gotuc.net . Но, как видите, я тоже не нашел отличного источника, чтобы быть в курсе последних событий.
Майкл Леви,
1
самая последняя на момент написания - версия 11 - microsoft.com/en-us/download/details.aspx?id=27225
Джордж Бирбилис,
Кстати, так как грамматика валидатор упоминалось выше, см msdn.microsoft.com/en-us/library/hh378407%28v=office.14%29.aspx для списка грамматических средств
Джордж Birbilis
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 = semantics / 1.0- литералы, а последний - нет, и вам нужно преобразовать его в semantics / 1.0, изменив x на out = "x"; на тегах

Джордж Бирбилис
источник
3
Кстати, вы можете найти мой код SpeechLib полезным ( SpeechLib.codeplex.com ). Вы можете удалить оттуда ссылку System.Speech и использовать вместо этого Microsoft.Speech и установить соответствующий символ условной компиляции (см. Источники) для использования Microsoft.Speech в коде (в основном влияет на предложения using, остальная часть кода идентична)
Джордж Бирбилис, 04
1
SpeechLib, упомянутый в приведенном выше комментарии, перемещен на github.com/zoomicon/SpeechLib (поскольку Codeplex теперь
заморожен