Gestire l'input audio dagli occhiali AI utilizzando il riconoscimento vocale automatico

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
AI Glasses

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 autorizzazioni hardware.

Instanzia SpeechRecognizer

Crea un'istanza di SpeechRecognizer nel metodo onCreate() dell'attività degli occhiali AI 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 il tuo RecognitionListener

Il metodo setRecognitionListener() consente di specificare l'oggetto in cui vengono effettuati 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 certezza del sistema di riconoscimento vocale in merito a ciò che è stato ascoltato. Gli indici di queste matrici corrispondono tra loro. Viene utilizzata la corrispondenza con il valore di confidenza più alto (mostConfidentIndex).

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

Approcci alternativi per la corrispondenza

Nell'esempio precedente, viene utilizzata la corrispondenza con il valore di confidenza 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 l'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