|  | 
        
            | 
                    
                        | .NET 3.0 ile Ses Tanıma Uygulamaları |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Günümüzde görsel teknolojilerin olduğu kadar artık 
ses teknolojilerin de kullanıldığı alanların arttığını ve bu teknolojide yaşanan 
her türlü gelişimin bizlere heyecan kattığını söylemeliyiz. Bu bağlamda 
günümüzde artık bir çok servisin, ses teknolojileri ile sunulduğuna tanık 
oluyoruz. Gerek bankalar, hava alanları kişilere sunduğu telefon ve internet 
servislerini ses teknolojileri ile geliştirmekteler. Bu gelişimin bir 
sevindirici yanı da artık görme engelli kişilerin de bu servislerden kolaylıkla 
yararlanabilmesidir. Sözü fazla uzatmadan gelin birkaç temel bilgi vererek, .NET 
3.0 ile gelen System.Speech ad uzayının, ses tanıma bazlı uygulamalar geliştirme 
konusunda bize ne gibi kolaylıklar tanıdığını gösterelim. 
 Microsoft, Text-to-Speech (Yazıdan Sese Çevirim) ve Speech Recognition  
(Ses Tanıma) uygulamalarında geliştiricilere SAPI (Speech 
Application Programming Interface) diye adlandırılan programlama arayüzünü 
sağlamaktadır. Kişiler veya firmalar bu arayüzü kullanarak kendi 
müşterilerilerine farklı dil ve seslerde SAPI destekli TTS ve SR motorları 
sunmaktadır. Böyle bir arayüzün getirisi ise geliştirilen bu motorların direkt 
olarak Windowsa entegresinin kolay olmasıdır. Çoğumuz Windows Denetim Masası 
içinde bulunan Speech seçeneğini görmüştür. Windowsa kurulan SAPI destekli SR 
ve TTS motorlarını bu sekmede yönetebilir ve gerekli ayarlamaları yapabiliriz.
 
 Dediğimiz gibi günümüzde bazı firmalar SAPI destekli ses tanıma motorlarını 
20ye yakın dilde kullanıcılara sunmaktadır ve kendi verilerine göre ses tanıma 
işlemlerindeki başarı oranlarının yaklaşık olarak %99 olduğunu görmekteyiz. Bu 
oran kullanıcının mikrofon ve ses kartı kalitesine, ortam seslerine ve kendi 
sesine bağlı olarak değişmektedir. Bu bağlamda size önerim; Speech 
penceresindeki ses eğitimi (Train Profile) uygulamasını birkaç defa denemeniz. 
Böylece ses motoru sesinizdeki yükseliş ve düşüşleri baz alarak bir profil 
oluşturacak ve sesinizin tanınması kolaylaşacaktır. Diğer firmaların belirli bir 
ücret karşılığında sunduğu SR motorlarının yanında Microsoftda ücretsiz bir SR 
ve TTS motoru sunmaktadır. Örneğin; ilk çıktığında herkesde hayranlık uyandıran 
Microsoft Sam, Mary ve Mike karakterlerinin robotsal bir sese sahip olduğunu ve 
günümüzde artık bizi tatmin etmediğini görmekteyiz.Bu konuda NeoSpeech ve AT&T 
gibi firmaların, nerdeyse insan sesine yaklaşık kalitedeki TTS motorlarını 
kesinlikle denemenizi öneririm. Nitekim Microsoft Windows Vista ile beraber 
gelen Microsoft Anna ile bu açığı biraz kapatmaya çalışmıştır.
 
 
  Şekil 1.1 Speech Properties
 
 Yukarıda verdiğimiz bilgiler ve bugünkü makalemizin konusu çerçevesinde ses 
tanıma işlemlerinin hangi adımlardan oluştuğunu küçük bir uygulama ile 
gerçekleştirelim.
 
 
 
  Şekil 1.2 Ses tanıma metodolojisi
 
 
 Şekil 1.2de görüldüğü gibi bir ses tanıma işlemi sinyaller 
