Распознавание речи в 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 модуль синтезирует каждое предложение независимо и параллельно если позволяет реализация.
Контрольные вопросы:
- Как выглядит схема речевого взаимодействия человека и компьютера? На каком этапе может быть использован пакет Intel Perceptual Computing SDK?
- Подумайте, как могут выглядеть основные направления использования голосовых интерфейсов.
- Какие сложности возникают в процессе автоматического распознавания речи?
- По каким признакам, характеризующим основные возможности, можно классифицировать системы автоматического распознавания речи?
- Каковы основные компоненты любой системы автоматического распознавания речи?
- Каковы особенности и возможности модуля распознавания речи Intel Perceptual Computing SDK?
- Что необходимо иметь в виду разработчику использующему модуль распознавания речи?
- Каковы особенности программирования распознавания речи с использованием класса UtilPipeline и без него?
- Каковы особенности программирования голосового управления?
- Каковы особенности программирования синтеза речи?