Базовая подсистема PhraseRecognitionSubsystem — MRTK3

Примечание

Общие сведения о подсистемах в MRTK3 см. здесь.

Пакет Core Definitions включает PhraseRecognitionSubsystem, базовую реализацию MRTKSubsystem и IPhraseRecognitionSubsystem, который служит основой для подсистем, ответственных за распознавание ключевых слов и фраз в MRTK3. Конкретная реализация, поставляемая в составе MRTK, например WindowsPhraseRecognitionSubsystem, и другие потенциальные подсистемы распознавания фраз, которые вы можете создать, должны быть основаны на этом классе. Подсистема, наследующая от PhraseRecognitionSubsystem, может работать с SpeechInteractor для активации событий выбора в StatefulInteractable на основе параметров интерактивных объектов. Унаследованные подклассы также позволят зарегистрировать произвольные UnityAction для ключевого слова по вашему выбору, чтобы действие выполнялось при произнесении такого слова.

Дополнительные сведения см. в документации по конкретной реализации PhraseRecognitionSubsystem, которую вы хотите использовать.

Настройка

Примечание

В этом руководстве приведены инструкции по включению подсистемы в новом проекте MRTK (предполагается, что базовая настройка, не связанная с речью, уже выполнена). Если вы используете наш пример проекта, обратите внимание, что некоторые действия уже выполнены.

1. Включите подсистему распознавания речи

Выберите Project Settings>MRTK3Available MRTK Subsystems (Параметры проекта > MRTK3 > Доступные подсистемы MRTK) и включите нужные подсистемы распознавания речи.

2. Назначьте ресурс конфигурации (для определенных подсистем)

Для некоторых подсистем ресурс конфигурации требуется, чтобы он выполнялся нормально.

  1. Щелкните подсистему, включенную на шаге 1 настройки.
  2. Проверьте, отображается ли пустой слот Configuration Asset в разделе Subsystem Details (Сведения о подсистеме) справа. Если это так, создайте новую конфигурацию, выбрав Assets ->CreateMRTK>Subsystems>[имя_вашей_подсистемы] Config (Ресурсы > Создать > MRTK > Подсистемы > нужная подсистема > Настроить), а затем перетащите созданную конфигурацию в слот.
  3. После заполнения слота конфигурации измените параметры в только что созданной конфигурации для конкретного проекта. Не забудьте сохранить проект после завершения работы.

3. Убедитесь, что объект GameObject в подсистеме речи MRTK активен (требуется для StatefulInteractable (например, кнопок) для ответа на фразы).

Убедитесь, что параметр "Платформа MRTK XR" > "Речь MRTK" активен, а подключенный скрипт включен.

4. Убедитесь, что в параметрах проигрывателя заданы правильные возможности

Различные реализации PhraseRecognitionSubsystem имеют разные необходимые возможности. Дополнительные сведения см. в документации по подсистеме, которую хотите использовать.

Для примера, чтобы использовать WindowsPhraseRecognitionSubsystem на платформе UWP, выберите Project Settings>Player>Publishing Settings>Capabilities (Параметры проекта > Проигрыватель > Параметры публикации > Возможности) и убедитесь, что выбрана возможность Microphone (Микрофон).

5. Запустите сцену на устройстве или в редакторе

Теперь проект должен быть готов к запуску на устройстве или в редакторе.

Использование PhraseRecognitionSubsystem

Использование PhraseRecognitionSubsystem с StatefulInteractable (например, кнопками)

Самый простой способ использования PhraseRecognitionSubsystem — использовать его с StatefulInteractable. Если выполняется шаг 3, SpeechInteractor активирует события выбора StatefulInteractable при выполнении условий, указанных в таких интерактивных объектах (например, произносится указанная фраза и взгляд переводится на интерактивный объект). Сведения о настраиваемых параметрах см. в инспекторе StatefulInteractable и SpeechInteractor ("Платформа MRTK XR" > "Речь MRTK").

Использование PhraseRecognitionSubsystem вручную

Альтернативным способом использования PhraseRecognitionSubsystem является регистрация фразы вручную и активация требуемой UnityAction при произнесении фразы.

// Get the first running phrase recognition subsystem.
var phraseRecognitionSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem<PhraseRecognitionSubsystem>();

// If we found one...
if (phraseRecognitionSubsystem != null)
{
    // Register a phrase and its associated action with the subsystem
    phraseRecognitionSubsystem.CreateOrGetEventForPhrase("your phrase").AddListener(() => Debug.Log("Phrase recognized"));
}