bilgisayarımıza ulaştığında Sinyal işleme, olasılıkların belirlenmesi, örnek 
karşılaştırma ve sonuç analizi olarak dört ana adımdan oluşmaktadır. Buradaki 
önemli nokta ise örneklerin karşılaştırılması için gerekli bilginin XML tabanlı 
bir gramer dosyasından mı yoksa direk olarak kod içerisinden mi 
belirtileceğidir. Ses tanıma motorunın sen tanıma sırasındaki başarısı, 
kelimelerin veya cümlelerin belirtildiği bir sistemde %99 iken, bir dilin 
tamamının sınandığı bir sistemde %50ye kadar düşmektedir. İki adet kelime("Lights 
On", "Lights Off") kullanacağımız ilk basit uygulamamızda başarı 
oranımızın ben %100 olacağını tahmin ediyorum. :)
 
 Uygulamamızın yapımına başlamadan önce yüklememiz gereken iki bileşen;
 
 .NET FrameWork 3.0 ve
SAPI SDK 5.1
 
 Uygulamamızın tasarım görünüşü:
 
 
  Şekil 1.3 Uygulamanın Tasarımı
 
 Şekil 1.3de görüldüğü gibi uygulamamız Windowsa bağlı ana mikrofondan "Lights 
On" kelimesi duyulduğunda ampül yanacak ve "Lights Off" kelimesi ile ampülümüz 
sönecektir. Başlangıçta söylediğimiz System.Speech ad uzayını referanslar 
menüsünden eklememiz gerekmektedir. System.Speech.Dll dosyasının bulunduğu 
klasör ise:
 
 C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
 
 
  Şekil 1.4 System.Speech.Dll dosyası
 
 Bu aşamadan sonra yapmamız gereken sadece parmaklarımızı çalıştırmak... :)
 
 
 
  Yukarıdaki kod bloğunda görüldüğü gibi yaptığımız uygulamanın temelini 
