Спонсор: Intel
Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 23.10.2013 | Доступ: свободный | Студентов: 1451 / 463 | Длительность: 09:26:00
Специальности: Программист
Лекция 4:

Распознавание речи в Intel Perceptual Computing SDK

Режим голосового управления

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

В случае программирования распознавания речи с помощью класса UtilPipeline используется функция SetVoiceCommands, которая в качестве параметра принимает набор команд, размещенный в переменной типа: std::vector<std::wstring>, поэтому необходимо озаботиться созданием такой переменной перед вызовом функции SetVoiceCommands.

В случае программирования распознавания речи без использования класса UtilPipeline, необходимо сконфигурировать ненулевую грамматику, например, это можно сделать так:

pxcUID gid;
rec->CreateGrammar(&gid);
rec->AddGrammar(gid,1,L"One");
rec->AddGrammar(gid,2,L"Two");
rec->AddGrammar(gid,3,L"Three");
rec->SetGrammar(gid);

После того как список команд задан, можно определить действие, которое должно выполнить приложение в ответ на полученную команду, после успешного распознавания, разумеется.

Синтез речи

Процесс программирования синтеза речи предполагает создание экземпляра модуля синтеза речи и передачи данных в него, при разработке приложения можно выделить следующие этапы (начало очень похоже на программирование распознавания речи):

Создание сессии: SDK сессия – ключевой объект любого приложения, использующего SDK, и должен создаваться в первую очередь. Для создания сессии необходимо вызвать функцию PXCSession_Create.

PXCSmartPtr<PXCSession> session; 
PXCSession_Create(&session);

Определение реализации модуля: в приложении используется функция PXCSession::CreateImpl для создания экземпляра интерфейса модуля синтеза речи PXCVoiceSynthesis:

PXCVoiceSynthesis *tts=0;
session->CreateImpl<PXCVoiceSynthesis>(&tts);

Инициализация модуля: для инициализации модуля используются две функции QueryProfile и SetProfile. Первая функция возвращает доступные конфигурации. Вторая устанавливает текущую активную конфигурацию.

PXCVoiceSynthesis::ProfileInfo profile;
tts->QueryProfile(0, &profile);
tts->SetProfile(&profile);

Цикл обработки данных: приложение использует функцию QueueSentence для создания очереди предложений для синтеза, вызывает функцию ProcessAudioAsync для создания аудио буфера, который содержит синтезированную речь и передачи содержимого буфера на любое аудио устройство вывода:

pxcUID sid;
tts->QueueSentence(L"Speak this",10,&sid);
PXCSmartPtr<PXCAudio> sample;
PXCSmartSP sp;
for (;;) {
   pxcStatus sts=tts-> ProcessAudioAsync(sid,&sample,&sp);
   if (sts<PXC_STATUS_NO_ERROR) break;
   sp->Synchronize();
   // передать участок синтезированной речи на устройство вывода
}

Приложение может создавать очередь и синтезировать множество предложений. Функция QueueSentence возвращает идентификатор предложения в очереди, который может быть использован приложением в функции ProcessAudioAsync. SDK модуль синтезирует каждое предложение независимо и параллельно если позволяет реализация.

Контрольные вопросы:

  1. Как выглядит схема речевого взаимодействия человека и компьютера? На каком этапе может быть использован пакет Intel Perceptual Computing SDK?
  2. Подумайте, как могут выглядеть основные направления использования голосовых интерфейсов.
  3. Какие сложности возникают в процессе автоматического распознавания речи?
  4. По каким признакам, характеризующим основные возможности, можно классифицировать системы автоматического распознавания речи?
  5. Каковы основные компоненты любой системы автоматического распознавания речи?
  6. Каковы особенности и возможности модуля распознавания речи Intel Perceptual Computing SDK?
  7. Что необходимо иметь в виду разработчику использующему модуль распознавания речи?
  8. Каковы особенности программирования распознавания речи с использованием класса UtilPipeline и без него?
  9. Каковы особенности программирования голосового управления?
  10. Каковы особенности программирования синтеза речи?
Гульзия Калымова
Гульзия Калымова
Александр Радченко
Александр Радченко