Mit der automatischen Spracherkennung (ASR) können Sie bestimmte Äußerungen Ihres Nutzers mithilfe von SpeechRecognizer erkennen und in Text umwandeln.
SpeechRecognizer ist in Android integriert (es sind keine zusätzlichen Bibliotheken erforderlich) und funktioniert auch offline.
Damit SpeechRecognizer die Sprache des Nutzers in Text umwandeln kann, muss der Nutzer Ihrer App die Berechtigung RECORD_AUDIO erteilen. Informationen zum Anfordern dieser Berechtigung für Ihre App
SpeechRecognizer instanziieren
Instanziieren Sie SpeechRecognizer in der Methode onCreate() Ihrer KI-Brillenaktivität, damit sie für die gesamte Lebensdauer der Aktivität verfügbar ist:
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)
...
}
RecognitionListener konfigurieren
Mit der Methode setRecognitionListener() können Sie das Objekt angeben, in dem wichtige Callbacks erfolgen, z. B. in RecognitionListener.onResults(), das vom System aufgerufen wird, nachdem es gesprochene Sprache erkannt hat.
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
}
}
}
...
}
Wichtige Punkte zum Code
Das Bundle wird für zwei Arrays abgefragt. Das erste Array enthält alle Übereinstimmungen und das zweite das Vertrauen des Spracherkenners in das, was gehört wurde. Die Indexe dieser Arrays entsprechen einander. Es wird die Übereinstimmung mit dem höchsten Konfidenzwert (
mostConfidentIndex) verwendet.Es wird ein String-Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung durchgeführt, um zu ermitteln, welche Aktion der Nutzer ausführen möchte.
Alternative Ansätze beim Abgleich
Im vorherigen Beispiel wird die Übereinstimmung mit dem höchsten Konfidenzwert verwendet. Das System muss sich also ziemlich sicher sein, was es vom Nutzer verstanden hat, damit eine Übereinstimmung erkannt wird. Bei diesem Ansatz kann es zu fälschlicherweise negativen Ergebnissen kommen.
Eine andere Möglichkeit besteht darin, sich alle Übereinstimmungen unabhängig von der Konfidenz anzusehen und nach einer Übereinstimmung zu suchen, die dem gesuchten Input entspricht. Im Gegensatz dazu könnte diese Art von Ansatz zu mehr falsch positiven Ergebnissen führen. Welchen Ansatz Sie wählen sollten, hängt weitgehend von Ihrem Anwendungsfall ab.
Spracheingabe starten
Wenn Sie dem Nutzer zuhören möchten, geben Sie beim Aufrufen von startListening() die Absicht ACTION_RECOGNIZE_SPEECH an.
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)
}
Wichtige Punkte zum Code
- Wenn Sie
ACTION_RECOGNIZE_SPEECHverwenden, müssen Sie auch dasEXTRA_LANGUAGE_MODEL-Extra angeben. LANGUAGE_MODEL_FREE_FORMist für gesprochene Sprache in Unterhaltungen vorgesehen.