SpeechRecognizer kullanarak kullanıcınızın belirli ifadelerini tanımak ve bunları metne dönüştürmek için Otomatik Konuşma Tanıma'yı (ASR) kullanabilirsiniz.
SpeechRecognizer, Android'e yerleştirilmiştir (ek kitaplık gerektirmez) ve internet bağlantısı olmasa bile çalışır.
SpeechRecognizer'nın kullanıcınızın konuşmasını metne dönüştürmesi için kullanıcının uygulamanıza RECORD_AUDIO izni vermesi gerekir. Uygulamanız için bu izni nasıl isteyeceğinizi öğrenmek istiyorsanız Donanım izinleri isteme başlıklı makaleyi inceleyin.
SpeechRecognizer'ı başlatma
SpeechRecognizer öğesini yapay zeka gözlüğü etkinliğinizin onCreate() yönteminde, etkinliğin yaşam süresi boyunca kullanılabilir olacak şekilde oluşturun:
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'ınızı yapılandırma
setRecognitionListener() yöntemi, önemli geri çağırmaların yapıldığı nesneyi belirtmenize olanak tanır. Örneğin, sistemin konuşma dilini tanıdıktan sonra çağırdığı RecognitionListener.onResults().
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
}
}
}
...
}
Kodla ilgili önemli noktalar
Paket, iki dizi için sorgulanır. İlk dizi tüm eşleşmeleri, ikinci dizi ise konuşma tanıma sisteminin duyulanlara olan güvenini içerir. Bu dizilerin indeksleri birbirine karşılık gelir. En yüksek güven değerine (
mostConfidentIndex) sahip eşleşme kullanılır.Kullanıcının hangi işlemi yapmak istediğini belirlemek için büyük/küçük harfe duyarlı olmayan bir dize eşleşmesi gerçekleştirilir.
Eşleştirme sırasında alternatif yaklaşımlar
Önceki örnekte, en yüksek güven değerine sahip eşleşme kullanılır. Bu seçim, sistemin kullanıcıdan anladığı konuda oldukça emin olması gerektiği veya eşleşmeyi işaretlemeyeceği anlamına gelir. Bu yaklaşımı kullanırken yanlış negatif sonuçlar alabilirsiniz.
Diğer bir yaklaşım ise güven düzeyinden bağımsız olarak tüm eşleşmelere göz atmak ve aradığınız girişe uygun eşleşmeleri bulmaktır. Bunun aksine, bu tür bir yaklaşım daha fazla yanlış pozitif sonuç verebilir. Benimsenecek yaklaşım büyük ölçüde kullanım alanınıza bağlıdır.
Dinlemeye başla
Kullanıcıyı dinlemeye başlamak için startListening()'ı çağırırken ACTION_RECOGNIZE_SPEECH amacını belirtin.
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)
}
Kodla ilgili önemli noktalar
ACTION_RECOGNIZE_SPEECHkullanırkenEXTRA_LANGUAGE_MODELekini de belirtmeniz gerekir.LANGUAGE_MODEL_FREE_FORM, sohbet tarzı konuşmalar için tasarlanmıştır.