Gérer les entrées audio provenant de lunettes audio et de lunettes connectées à 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 audio et
d'affichage

Vous pouvez utiliser la reconnaissance vocale automatique 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 convertisse la parole de votre utilisateur en texte, l'utilisateur 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 le SpeechRecognizer dans la méthode onCreate onCreate de votre activité projetée afin qu'il soit disponible pendant toute la durée 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 des rappels importants sont effectués, par exemple dans RecognitionListener.onResults, que le système appelle après avoir reconnu le langage parlé.

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 correspond à la confiance du moteur de reconnaissance vocale dans ce qui a été entendu. Les indices de ces tableaux se correspondent. La correspondance avec la valeur de confiance la plus élevée (mostConfidentIndex) est utilisée.

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

Autres approches lors de 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 des faux négatifs.

Une autre approche consiste à examiner toutes les correspondances, quel que soit le niveau de 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.

Écouter

Pour commencer à écouter l'utilisateur, spécifiez l'ACTION_RECOGNIZE_SPEECH intent 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