Gestire l'input audio dagli occhiali audio e dagli occhiali con display utilizzando il riconoscimento vocale automatico

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Audio e
occhiali con display

Puoi utilizzare il riconoscimento vocale automatico per riconoscere espressioni specifiche del tuo utente utilizzando SpeechRecognizer e trasformarle in testo. SpeechRecognizer è integrato in Android (senza richiedere librerie aggiuntive) e funziona anche offline.

Affinché SpeechRecognizer possa convertire la voce dell'utente in testo, l'utente deve concedere alla tua app l'autorizzazione RECORD_AUDIO. Per scoprire come richiedere questa autorizzazione per la tua app, consulta Richiedere le autorizzazioni hardware.

Instanzia SpeechRecognizer

Crea un'istanza di SpeechRecognizer nel metodo onCreate dell'attività proiettata in modo che sia disponibile per tutta la durata dell'attività:

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

Configura RecognitionListener

Il metodo setRecognitionListener consente di specificare l'oggetto in cui vengono effettuati i callback importanti, ad esempio in RecognitionListener.onResults, che il sistema chiama dopo aver riconosciuto la lingua parlata.

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

    }
    ...
}

Punti chiave sul codice

  • Viene eseguita una query sul bundle per due array. Il primo array include tutte le corrispondenze, mentre il secondo indica il livello di confidenza del sistema di riconoscimento vocale in ciò che è stato ascoltato. Gli indici di queste matrici corrispondono tra loro. Viene utilizzata la corrispondenza con il valore di affidabilità più alto (mostConfidentIndex).

  • Per determinare l'azione che l'utente vuole intraprendere, viene eseguita una corrispondenza di stringhe senza distinzione tra maiuscole e minuscole.

Approcci alternativi per la corrispondenza

Nell'esempio precedente, viene utilizzata la corrispondenza con il valore di affidabilità più alto. Questa scelta significa che il sistema deve essere abbastanza sicuro di ciò che ha compreso dall'utente, altrimenti non segnalerà una corrispondenza. Quando utilizzi questo approccio, potresti ottenere falsi negativi.

Un altro approccio potrebbe essere quello di esaminare tutte le corrispondenze indipendentemente dal livello di confidenza e trovare qualsiasi corrispondenza che corrisponda all'input che stai cercando. Al contrario, questo tipo di approccio potrebbe portare a un numero maggiore di falsi positivi. L'approccio da adottare dipende in gran parte dal tuo caso d'uso.

Inizia ascolto

Per iniziare ad ascoltare l'utente, specifica l'intent ACTION_RECOGNIZE_SPEECH quando chiami 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)

}

Punti chiave sul codice