Розпізнавання голосового мовлення у Windows Phone 8 (speech-to-text)

Крім синтезу голосового мовленняWindows Phone 8 SDK містить API для розпізнавання голосового мовлення та голосових команд. У цій статті ми розглянемо першу частину – як можна розпізнати окремі слова чи фрази за допомогою цього API.

Щоб скористатися послугами цього API, нам необхідно дозволити наступні можливості для нашого WP8 програми: ID_CAP_NETWORKING , ID_CAP_MICROPHONE , ID_CAP_SPEECH_RECOGNITION .

Роздільна здатність ID_CAP_NETWORKING потрібна через те, що процес розпізнавання відбувається не на пристрої, а в хмарі. Тому для використання цієї можливості вам необхідно мати підключення до мережі.

Список мов, що підтримуються для розпізнавання, визначений у спеціальному словнику, який доступний при зверненні до властивості InstalledSpeechRecognizers.All . Розмістимо на сторінці ListPicker , що містить всі мови, що підтримуються, а також кнопку для запуску розпізнавання тексту:

Заповнимо ListPicker інформацією про доступні мови:

Найпростіший код для розпізнавання виглядатиме ось так:

При натисканні на кнопку з'явиться вікно ОС, що вказує на розпізнавання мови. Це вікно має низку налаштувань, які можна змінювати з коду програми. Доступні вони через властивість Settings об'єкта SpeechRecognizerUI :

  • ListenText - заголовок вікна розпізнавання мови;
  • ExampleText - приклад того, що користувач може сказати пристрою (наприклад, так/ні на односкладове питання);
  • ShowConfirmation - встановлює, чи необхідно відображати підтвердження про успішність розпізнавання (якщо опція відключена, то програма повинна сама взяти на себе обов'язок про повідомлення користувача у разі невдачі);
  • ReadoutEnabled - встановлює, чи потрібно зачитувати фразу післярозпізнавання.

Приклад коду, в якому задаються параметри діалогового вікна розпізнавання:

Якщо логіка програми не вимагає відображення системного вікна розпізнавання мовлення, можна замінити використання методу RecognizeWithUIAsync на RecognizeAsync, яке доступне через властивість Recognizer.

Якщо логіка програми передбачає як результат одну з кількох заздалегідь зумовлених фраз, можна визначити свій словник, який використовуватиметься при розпізнаванні. Задати власний словник можна через властивість Recognizer.Grammars:

У результаті ми отримали програму, здатну розпізнати голосову мову в рамках нашої програми: