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

Применимые устройства 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)

}

Ключевые моменты кода