Obsługa danych wejściowych audio z okularów audio i okularów wyświetlających za pomocą automatycznego rozpoznawania mowy

Odpowiednie urządzenia z XR
Ten przewodnik pomoże Ci tworzyć aplikacje na te typy urządzeń z XR.
Okulary z dźwiękiem i
wyświetlaczem

Możesz użyć automatycznego rozpoznawania mowy (ASR), aby rozpoznawać konkretne wypowiedzi użytkownika za pomocą SpeechRecognizer i przekształcać je w tekst. SpeechRecognizer jest wbudowany w Androida (nie wymaga dodatkowych bibliotek) i działa nawet offline.

Aby SpeechRecognizer mógł przekształcić mowę użytkownika w tekst, użytkownik musi przyznać Twojej aplikacji uprawnienie RECORD_AUDIO. Aby dowiedzieć się, jak poprosić o to uprawnienie w aplikacji, przeczytaj artykuł Prośba o uprawnienia do sprzętu.

Tworzenie instancji SpeechRecognizer

Utwórz instancję SpeechRecognizer w metodzie przewidywanego działania onCreate, aby była dostępna przez cały czas trwania działania:

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)
    ...
}

Konfigurowanie RecognitionListener

Metoda setRecognitionListener umożliwia określenie obiektu, w którym są wykonywane ważne wywołania zwrotne, np. w RecognitionListener.onResults, które system wywołuje po rozpoznaniu mowy.

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
            }
        }

    }
    ...
}

Najważniejsze informacje o kodzie

  • W pakiecie wysyłane są zapytania o 2 tablice. Pierwsza tablica zawiera wszystkie dopasowania, a druga – pewność rozpoznawania mowy co do tego, co zostało usłyszane. Indeksy tych tablic odpowiadają sobie. Używane jest dopasowanie z najwyższym poziomem ufności (mostConfidentIndex).

  • Aby określić, jakie działanie chce wykonać użytkownik, przeprowadzane jest dopasowanie ciągów znaków bez uwzględniania wielkości liter.

Alternatywne metody dopasowywania

W poprzednim przykładzie używane jest dopasowanie z najwyższym poziomem ufności. Oznacza to, że system musi być dość pewny tego, co zrozumiał od użytkownika, aby oznaczyć dopasowanie. W przypadku tej metody mogą wystąpić fałszywe negatywy.

Innym rozwiązaniem może być przejrzenie wszystkich dopasowań niezależnie od pewności i znalezienie dopasowania, które pasuje do szukanych danych wejściowych. Z kolei takie podejście może prowadzić do większej liczby fałszywych alarmów. Metoda, którą należy zastosować, zależy w dużej mierze od przypadku użycia.

Zacznij słuchać

Aby zacząć słuchać użytkownika, podczas wywoływania startListening określ ACTION_RECOGNIZE_SPEECH intencję.

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)

}

Najważniejsze informacje o kodzie