Gérer les entrées audio des lunettes IA à l'aide de la reconnaissance vocale automatique

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Lunettes IA

Vous pouvez utiliser la reconnaissance vocale automatique (ASR) pour reconnaître des énoncés spécifiques de votre utilisateur à l'aide de SpeechRecognizer et les convertir en texte. SpeechRecognizer est intégré à Android (aucune bibliothèque supplémentaire n'est requise) et fonctionne même hors connexion.

Pour que SpeechRecognizer puisse convertir la parole de l'utilisateur en texte, celui-ci doit accorder à votre application l'autorisation RECORD_AUDIO. Pour savoir comment demander cette autorisation pour votre application, consultez Demander des autorisations matérielles.

Instancier SpeechRecognizer

Instanciez SpeechRecognizer dans la méthode onCreate() de l'activité de vos lunettes IA afin qu'il soit disponible pendant toute la durée de vie de l'activité :

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

Configurer votre RecognitionListener

La méthode setRecognitionListener() vous permet de spécifier l'objet dans lequel les rappels importants sont effectués, comme dans RecognitionListener.onResults(), que le système appelle après avoir reconnu la langue parlée.

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

    }
    ...
}

Points clés concernant le code

  • Le bundle est interrogé pour deux tableaux. Le premier tableau inclut toutes les correspondances et le second indique le degré de confiance du système de reconnaissance vocale dans ce qui a été entendu. Les indices de ces tableaux se correspondent. La correspondance présentant la valeur de confiance la plus élevée (mostConfidentIndex) est utilisée.

  • Une mise en correspondance de chaîne non sensible à la casse est effectuée pour déterminer l'action que l'utilisateur souhaite effectuer.

Autres approches pour la mise en correspondance

Dans l'exemple précédent, la correspondance avec la valeur de confiance la plus élevée est utilisée. Ce choix signifie que le système doit être assez sûr de ce qu'il a compris de l'utilisateur, sinon il ne signalera pas de correspondance. Lorsque vous utilisez cette approche, vous pouvez obtenir de faux négatifs.

Une autre approche consiste à examiner toutes les correspondances, quelle que soit la confiance, et à trouver toute correspondance qui correspond à l'entrée que vous recherchez. En revanche, ce type d'approche peut entraîner davantage de faux positifs. L'approche à adopter dépend en grande partie de votre cas d'utilisation.

Commencer à écouter

Pour commencer à écouter l'utilisateur, spécifiez l'intention ACTION_RECOGNIZE_SPEECH lorsque vous appelez 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)

}

Points clés concernant le code