Audioeingabe von KI-Brillen mit automatischer Spracherkennung verarbeiten

Anwendbare XR‑Geräte
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für diese Arten von XR-Geräten zu entwickeln.
AI Glasses

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