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
- Lorsque vous utilisez
ACTION_RECOGNIZE_SPEECH, vous devez également spécifier l'optionEXTRA_LANGUAGE_MODEL. LANGUAGE_MODEL_FREE_FORMest destiné à la parole conversationnelle.