Web Browser’a Speech Recognition ile Sesli Komut Bölüm1

Selamlar;

Bu makalemizde speech recognition üzerine çok güzel bir proje yazacağız. Eminim sizde benim kadar memnun kalacaksınız.

Öncelikle speech recognition’ı tanımlayalım. İlgili yazılımın bulunduğu makinaya mikrofon ile gelen insan sesini tanımlamak ve anlamlı komutlara çevirmek için kullanılan teknolojidir. Bunun için çeşitli ses algoritmaları yani ses dalgasındaki frekans uyumu ile söylenen kelime algılanıp önceden tanımlanmış ses kütüphanesideki kelimeler ile karşılaştırılır ve belli bir yüzde oranında benzer olan seçilir. Böylece söylenen kelime tanımlanmış olur. Bu işlem için mutlaka kişiselleştirme yapılması gerekmektedir. Kişiselleştirmeden amaç kişinin telaffuz ve fonetik değerlerinin uygulamaya tanıtılması böylece uygulamanın söyleneni anlama ve text’e dönüştürme, hataları düzeltme gibi özellikler için gerekli parametreleri tanımlamasıdır. Aslında arkada kişnin belli textlerdeki ses frekans dalgaları kaydedilmekte ve bu veriden yola çıkılarak söylenen analog ses digital formata çevrilmektedir. Herşey kıyaslamaktan başka birşey değildir. Kişinin speech sırasında kulandığı ekipmanlar ve çevredeki gürültü gibi çeşitli etkenler verimlilik açısından çok önemli faktörlerdir.

speech-recognition-process

Bir windows application yazacağız. Amacımız bir web browser’ı sesli komut ile açmak. Yine sesli komutlar ile söylenen linkleri tıklamak; scroll’u ve mouse’u istediğimiz yöne hareket ettirmek ve tıklamak, borwser’da ileri, geri, minimize, maximize gibi eventler yapmaktır. Bunu yanında anlık saat, o günkü hava durumu ve haftanın filimleri gibi birkaç eğlenceli soruya cevap verecek bir modül yazacağız. İlerleyen kısımlarda paint açtırıp resim çizdireceğiz. Maillerimize ve banka hesabımıza bakabileceğimiz modüller yazacağız. Kısacası speech recognition ile sınırları zorluyacağız:)

speech

İsterseniz öncelikle bu karmaşık projeye başlamadan önce herşeyin temeli olarak bir lambayı windows applicationla sanal ortamda  yakıp söndüren basit bir uygulama yazalım. Öncelikle yukarıda görüldüğü gibi System.Speech.dll’in referancelara eklenmesi gerekir. Bir de gerek olmasa da projede com component kullanılması tercih edildiği için Interop.SpeechLib.dll ‘in referance edilmesi gerekir. Amaç makinanın konuşması üzerine istenen değişikliklerin daha geniş bir yelpazede yapılabilmesidir.

control

 

control2

control3

Makinanızda  speech recognition’ın düzgün çalışması için yukarıda görüldüğü gibi kişiselleştirme yapmanız gerekmektedir.  Bunun için çıkarılan yazıların sesli okunması gerekir.

Not: Ayrıca işlemtim sisteminizin ingilizce olması gerekmektedir.

Öncelikle ses işlemleri için gerekli olan referanslar aşşağıdaki gibi eklenir.

using System.Speech.Recognition;
using System.Threading;

Aşağıda görüldüğü gibi Load zamanında LoadGrammer()methodu çağrılmıştır. Speech Recognition’da en başta da bahsettiğim gibi Library’nin tanıtılması gerekmektedir. Amaç voice command den sonra benzer sesler bu library içerisinde aranacaktır. İşte bu tanımlamanın yapıldığı yer LoadGrammer()’dır.

  • Choices bu tanımlanacak kelimelerin tutulduğu özel bir string dizidir.
  • GrammerBuilder: Tanımlanan kelimelerin tutlduğu Culter property’si ile dil seçeğini belirlendiği nesnedir.
  • Grammer: Constructer’da GrammerBuilder bekleyen SpeechRecognitionEngine’e eklenen nesnedir.
  • SpeechRecognitionEngine: Esas ses tanıma işleminin yapıldığı nesnedir.

Voice command’den sonra bakılacak library tanımlandığına göre ilgili eventleri aşağıda görüldüğü gibi bağlayalım. StartRecognition() methodun da

  • SpeechDetected eventi ses tanınma işlemi sırasında çağrılır. Örnek olarak kullanıcı bilgilendirilebilir.

  •  SpeechRecognitionRejected  eventin de aranan kelime ilgili library’de bulunamayınca çağrılır.

  •  SpeechRecognized event’i aranan kelime ilgili library’de bulununca çağrılır. Aşşağıda görüldüğü gibi “Light” kelimesi bulununca, yanan lamba “Dark” bulununca sönen lamba resmi gösterilir.

picasion.com_6419dd6726b8b411236624d28ea39376

  •  RecognizeCompleted eventi kelime tanıma işlemi başarılı veya başarısız şekilde tamamlandıktan sonra çağrılır.

Aşşağıda  StartRecognition() methodunda eventlere EventHandlerların nasıl bağlandığını görüyoruz. Dikkat ederseniz RecognizeAsync() methodu bir thread içinde arkada çalışmaktadır. Çünkü uygulama her an yeni bir komut gelmesini arka planda beklemektedir.

 Form1.cs (Tamamı):

Bu giriş projesinden sonra şimdi gelelim esas projemize.

Eklenen Namespaceler aşşağıdaki gibidir. Ses için System.Speech.Recognition ve SpeechLib. Explorer açmak için WatiN.Core, WatiN.Core.Native.Windows kullanılmıştır.

Öncelikle ses ile mouse hareketleri yapmak için  windows kernel dll’i olan user32.dll com compenenti tanımlanır. Yani left, right button pressed ve unpressed, mouse  wheel up ve down eventleri için.

İlk örnekde de bahsedildiği gibi ses tanımlaması için gerekli library Load Grammer() methodu ile aşağıda tanımlanmıştır. Burda farklı olarak SpVoice adında bir class vardır. Amacı computer’ün bize sesli olarak dikte etmesini sağlamaktır. Bu class yerine SpeechSynthesizer’ıda kullanılabilirdi. Kullanım şekli aşağıdaki gibidir. Bir de giriş te “Wellcome Master Bora” şeklinde  bir karşılama konuşması yapılmaktadır:)

Aşşağıda  StartRecognition() methodunda ilgili speech eventlerinin nasıl bağlandığını görüyoruz. Dikkat ederseniz RecognizeAsync() methodu gene bir thread içinde arkada çalışmaktadır. Ve her an yeni bir komut gelmesini arka planda beklemektedir.

SpeechDetected eventi ses tanınma işlemi sırasında çağrılır. Kullanıcı “Ses Tanınıyor” yazısı ile bilgilendirilir.

SpeechRecognitionRejected  eventin de aranan kelime ilgili library’de bulunamayınca çağrılır. Kullanıcıya “What?” şeklinde seslenilerek uyrılır.

RecognizeCompleted eventi kelime tanıma işlemi başarılı veya başarısız şekilde tamamlandıktan sonra çağrılır.

Şimdi SpeechRecognized eventinde verilen komutlara göre yapılacak işleri tanımlayalım.

  • Öncelikle Hesap Makinası için olan komutları inceleyelim. İlgili alana belirtilen sayılar gelen komuta göre yazdırılır. Bu işlem yapılırken smsSifreSahasi olup olmadığına bakılır bu alan garanti bankasındaki şifre alanının ID’sidir. Buna göre komut olarak belirtilen sayılar ya ekrandaki textbox’a yada explorer da açılan garanti bankası web sayfasındaki şifre alanına yazılır. “pass” komutu ile ekrandaki bir sonraki textbox’a focuslanılır. Eğer google webBrowser açık ise googl’ın search text’ine de odaklanılır. “Take One” komutu ile focuslanmış textbox’dan son karakter silinir. “Clean” ile focuslanan textbox temizlenir. “Multi” çarpma işlemi, “Topla” toplama işlemi yapar. “Number” ilk sayısal textbox’a focuslanılır. “Say” sonucu makinanın sesle cevap vermesini sağlar. “Line” textbox2 textbox1’in yanına gelir. “Rahat” textbox2 textbox1’in altına eski yerine geçer. Dikkat ederseniz komut verildiği zaman timer4 durdurulur yani mouse hareketli ise durur.Bu konuya ileride detaylı olarak inceleyeceğiz.

calc

Aşağıda görüldüğü gibi “Kapat” komutu ile computer ses ile vedalaşıp kapanır. “Never Say Goodbye”‘, “How Are You” ve “What is eating” komutlarına komik bir şekilde SpVoice ile konuşarak cevap verir.

xbox

Aşağıda windows aplication içne yerleştirdiğimiz webBrowser ile yapılan işlemler ile alakalı methodları görüyoruz.

“Open Google” , “Open Milliyet” , “Open C#” ve “Open Gamespot” komutları ile webBrowser ilgili url’lere yönlendilirilir. “xbox” komutunda eğer webBrowser’ın url’i GameSpot ise ilgili sayfa içinde xbox360 ile ilgili konular aranır. Yukarıda bununla ilgili ekran görüntüsü görülmektedir.

csharp

“Ps3” ve “c sharp” komutlarında eğer google webBrowser’da açık ise ilgili textler google search’de yukarıda görüldüğü gibi aranır.

“wider” ve “small” komutlarında webBrowser 150 px genişler veya daralır. Buna bağlı olarak da genişlik artar ya da azalır.

“Search” komutu ile google’ın search button’u tıklanır.

“clear search” komutu ile eğer webBrowser’da google açık ise google’ın search textbox’ı temizlenir.

“Scroll Down” , “Scroll Up” ve “Scroll Stop” komutları ile webBrowser’ın scroll’u aşağı yukarı doğru hareket ettirilmektedir. Stop komutu ile hareketli scroll durdurulur.

“Faster Down” ve “Faster Up” komutlarında yukarı veya aşağıya hareket eden webBrowser scroll daha hızlı hareket etmeye başlar.

“go back” ve “go forward” komutlarında webBrowser’da geri ve ileri gidilir.

Şu ana kadar Speech Recognition’ın temelleri üzerine konuşup basit bir örnek yaptık. Daha sonra ses ile nasıl hesap işlemleri yapabileceğimizi inceledik .Ve son olarak sesli komut ile webBrowser üzerinde neler yapabilceğimize baktık. Bu makalenin 2. bölümünde eses yapıcağımız işlerin bir alt yapısını oluşturmuş ve speech recognition işlmelerinin ana komutlarını görerek olaya artık iyice ısınmış olduk. Bu makalenin 2. Bölümünde sizlerle çok güzel bir video paylaşıcağım. Ayrıca yukarıda tanımladığımız Choices içindeki geri kalan komutları da kullanıp esas yapmak istediğimiz işlere başlıyacağız.

Makalenin devamında görüşmek üzere hoşçakalın.

Herkes Görsün:

Sevebilirsin...

14 Yanıt

  1. Ozgur diyor ki:

    Selamlar Hocam;
    Elinizi sağlık. Gene harika bir yazı olmuş. Ben ses teknolojiler ile çok ilgileniyorum. Özellikle akıllı ev teknolojileri ile.
    2. ve esas bölümü heycanla bekliyorum. Özellikle videonuzu :)

    • borsoft diyor ki:

      Teşekkürler Özgur.
      Akıllı ev teknolojileri ile bir çalışmam olmuştu. Perdeleri, ışıkları, müziğin sesini kapatıp açmıştık:) Merka ettiğin takıldığın birşey olursa çekinmeden sorabilirsin.
      İyi çalışmalar.

  2. Veli diyor ki:

    Selamlar hocam;
    Makalenizi çok beyendim. Öncelikle tamamen özgün ve çok başarılı. Lambayı evde sesli yakmayı başardım. İnanın çok mutlu oldum. 2. bölümü ve videonuzu heycanla bekliyorum. Satır satır evde aynen yazıyorum :) Yazılarınızı ve eventlerinizi herdaim takip ediyorum. İyi çalışmalar.

    • borsoft diyor ki:

      Teşekkürler Veli;
      Twitter’dan eventleri duyuruyorum. Video’yu çektim ama makalesi henüz bitmedi. Ben çok zevk aldım umarım siz de beyenirsiniz.

  3. murat diyor ki:

    Hocam video’nuzu çok merak ettim.. Bu arada çok farklı konularda bu kadar özgün yazılar yazan birini daha görmemiştim. Gerçekten araştırma öğrenme sizin göbek adınız :)

  4. HastaneBul diyor ki:

    Güzel bir anlatım, teşekkürler.

  5. Ahmed diyor ki:

    Hocam Merhaba, cok ii bi calisma olmus, elinzie saglik :) Facebook profilinze yazdim, lutfen ilgilenin

  6. Salim diyor ki:

    Emeğinize sağlık. Gerçekten güzel bir çalışma olmuş. Tebrik ederim

  7. Samet diyor ki:

    Merhaba Bora hocam; size çok teşekkür ederim paylaşımlarınız için. Bir şey soracaktım aslında bir sorunu. Mesela bir müzik açtığımızda bilgisayardan çıkan sesi de algılıyor bunu nasıl engelleyebiliriz? Sistemden gelen sesi algılamamasını nasıl sağlayabiliriz?

    • borsoft diyor ki:

      Selam Sammet,
      Öncelikle teşekkürler. Bunu algılamaman bu teknoloji ile pek mümkün değil gibi:) Ancak onun için ses frekansı ve dalga boyunu göre bir filter yazman gerekir ki onun da çok sağlıklı çalışabileceğini sanmıyorum.

      İyi çalışmalar.

      • Samet diyor ki:

        Teşekkürler hocam. Aslında Cortana’yı deniyordum uzun bir süredir fakat o bunu ayırt edebiliyor. Hemde çok başarılı bir şekilde. Hatta şöyle ki mesela YouTube’dan müziksiz bir konuşma açıyorum ve Cortana’ya sesleniyorum bu o konuşmayı algılamazken ben konuşmaya başladığımda sadece benim söylediklerimi kaliteli bir şekilde alıyor. Aklıma gelmişti bende sadece size sorayım demiştim. Ha birde aynı şeyi Cortana’ya telefondan dinlettim mi onu da algılayabiliyor. Herhalde sadece bilgisayardan çıkan seslere kulağını kapatıyor.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir