Обработка аудиовхода с аудио- и дисплейных очков с помощью автоматического распознавания речи.

Применимые устройства XR
Данное руководство поможет вам создавать приложения для устройств XR такого типа.
Аудио и
Очки для демонстрации

Вы можете использовать автоматическое распознавание речи (ASR) для распознавания конкретных фраз пользователя с помощью SpeechRecognizer и преобразования их в текст. SpeechRecognizer встроен в Android (не требует дополнительных библиотек) и работает даже в автономном режиме.

Для того чтобы SpeechRecognizer мог преобразовывать речь пользователя в текст, пользователю необходимо предоставить вашему приложению разрешение RECORD_AUDIO . Чтобы узнать, как запросить это разрешение для вашего приложения, см. раздел «Запрос разрешений оборудования» .

Создать экземпляр SpeechRecognizer

Создайте экземпляр SpeechRecognizer в методе onCreate вашей проецируемой активности , чтобы он был доступен на протяжении всего времени существования активности:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    //The RECORD_AUDIO permission must be granted to your app before instantiation

    speechRecognizer = SpeechRecognizer.createOnDeviceSpeechRecognizer(this)
    speechRecognizer?.setRecognitionListener(recognitionListener)
    ...
}

Настройте свой RecognitionListener

Метод setRecognitionListener позволяет указать объект, в котором выполняются важные обратные вызовы, например, в RecognitionListener.onResults , который система вызывает после распознавания речи.

val recognitionListener = object : RecognitionListener {

    override fun onResults(results: Bundle?) {

        val matches = results?.getStringArrayList(RESULTS_RECOGNITION)
        val confidences = results?.getFloatArray(CONFIDENCE_SCORES)

        val mostConfidentIndex = confidences!!.indices.maxByOrNull { confidences[it] }

        if (mostConfidentIndex != null){
            val spokenText = matches[mostConfidentIndex]

            if (spokenText.equals("Start my Run", ignoreCase = true)){
                // User indicated they want to start a run
            }
        }

    }
    ...
}

Основные моменты, касающиеся кода.

  • Запрос к пакету данных выполняется по двум массивам. Первый массив содержит все совпадения, а второй — степень уверенности распознавателя речи в услышанном. Индексы этих массивов соответствуют друг другу. Используется совпадение с наивысшим значением уверенности ( mostConfidentIndex ).

  • Для определения желаемого действия пользователя выполняется сопоставление строк без учета регистра.

Альтернативные подходы при сопоставлении

В приведенном выше примере используется совпадение с наивысшим значением достоверности. Такой выбор означает, что система должна быть достаточно уверена в том, что она поняла от пользователя, иначе она не отметит совпадение. При использовании этого подхода могут возникать ложные отрицательные результаты.

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

Начните слушать

Чтобы начать прослушивание пользователя, укажите интент ACTION_RECOGNIZE_SPEECH при вызове функции startListening .

override fun onStart() {
    super.onStart()

    val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
        putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
    }

    speechRecognizer?.startListening(intent)

}

Основные моменты, касающиеся кода.