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 (ASR) özelliğini kullanabilirsiniz.
SpeechRecognizer, Android'e yerleştirilmiştir (ek kitaplık gerektirmez) ve çevrimdışı olduğunuzda 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, öngörülen etkinliğinizin
onCreate yönteminde oluşturun. Böylece, etkinlik yaşam boyu kullanılabilir:
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 ilişkin güven düzeyini 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 anlamına gelir. Aksi takdirde eşleşme işaretlenmez. 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_MODELekstrasını da belirtmeniz gerekir.LANGUAGE_MODEL_FREE_FORM, sohbet tarzı konuşmalar için tasarlanmıştır.