Puedes usar el reconocimiento de voz automático (ASR) para reconocer expresiones específicas de tu usuario con SpeechRecognizer y convertirlas en texto.
SpeechRecognizer está integrado en Android (no requiere bibliotecas adicionales) y funciona incluso sin conexión.
Para que SpeechRecognizer convierta el habla del usuario en texto, este debe otorgarle a tu app el permiso RECORD_AUDIO. Para obtener información sobre cómo solicitar este permiso para tu app, consulta Cómo solicitar permisos de hardware.
Crea una instancia de SpeechRecognizer
Crea una instancia de SpeechRecognizer en el método onCreate() de la actividad de tus lentes con IA para que esté disponible durante el ciclo de vida de la actividad:
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 tu RecognitionListener
El método setRecognitionListener() te permite especificar el objeto en el que se realizan devoluciones de llamada importantes, como en RecognitionListener.onResults(), que el sistema llama después de reconocer el lenguaje hablado.
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
}
}
}
...
}
Puntos clave sobre el código
Se consulta el paquete para obtener dos arrays. El primer array incluye todas las coincidencias y el segundo es la confianza del reconocedor de voz en lo que se escuchó. Los índices de estos arrays se corresponden entre sí. Se usa la coincidencia con el valor de confianza más alto (
mostConfidentIndex).Se realiza una coincidencia de cadena sin distinción entre mayúsculas y minúsculas para determinar qué acción quiere realizar el usuario.
Enfoques alternativos para la correlación
En el ejemplo anterior, se usa la coincidencia con el valor de confianza más alto. Esta elección significa que el sistema debe tener bastante certeza sobre lo que entendió del usuario, o no marcará una coincidencia. Cuando usas este enfoque, es posible que obtengas falsos negativos.
Otro enfoque podría ser revisar todas las coincidencias, independientemente de la confianza, y encontrar cualquier coincidencia que se ajuste a la entrada que buscas. Por el contrario, este tipo de enfoque podría generar más falsos positivos. El enfoque que debes adoptar depende en gran medida de tu caso de uso.
Empezar a escuchar
Para comenzar a escuchar al usuario, especifica el intent ACTION_RECOGNIZE_SPEECH cuando llames a 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)
}
Puntos clave sobre el código
- Cuando usas
ACTION_RECOGNIZE_SPEECH, también debes especificar el elemento adicionalEXTRA_LANGUAGE_MODEL. LANGUAGE_MODEL_FREE_FORMse diseñó para el habla conversacional.