Sesi Yazıya Çevirme :MobileCoder I MobileCoder.NET I Mobil Programlama I Android Programlama I Mobil Geliştiricilerin Buluşma Noktası I www.MobileCoder.Net

Sesi Yazıya Çevirme

04.04.2015 tarihinde Android Programlama kategorisine eklenmiş, 554 views Kişi Okumuş ve 0 Yorum Yapılmış.

Size şimdi sesi nasıl yazıya çevirebileceğimizi anlatacağım. Sesi yazıya çevirmek normalde yapay zekânın konularından biri olsa da Android’de bunun kolay bir yolu mevcut. Hiç yapay zekâ ile uğraşmanıza gerek kalmadan yapabilirsiniz.

Bunun için Google’ın bize sağladığı altyapı servisini kullanacağız. Bu altyapıyı kullanabilmek için RecognizerIntent isimli intent sınıfını kullanmalıyız.

Bu sınıf ile Google’ın bize sağladığı altyapı servisini çağırarak işleri kolaylaştırmış olacağız. Google bu servisini Google Now uygulamasında da kullanmaktadır.

Öncelikle altta yapacağım örnekte kullanacağım RecognizerIntent sınıfının bazı nesnelerini tanıtacağım.

ACTION_RECOGNIZE_SPEECH Konuşmayı başlatmak için kullanıcıya soracak ve bir konuşma tanımlayıcısı(speech recognize) aracılığıyla etkinliği başlatır.
EXTRA_LANGUAGE İsteğe bağlı IETF dil etiketi (BCP 47 ile tanımlanan). Örneğin, “En-US”
EXTRA_LANGUAGE_MODEL  Konuşma modeli tercih edilirken tanıyıcıya bildirilir.   ACTION_RECOGNIZE_SPEECH.
EXTRA_PROMPT Kullanıcının isteğe bağlı metnini konuşarak yazıya dökme komutu.
LANGUAGE_MODEL_FREE_FORM Serbest biçimli konuşma tanıma dayalı bir dil modelini kullandırır.
EXTRA_RESULTS ArrayList<String> tanıma sonuçlarını çalıştırır. ACTION_RECOGNIZE_SPEECH.

Bu kadar teorik bilgiden sonra en iyi öğrenme uygulamadır. Bu yüzden şimdi bu bilgileri teoriden uygulamaya taşıyacağız.

Örnek;

Yapacağımız bu örnekte mikrofondan konuşup oluşturduğumuz ekrana ait textview’e söylediklerimizi yazmasını isteyeceğiz.

Bunun için öncelikle Android Studio’da yeni bir proje açarak başlıyoruz. Proje adı gibi gerekli bilgileri girerek activity_main.xml sayfasıyla karşılaşıyoruz.

Ondan önce internetten arayarak bulduğumuz mikrofon resmini alıp res klasörünün altında drawable klasörüne kaydediyoruz.

Sonrada activity_main.xml dosyasının Design kısmında yandaki gibi düzenliyoruz.

1

Sonra projemize geri dönerek gene res klasöründen values klasörünü bulup strings.xml dosyasına giriyoruz ve onu şöyle düzenliyoruz.

“<?xml version=”1.0″ encoding=”utf-8″?>

<resources>

    <string name=”app_name”>Konus Yazi Olsun</string>

    <string name=”action_settings”>Ayarlar</string>

    <string name=”hello_world”>Merhaba Dünya Ahali!</string>

    <string name=”speech_prompt”>Bir şeyler söyle ki yazsın&#8230;</string> //Google’ın servisi devreye girdiğinde üzerine yazılacak string ifade.

    <string name=”speech_not_supported”>Çok Üzgünüm! Senin sürümün buna yetmiyor…</string>

    <string name=”tap_on_mic”>Mikrofona bas,konuş</string>

</resources>

Hemen ardından aynı yerde bulunan colors.xml dosyasına girip onu istediğimiz gibi düzenliyoruz. Eğer values klasörü içinde bu dosyayı bulamadıysak panik yapmıyoruz ve hemen yeni bir colors.xml dosyası oluşturup değerleri ekliyoruz.

<?xml version=”1.0″ encoding=”utf-8″?>

<resources>

    <color name=”white”>#ffffff</color>

    <color name=”bg_gradient_start”>#ff6b396c</color>

    <color name=”bg_gradient_end”>#ffaf1449</color>

</resources>

Şimdi de activity_main.xml dosyasına geri dönüyoruz. Bu sefer Design kısmıyla değil de Text kısmıyla uğraşıyoruz ve alttaki kodlar gibi düzenliyoruz.

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”

    xmlns:tools=”http://schemas.android.com/tools”

    android:layout_width=”match_parent”

    android:layout_height=”match_parent”

    android:background=”@drawable/bg_gradient”

    android:orientation=”vertical” >

 

    <TextView

        android:id=”@+id/txtKGiris”

        android:layout_width=”wrap_content”

        android:layout_height=”wrap_content”

        android:layout_alignParentTop=”true”

        android:layout_centerHorizontal=”true”

        android:layout_marginTop=”100dp”

        android:textColor=”@color/white”

        android:textSize=”26sp”

        android:textStyle=”normal” />

 

    <LinearLayout

        android:layout_width=”wrap_content”

        android:layout_height=”wrap_content”

        android:layout_alignParentBottom=”true”

        android:layout_centerHorizontal=”true”

        android:layout_marginBottom=”60dp”

        android:gravity=”center”

        android:orientation=”vertical” >

 

        <ImageButton

            android:id=”@+id/btnKonus”

            android:layout_width=”wrap_content”

            android:layout_height=”wrap_content”

            android:background=”@null”

            android:src=”@drawable/ico_mic” />

 

        <EditText

            android:layout_width=”wrap_content”

            android:layout_height=”wrap_content”

            android:layout_marginTop=”10dp”

            android:text=”@string/tap_on_mic”

            android:textColor=”@color/white”

            android:textSize=”15dp”

            android:textStyle=”normal” />

    </LinearLayout>

 

</RelativeLayout>

 

Son olarak da MainActivity.java dosyasına geliyoruz. Burada da Google’ın RecognizerIntent sınıfının bazı nesnelerini çağıracağız. Yani asıl olayı burada şekillendiriyoruz.

Tabii Google’ın bu sınıfını kullanabilmemiz için gerekli kütüphanelere ihtiyacımız var. Bu yüzden onları da import etmeyi unutmuyoruz.

 

package mobilecoder.net.sescevir;

 

import java.util.ArrayList;

import java.util.Locale;

 

import android.app.Activity;

import android.content.ActivityNotFoundException;

import android.content.Intent;

import android.os.Bundle;

import android.speech.RecognizerIntent;

import android.view.Menu;

import android.view.View;

import android.widget.ImageButton;

import android.widget.TextView;

import android.widget.Toast;

 

public class MainActivity extends Activity {

 

               private TextView txtKGiris;

               private ImageButton btnKonus;

               private final int REQ_CODE_SPEECH_INPUT = 100;

 

               @Override

               protected void onCreate(Bundle savedInstanceState) {

                              super.onCreate(savedInstanceState);

                              setContentView(R.layout.activity_main);

 

                              txtKGiris = (TextView) findViewById(R.id.txtKGiris);

                          btnKonus = (ImageButton) findViewById(R.id.btnKonus);

 

                              // action bar’ı gizle

                              getActionBar().hide();

 

        btnKonus.setOnClickListener(new View.OnClickListener() {

 

                                            @Override

                                            public void onClick(View v) {

                                                           promptSpeechInput();

                                            }

                              });           }

               /**

                * Google konuşma girişi diyalogunu gösterme

                * */

               private void promptSpeechInput() {

                              Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,

                                                           RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

                              intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

                              intent.putExtra(RecognizerIntent.EXTRA_PROMPT,

                                                           getString(R.string.speech_prompt));

                              try {

                                            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);

                              } catch (ActivityNotFoundException a) {

                                            Toast.makeText(getApplicationContext(),

                                                                          getString(R.string.speech_not_supported),

                                                                          Toast.LENGTH_SHORT).show();

                              }

               }

               /**

                * Konuşma girişi kabulü.

                * */

               @Override

               protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                              super.onActivityResult(requestCode, resultCode, data);

 

                              switch (requestCode) {

                              case REQ_CODE_SPEECH_INPUT: {

                                            if (resultCode == RESULT_OK && null != data) {

 

                                                           ArrayList<String> result = data

                                                                                         .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                                                           txtKGiris.setText(result.get(0));

                                            }

                                            break;

                              }

 

                              }

               }

               @Override

               public boolean onCreateOptionsMenu(Menu menu) {

                                 // Inflate the menu; this adds items to the action bar if it is present.                  getMenuInflater().inflate(R.menu.main, menu);

                              return true;

               }

}

 

Artık kod bölümüyle işimiz bitti. Şimdi çalıştırıp neler yaptığımızı bir görelim.

Tabii çalıştırmadan önce burada dikkat etmemiz gereken bir nokta var. Ne yazık ki emülatör burada bir işimize yaramıyor. Uygulamamızı çalıştırabilmemiz için gerçek bir cihaza ihtiyacımız var. Gerçek bir cihazdan sonra internet bağlantımıza da dikkat etmeliyiz. Çünkü internet olmadan uygulamamız çalışmayacaktır.

1.Tüm bu dediklerimi yaptıktan sonra şu ekranla karşılaşacağız.

1

2.İmageButton’a yani mikrofona bastığımızda ise karşımıza şöyle bir ekran gelecek.

3

3.Eğer dediklerimizi anlamazsa da şu mesajı göreceğiz

4

4.Eğer tüm dediklerimiz anlaşılırsa ise şu ekranı sonunda görebileceğiz. Söylediğimiz kelime ya da cümle yazılmış bir şekilde.

5

 

Özge YALÇIN

Kaynaklar

http://developer.android.com/reference/android/speech/RecognizerResultsIntent.html
https://gelecegiyazanlar.turkcell.com.tr/blog/android-uygulamalarinda-sesi-yaziya-donusturmek
http://www.androidhive.info/2014/07/android-speech-to-text-tutorial/
http://www.mobilhanem.com/android-sesi-yaziya-donusturme/
http://www.arifceylan.com/eclipse-android-konus-yazdir-uygulamasi-yapma-dersi/

 

 

Yazar Hakkında

Yazar : ceren kozhan

Yazar Hakkında :

Yazarın Tüm Yazıları İçin Tıklayınız

Yorumlar

Sitemizde En Çok Okunan İçerikler

ANDROİD TELEFONLARA ROOT ATMA
ANDROİD TELEFONLARA ROOT ATMARoot Ne demek ? Bir android cihazı root etmek telefonun
fragment
ANDROİD FRAGMENT YAPISI VE KULLANIMIFragmentler Activity içerisinde yer alan kullanıcı ara yüzleridir. Fragment
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞME
ANDROİD TELEFONLARDA KONFERANS GÖRÜŞMEANDROİD TELEFONLARDA KONFERANS GÖRÜŞME   Konferans görüşme çok fazla bilinmeyen androidin
Asp.NET’de web servis hazırlama ve Android de kullanimi  Web Servis Nedir ? Web üzerinden HTTP protokolü ile hizmet

Sitemizde En Çok Yorumlanan İçerikler

Rating Bar Kullanımı
Rating Bar KullanımıAndroid’de yıldız şeklinde derecelendirme çubuğu olarak kullanılır. Kullanıcı sürükleme
Android Wear Emülatör Kurulumu
Android Wear Emülatör Kurulumu   Android studio da geliştireceğimiz uygulamaların kontrolunü yapmak için emülatör
Resim Galerisi Oluşturma
Resim Galerisi OluşturmaAndroid Programlama – Resim Galerisi Oluşturma Bu yazıda, bir galeri
SQLite Database Browser Kullanımı
SQLite Database Browser KullanımıSQLite Database Browser Kullanımı Merhaba arkadaşlar, Android uygulamaları geliştirirken uygulama üzerindeki

Son Yapılan Yorumlar

  • Kategoriler

  • Son Yazılar

  • Takvim

    Kasım 2017
    P S Ç P C C P
    « Kas    
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
  • Etiketler

  • Son Yorumlar

    • Arşivler

    • Meta