Google Speech-To-Text API

Herkese Merhabalar,

Mobiler.dev içerisinde yayınlanan bu mobi içeriğinde sizlere Android platformunda Google’ın altyapısından yararlanarak sesli olarak söylediklerinizi nasıl yazıya çevirebileceğinizden bahsetmek istiyorum.


Google'ın Speech-To-Text API'si eş zamanlı oluşturulan ses verileri tanıyarak, tüm sesi işlendikten sonra sonuçları text olarak döndürebiliyor.



Kullanım isteğinize göre iki ayrı yöntemden bahsetmek istiyorum. Bu iki yöntem arasındaki temel fark ise birinde ses okumayı başlattığınızda Google ikonu içeren dialog penceresi sizi karşılarken diğerinde ise daha özgürsünüz. İsterseniz kendinize özgü bir dialog penceresi oluşturabilir veya bir Toast uyarı mesajıyla dinlemenin başladığını belirtebilirsiniz. Yönteminizi yapacağınız projeye göre seçebilirsiniz.


Şahsen Google'a hazır dialog hizmetinden dolayı çok teşekkür etsek de uygulamamda daha özgür olmak için kendi tasarımımla dialog penceresi oluşturma taraftarıyım. Ancak projenizin küçük bir kısmı için kullanacaksanız ilk yöntemin kodlarının daha basit olduğunu söyleyebilirim.


Şimdi bu iki yönteme dilerseniz daha yakından bakalım.


1 - Google Dialog ile Ses Tanıma


ADIM 1 - Tanıma İşlemini Buton'a Bağlama


Ses dinlemeyi ve işlemeyi speak() metoduna yaptırarak bu metodu b1 butonunda çağırıyoruz.



ADIM 2 - Dinleme Penceresi için Intent Tanımlama


Şimdi speak metodunun içeriğine bakalım.



Bu metodun içerisinde ilk olarak kullanıcıdan konuşma beklenir ve bunu bir konuşma tanıyıcısı aracılığıyla gönderecek bir Intent oluşturulur.


Sonrasında dil modelini Serbest Dil Modeli olarak veriyoruz. Bu model serbest biçimli konuşma tanımaya dayalı bir dil modelidir. İsteğinize göre başka dil modellerini kullanabilirsiniz. Detaylara buradan ulaşabilirsiniz.


6. satırda dil ataması yapıyoruz. Locale.getDefault, yereldeki dili döndürür.(tr_TR)

Konuşma penceresi açıldığında görünecek yazıyı belirliyoruz.


ADIM 3 - Dialog'dan Dönen Verileri İşleme


Gerekli ayarları yaptıktan sonra bu intent'i başlatmak için startActivityForResult metodunu çağırıyoruz. Bu aktivite sonrası veri alacağımız için startActivity yerine bu metodu çağırdık.


Sonuç için activity başlatmamız sebebiyle dönen sonucu işlemek adına onActivityResult metodunu override ediyoruz.



Bu fonksiyonun parametrelerine gelecek olursak ilk parametrede başlatacağımız Intent olan intent nesnesini veriyoruz. İkinci parametrede ise birden fazla istek oluşturulma durumuna göre doğru veriyi almak için bir ID bilgisi veriyoruz. Bu bilgiyi yukarıda int VOICE_RECOGNITION_REQUEST_CODE = 1 olarak verdik.


Parametrelerden ilki olan requestCode bizim gönderdiğimiz ID bilgisini verirken resultCode değişkeni okuma işleminin başarı durumunu tutar. Son olarak data değişkeniyle dönen sonucu alırız.


requestCode değişkeninin beklediğimiz değerde olması durumunda veri okumanın başarı durumunu kontrol ediyoruz ve dönen veriyi bir arrayList’e atıyoruz. Yukarıda tanımladığımız textView’a okuduğumuz string'i set ederek bu yöntemi tamamlıyoruz.



2 - Custom Dialog ile Ses Tanıma


ADIM 1 - Ses Kaydı için İzin Kontrolü


Şimdide daha özgür olduğumuz metoda gelelim.

İkinci yönteme başlamadan önce Manifest’e giderek ses kaydına izin vermemiz gerekiyor.

<uses-permission android:name="android.permission.RECORD_AUDIO" ></uses-permission>

MainActivity’de bu iznin alındığını kontrol etmekte fayda var. İzin yoksa ses kaydı için tekrar izin isteniyor.



ADIM 2 - Ses Tanıma Nesnelerini Tanımlama


Ses dinlemeyi ve sesi işleyecek nesneyi ve özellikleri convert() fonksiyonundan çağırıyoruz.



Bu fonksiyonun içerisindeki kodlara gelecek olursak ilk olarak dinleme işlemini yapacak nesneyi tanıtmamız gerekiyor. Kayıt başlatma ve durdurma işlemlerinde de bu nesneye erişim gerektiğinden bu tanımlamayı, sınıfın her yerinden erişilecek şekilde tanımlamanız gerekiyor. Ben SpeechRecognizer sınıfından spr adlı nesneyi yukarıda tanımladım. createSpeechRecognizer metodu yardımıyla spr adlı yeni bir SpeechRecognizer nesnesi yaratılır. StartListening metoduna parametre vermek üzere intent tanımlıyoruz.


ADIM 3 - Dinleme Anında Yapılacak İşlemleri Tanımlama


setRecognitionListener metodu ile dinleme anında yapılacak işlemleri ayarlıyoruz.

OnResults metodunun içerisinde dinlenme sona erdiğinde dinlenilen kelimeleri words adlı string ArrayList’e atıyoruz. words dizisi null olmadığı sürece dizideki ilk elemanı yani okunan kelimeleri textView’ımızda gösteriyoruz.


İsteğinize göre kayıt başlama ve kayıt bitirme anında bir Toast uyarı mesajı veya dinleme süresince devam edecek bir dialog penceresini onBeginningOfSpeech() ve onEndOfSpeech() metotları yardımıyla kullanıcıya gösterebilirsiniz.


Dinleme anında yapacaklarımızı da ayarladıktan sonra geriye kalan kayıt başlama durumunu bir butona bağlamak.


ADIM 4 - Kayıt Başlama-Bitirme Durumlarını Butona Bağlama


Dinlemeyi durdurma durumunu da bir butona bağlayabilirsiniz. SpeechRecognizer'ın sesi duyamadığı an otomatik olarak dinlemeyi durdurup sonucu yine aynı şekilde durdurduğunu da söylemekte fayda var. Aşağıdaki kodu Main'de çalıştırarak uygulamanızı çalıştırabilirsiniz.




Son olarak iki yöntemde de Google’ın sunucularına bağlanarak dil işleme yapıldığı için internet bağlantınızın olması ve "Google" uygulamasına sahip olunması gerektiğini söyleyelim.


İki yöntemi de basitçe test ettiğimiz uygulamaya github linkinden erişebilirsiniz:


https://github.com/muratbahadir/Android_Speech_To_Text


Referanslar:

https://developer.android.com/reference/android/speech/SpeechRecognizer

https://medium.com/voice-tech-podcast/android-speech-to-text-tutorial-8f6fa71606ac

https://gelecegiyazanlar.turkcell.com.tr/blog/android-uygulamalarinda-sesi-yaziya-donusturmek

https://developer.android.com/reference/android/speech/RecognizerIntent


#speechtotext #android


0 yorum

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın