Você pode usar o reconhecimento automático de fala (ASR) para reconhecer declarações específicas
do usuário usando SpeechRecognizer e transformá-las em texto.
O SpeechRecognizer é integrado ao Android (não exigindo bibliotecas adicionais) e funciona mesmo off-line.
Para que o SpeechRecognizer converta a fala do usuário em texto, ele precisa
conceder ao app a permissão RECORD_AUDIO. Para saber como solicitar
essa permissão para seu app, consulte Solicitar permissões de hardware.
Instanciar SpeechRecognizer
Instancie o SpeechRecognizer no método
onCreate() da atividade dos óculos de IA para que ele fique disponível durante todo o ciclo de vida da
atividade:
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)
...
}
Configurar seu RecognitionListener
O método setRecognitionListener() permite especificar o objeto em que
callbacks importantes são feitos, como em RecognitionListener.onResults(),
que o sistema chama depois de reconhecer a linguagem falada.
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
}
}
}
...
}
Pontos principais sobre o código
O pacote é consultado para duas matrizes. A primeira matriz inclui todas as correspondências, e a segunda é a confiança do reconhecedor de voz no que foi ouvido. Os índices dessas matrizes correspondem entre si. A correspondência com o maior nível de confiança (
mostConfidentIndex) é usada.Uma correspondência de string que não diferencia maiúsculas de minúsculas é realizada para determinar qual ação o usuário quer realizar.
Abordagens alternativas ao fazer a correspondência
No exemplo anterior, a correspondência com o maior nível de confiança é usada. Isso significa que o sistema precisa ter bastante certeza do que entendeu do usuário, caso contrário, não vai sinalizar uma correspondência. Ao usar essa abordagem, você pode receber falsos negativos.
Outra abordagem seria analisar todas as correspondências, independente do nível de confiança, e encontrar qualquer uma que se ajuste à entrada que você está procurando. Em contraste, esse tipo de abordagem pode levar a mais falsos positivos. A abordagem que você deve adotar depende muito do seu caso de uso.
Começar a ouvir
Para começar a ouvir o usuário, especifique a intent ACTION_RECOGNIZE_SPEECH
ao chamar 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)
}
Pontos principais sobre o código
- Ao usar
ACTION_RECOGNIZE_SPEECH, também é necessário especificar o extraEXTRA_LANGUAGE_MODEL. - O
LANGUAGE_MODEL_FREE_FORMé destinado à fala conversacional.