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