oluşturan bileşenler SpeechRecognitionEngine objesine ait olaylardır. 
Yaptığımız uygulamada görüldüğü gibi biz bu olaylardan dört tanesini kullandık.
    | using 
		System; 
 using 
		System.Collections.Generic;
 
 using 
		System.ComponentModel;
 
 using 
		System.Data;
 
 using 
		System.Drawing;
 
 using 
		System.Text;
 
 using 
		System.Windows.Forms;
 using 
		System.Threading;
 
 using 
		System.Speech.Recognition;
 
 
 
 namespace 
		SesTanima
 
 {
 
 public partial 
		class Form1 : 
		Form
 
 {
 
 // Global Değişkenler
 
 private SpeechRecognitionEngine 
		recognizer = new 
		SpeechRecognitionEngine();
 
 
 
 // Yapıcı metot
 
 public Form1()
 
 {
 
 InitializeComponent();
 
 }
 
 
 
 private void Form1_Load(object 
		sender, EventArgs e)
 
 {
 
 LoadGrammars();
 
 StartRecognition();
 
 }
 
 
 
 
 
 // Metotlar
 
 // Tanıma motoru tarafından tanınması gereken kelimeleri belirtiyoruz.
 
 private void LoadGrammars()
 
 {
 
 Choices choices = new 
		Choices(new 
		string[] {"Lights On", 
		"Lights Off"});
 
 GrammarBuilder grammarBuilder = new 
		GrammarBuilder(choices);
 
 Grammar grammar = 
		new Grammar(grammarBuilder);
 
 recognizer.LoadGrammar(grammar);
 
 }
 
 
 
 // Ses tanıma işlemi sırasında ve sonrasında meydana gelecek olayları 
		belirtiyoruz.
 
 // Tanıma işlemini başlatıyoruz.
 
 private void StartRecognition()
 
 {
 
 
 
 // Belirli sesleri tanıma işlemindeki ana olaylar
 
 recognizer.SpeechDetected += new 
		EventHandler<SpeechDetectedEventArgs>(recognizer_SpeechDetected);
 
 recognizer.SpeechRecognitionRejected += new 
		EventHandler<SpeechRecognitionRejectedEventArgs>(recognizer_SpeechRecognitionRejected);
 
 recognizer.SpeechRecognized += new 
		EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
 
 recognizer.RecognizeCompleted += new 
		EventHandler<RecognizeCompletedEventArgs>(recognizer_RecognizeCompleted);
 
 
 
 // recognizer.SetInputToDefaultAudioDevice() Bu metotun bir Thread 
		içinde çalıştırılması gerekmektedir!
 
 // Ses tanıma işlemini başlatıyoruz.
 
 Thread t1 = new 
		Thread(delegate()
 
 {
 
 recognizer.SetInputToDefaultAudioDevice();
 
 recognizer.RecognizeAsync(RecognizeMode.Single);
 
 });
 
 
 
 t1.Start();
 
 
 
 }
 
 
 
 
 
 // Olaylar
 
 // Kullanıcı konuşmaya başladığı anda tetiklenen olay
 
 private void 
		recognizer_SpeechDetected(object 
		sender, SpeechDetectedEventArgs e)
 
 {
 
 textBox1.Text = "Ses Tanınıyor";
 
 
 
 }
 
 
 
 // Kullanıcının konuştuğu kelimeler gramerde bulunuyorsa tetiklenen olay
 
 private void 
		recognizer_SpeechRecognized(object 
		sender, SpeechRecognizedEventArgs 
		e)
 
 {
 
 if (e.Result.Text == "Lights On")
 
 {
 
 pictureBox1.Image = Properties.Resources.lightsOn;
 
 }
 
 else if (e.Result.Text == 
		"Lights Off")
 
 {
 
 pictureBox1.Image = Properties.Resources.lightsOff;
 
 }
 
 
 
 textBox1.Text = e.Result.Text;
 
 
 
 }
 
 
 
 // Konuşulan kelimeler gramerde bulumuyorsa tetiklenen olay
 
 private void 
		recognizer_SpeechRecognitionRejected(object 
		sender, SpeechRecognitionRejectedEventArgs 
		e)
 
 {
 
 textBox1.Text = "Ses Tanıma İşlemi 
		Başarısız.";
 
 }
 
 
 
 // Tanıma işlemi başarılı olsun veya olmasını sonuçlandığında tetiklenen 
		olay
 
 // 
		İşlem sona erdiğinde
 private void 
		recognizer_RecognizeCompleted(object 
		sender, RecognizeCompletedEventArgs 
		e)
 
 {
 
 recognizer.RecognizeAsync();
 
 }
 
 
 
 }
 
 }
 
 
 |  
 recognizer.SpeechDetected : "Herhangi bir ses duyulduğunda tetiklenen 
olay"
 recognizer.SpeechRecognitionRejected  : "Ses tanıma işlemi başarısız 
olduğunda tetiklenen olay"
 recognizer.SpeechRecognized : "Ses tanıma işlemi başarılı olduğunda 
tetiklenen ve sonuçların analiz edilmesi gereken olay"
 recognizer.RecognizeCompleted : "Başarılı veya başarısız olsun, ses 
tanıma işlemi sonladığında tetiklenen olay "
 
 Uygulamamızın çıktısını ise şu şekilde olacaktır:
 
 
  Şekil 1.5 Uygulamanın çıktısı
 
 Umarım yararlı ve bir o kadar da eğlenceli bir makale olmuştur.
 C#ın yeni ve eğlenceli diğer özelliklerinde görüşmek üzere...
 
 Kolay Gelsin.
 Saygılar
 Emrah YİĞİT
 
 Örnek uygulamayı indirmek için 
  tıklayınız.
 
 
 
                Makale:.NET 3.0 ile Ses Tanıma Uygulamaları C#, Visual C# ve .NET Emrah Yiğit
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |