Ses tanıma olayı yabancı ismi ile recognize… Bu gün telekomikasyon şirketleri, bankalar ve özel servisler bu recognize olayını kullanıyor.  Konuşmaları tanıyorlar, kaydediyorlar, filtreliyorlar ve programsal olarak otomatik cevap sistemleri geliştiriyorlar.  Artık istediğiniz kelimeleri söyleyen insanları bulmanız, ya da insanları telefondaki konuşmasından tanıyarak yerini tespit etmeniz zor bir iş değil…

132415

Kendi sesinizi daha önce hiç herhangi bir kaydediciye yahut bilgisayar üzerindeki ses kayıt programlarına kaydettiniz mi?  Eğer daha önce sesinizi kaydedip konuşmanız sırasında oluşan ses dalgalarını incelediyseniz, hangi sözcüğü konuşurken nasıl bir dalga oluşacağını bilebilirsiniz.  Söylediğimiz sözcükler arasında belli bir zaman boşluğu vardır ve konuşurken belli bir kurala göre belli düzende konuşuruz.  Ve kelimeyi söylediğimizde kelime içerisindeki sözcüğün vurgusu kelimenin ses dalgasının en yüksek seviyesini yani (peak değerini) oluşturur. Söylediğimiz tüm kelimeler  paket paket ses dalgalarından oluşur. Çünkü kelimeleri oluşturan hecelerin belli bir tonlaması vardır.  Konuşmalarımız matematiksel ve elektriksel olarak modellendiğinde 4 evre olduğu söylenmiş. Ve bu modellemeye ADSR(attack,decay,sustain,release) ismi veriliyor.

Mesela  www.explainthatstuff.com  web sayfasında verilen bir örnek şu şekilde;    adam yavaş bir şekilde “rhinoceros” kelimesini söylemiş ve sesini kaydetmiş. Ses dalgasının resmini koymuş. Aynı şekilde bu kelimeyi hızlı söyleyip yine resmini koymuş.   “rhinoceros”, gergedan demek ve  heceleri şu şekilde “rye-noss-sir-russ”

rhino2
http://www.explainthatstuff.com
rhino1
http://www.explainthatstuff.com

Bu ses dalgasını programsal olarak modellemek çok da zor bir iş değildir aslında. Oluşan ses dalgalarından saniyenin milyonda biri süresince örnek alınır.  Ve bu örnekler dijital değere dönüştürülür.  Yani bir sayıya dönüştürülür.  Bu şekilde tüm kelimelerin ve sözcüklerin sayısal bir karşılığını çıkararak bilgisayara bunları tanıttığınızda bilgisayar artık istenilen sözcükleri tanır.

sig_discrete01
Ses dalgasının üzerinden örnekler alınması

Recognize olayının elektronik kısmının yanında bir de programlama olayı var. İşin içine program girdiğinde Iphone daki “siri” gibi asistanlar oluşturulmuş.  Aslında artık, tüm işletim sistemlerinde bu sesli asistan olayı var.

Visual Studio da bu konuda kendini yeniledi tabi ki. Hemen “speech recognize” kütüphaneleri oluşturarak programsal olarak ses tanıma olayına imkan sağlandı.    Ben geçen gün bununla ilgili bir örnek yaptım.  Bunun için Visual Studionun resmi web sayfasından system.speech.dll kütüphane dosyasını ekleyip derleyicinizin “references” bölümüne tanımlıyorsunuz ve kütüphane dosyalarını derleyicinize gösteriyorsunuz. Bundan sonra bilmeniz gereken bir kaç satır kod kalıyor sadece.

Recognize olayı iki kısıma ayrılıyor. Birincisi text halinde yazdığınız şeyi bilgisayara okutmak ki bu en kolayı. ikincisi ise konuştuklarınızı text’e atarmak. Birincisi için;

using System.Speech.Synthesis;

diyerek programınıza istenilen kütüphane kodlarını ekliyorsunuz.

 

SpeechSynthesizer reader = new SpeechSynthesizer();

bu kodla program içinde reader isminde okuyucu oluşturuyorum. Ve son olarak

 reader.SpeakAsync("Hello World.This is elektronikhobi.net ");

komutu ile parantez içerisindeki yazıyı bilgisayara okutuyorsunuz.

 

Konuştuklarınızın text dosyasına aktarmak için ise izleeniz gereken yollar şu şekilde oluyor.

Önce

using System.Speech.Recognition;

komutu ile kütüphane kodlarını ekliyorsunuz.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Kodları ile dil seçmeniz gerekiyor. Burada United Kingdom ingilizcesi seçilmiş.

SpeechRecognitionEngine rcog = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-GB"));  // recognizer oluşturuluyor.


Choices sList = new Choices();  // Recognize edilecek kelimeler yükleniyor. 
sList.Add(new String[] {"hello", "how are you","what is your name", "thank you"}); // recognize edilecek kelimeler...

Grammar gr = new Grammar(new GrammarBuilder(sList));  // kelimeler grammer oluşturularak recognizer a tanıtılıyor. 

GrammarBuilder gb = new GrammarBuilder();


rcog.RequestRecognizerUpdate(); 

rcog.LoadGrammar(gr);
rcog.SpeechRecognized += rcog_SpeechRecognized; 

rcog.SetInputToDefaultAudioDevice();   // defoult olarak tanımlanan mikrofon cihazı seçiliyor.
rcog.RecognizeAsync(RecognizeMode.Multiple);   // çoklu kelime algılama özelliği seçiliyor. 

rcog.SpeechRecognitionRejected += rcog_SpeechRecognitionRejected;   // Tanımlanan kelimelerin herhang                            //i biri algılanırsa  aşağıda oluşturulan fonksiyona gitmesi sağlanıyor. 


button1.BackColor = Color.Red;  

}

void rcog_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{

reader.SpeakAsync("I didn't understand Mr Yusuf");   // eğer konuşmadan anlamazsa
}

void rcog_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text.ToString() == "how are you")  // eğer konuşmada How are you dersem
{
reader.SpeakAsync("I am fine mr yusuf");
Thread.Sleep(10);
reader.SpeakAsync("Thank you");
Thread.Sleep(10);
reader.SpeakAsync("and you");
Thread.Sleep(10);

}

if (e.Result.Text.ToString() == "what is your name")
{
reader.SpeakAsync("I am cleaning robot mr yusuf"); // eğer  what is your name dersem
Thread.Sleep(10);
reader.SpeakAsync("My name is Supuro");
Thread.Sleep(10);
reader.SpeakAsync("you made me");
Thread.Sleep(10);

}

if (e.Result.Text.ToString() == "hello")   // eğer hello dersem
{
reader.SpeakAsync("hello mr yusuf");
Thread.Sleep(10);
reader.SpeakAsync("How are you");
Thread.Sleep(10);
reader.SpeakAsync("ı hope, you are good");
Thread.Sleep(10);

}

 

2 YORUMLAR

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz