Audioeingabe von Audio- und Displaybrillen mit automatischer Spracherkennung verarbeiten

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
Audio- &
Displaybrillen

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 projizierten Aktivitä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 Konfidenzniveau des Spracherkenners für 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 bedeutet, dass das System sich ziemlich sicher sein muss, was es vom Nutzer verstanden hat, sonst wird keine Übereinstimmung gemeldet. Bei diesem Ansatz kann es zu fälschlicherweise negativen Ergebnissen kommen.

Eine andere Möglichkeit besteht darin, sich alle Übereinstimmungen unabhängig von der Wahrscheinlichkeit anzusehen und nach einer Übereinstimmung zu suchen, die zu der gewünschten Eingabe passt. Im Gegensatz dazu könnte diese Art von Ansatz zu mehr falsch positiven Ergebnissen führen. Die Vorgehensweise hängt weitgehend von Ihrem Anwendungsfall ab.

Jetzt reinhören

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