Możesz użyć automatycznego rozpoznawania mowy (ASR), aby rozpoznać konkretne wypowiedzi użytkownika za pomocą SpeechRecognizer i przekształcić je w tekst.
SpeechRecognizer jest wbudowany w Androida (nie wymaga dodatkowych bibliotek) i działa nawet w trybie offline.
Aby SpeechRecognizer mogła przekształcić mowę użytkownika w tekst, musi on przyznać Twojej aplikacji uprawnienie RECORD_AUDIO. Aby dowiedzieć się, jak poprosić o to uprawnienie w przypadku swojej aplikacji, przeczytaj artykuł Prośba o uprawnienia do sprzętu.
Utwórz instancję SpeechRecognizer
Utwórz instancję SpeechRecognizer w metodzie onCreate() aktywności okularów AI, aby była dostępna przez cały czas trwania aktywności:
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)
...
}
Skonfiguruj element RecognitionListener
Metoda setRecognitionListener() umożliwia określenie obiektu, w którym wykonywane są ważne wywołania zwrotne, np. w RecognitionListener.onResults(), które system wywołuje po rozpoznaniu języka mówionego.
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
}
}
}
...
}
Najważniejsze informacje o kodzie
Pakiet jest sprawdzany pod kątem 2 tablic. Pierwsza tablica zawiera wszystkie dopasowania, a druga – pewność rozpoznawania mowy co do tego, co zostało usłyszane. Indeksy tych tablic odpowiadają sobie. Używane jest dopasowanie o najwyższej wartości ufności (
mostConfidentIndex).Aby określić, jakie działanie chce wykonać użytkownik, przeprowadzane jest dopasowanie ciągu znaków bez rozróżniania wielkości liter.
Alternatywne podejścia do dopasowywania
W poprzednim przykładzie użyte zostanie dopasowanie o najwyższej wartości ufności. Oznacza to, że system musi mieć pewność, co zrozumiał od użytkownika, aby oznaczyć dopasowanie. W przypadku tego podejścia możesz otrzymać fałszywe negatywy.
Innym podejściem może być przejrzenie wszystkich wyników niezależnie od poziomu ufności i znalezienie dowolnego wyniku pasującego do szukanych danych wejściowych. Z kolei takie podejście może prowadzić do większej liczby wyników fałszywie pozytywnych. Podejście, które należy zastosować, zależy w dużej mierze od przypadku użycia.
Zacznij słuchać
Aby rozpocząć słuchanie użytkownika, podczas wywoływania funkcji startListening() określ intencję ACTION_RECOGNIZE_SPEECH.
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)
}
Najważniejsze informacje o kodzie
- Jeśli używasz atrybutu
ACTION_RECOGNIZE_SPEECH, musisz też podać dodatkowy atrybutEXTRA_LANGUAGE_MODEL. LANGUAGE_MODEL_FREE_FORMjest przeznaczony do mowy konwersacyjnej.