C#nedir?com
 
YAZAR HAKKINDA
Emrah Yiğit
Emrah Yiğit
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
6 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: baglamda destekli gelisimin gereken islemi motorlarini motoru private sender speech tanima teknolojilerin tetiklenen uygulamanin windows?a C# / VC#/.NET Emrah Yiğit
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 8/22/2007
Okunma Sayısı : 18811
Yorum Sayısı : 24     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Tufan Ünlü
iTextSharp kütüphanesi kullanarak pdf dosyası oluşturmak
Tufan Ünlü
yazının devamı >
Görkem Sezgin
Oracle'de Otomatik Artan İçerikli Sütun Oluşturmak
Görkem Sezgin
yazının devamı >
Turhal Temizer
SharePoint 2010 - SPD 2010 ile Server–Side Kod Yazmak
Turhal Temizer
yazının devamı >
Turhal Temizer
SharePoint 2010–Veri Tabani Loglama (Logging Database)
Turhal Temizer
yazının devamı >
Selman UZUN
X86 Assembly Diliyle Buble Sort
Selman UZUN
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
SharePoint 2010 - Error occurred in deployment step ‘Recycle IIS Application Pool’ 9/2/2010
Turhal Temizer 'in Blogu
SharePoint 2010 – Custom MasterPage ile Yönetilebilir Kod Kullanımı 9/2/2010
Burak Selim Senyurt(MVP)
NedirTv?com Söyleşileri – 2 – Takım Çalışması 8/27/2010
Burak Selim Senyurt(MVP)
Entity Framework, Data Services, C# 4.0, Excel ve Komple Bir Uygulama 8/26/2010
Tembel Yazılımcı'nın Seyir Defteri
Test Driven Development ve Unit Testing 7/8/2010
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Her Yönüyle C# - Sefer Algan
.NET 3.0 ile Ses Tanıma Uygulamaları
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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 Windows’a entegresinin kolay olmasıdır. Çoğumuz Windows Denetim Masası içinde bulunan Speech seçeneğini görmüştür. Windows’a 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ı 20’ye 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 Microsoft’da ü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.2’de 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 %50’ye 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.3’de görüldüğü gibi uygulamamız Windows’a 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... :)

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();

        }

 

    }

}

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.

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
  • Yazılan Yorumlar
  • Yorum Yaz
AĞU
29
2010
PC'nizin dili English olmali.
HAZ
3
2010
Öncelikle makale için teşekkürler. grammarBuilder.Culture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag(en-US); arkadaşımızın söylediği bu kodu ekliyorum fakat bu sefer (en-US) kısmında hata alıyoruz bunu nasıl gidereceğimi anlatır mısınız. Teşekkürler...
MAR
22
2010
COM Exception was unhandled Bir COM bileşenine yapılan çağrıdan HRESULT E_FAIL hatası döndürüldü. hata nerden olabilir teşekkürler.
MAR
18
2010
Grammar hataları için Fırat Akcanın yorumuna göz atabilirsiniz.
MAR
18
2010
Grammar hataları için Fırat Akcanın yorumuna göz atabilirsiniz.
MAR
18
2010
Grammar hataları için Fırat Akcanın yorumuna göz atabilirsiniz.
MAR
18
2010
Grammar hataları için Fırat Akcanın yorumuna böz atabilirsiniz.
MAR
18
2010
Merhaba yiğit bey. Emeğinize sağlık öncelikle, ben örneğinizi .çalıştırdığımda bir hata verdi. recognizer.LoadGrammar(grammar); satırında Erişim engellendi. (HRESULT özel durum döndürdü: 0x80070005 (E_ACCESSDENIED)) diye bir hata yazdı. Bunu nasıl çözebilirim.? şimdiden teşekkürler iyi çalışmalar. Arkadaşın dediği satırıda ekledim. Onda da en - US da hata verdi :D ..
ŞUB
23
2010
Merhaba Sayın Emrah Yiğit .. Ben lise öğrencisiyim ve ses ile ilgili bir sorunum var şimdi ben sizin örnek projeyi çalıştırdığımda ; Ses tanıma diliyle sistem dili uyuşmuyor gibi bir hata verdi ve sizin bu örnek uygulamınızı benim çalıştırmam lazım. Yardımcı olursanız çok seviirim. kaan.kzltp@hotmail.com
OCA
8
2010
Yaptğımız uygulamanın kullanıcının bilgisayarında çalışması için .NET FrameWork 3.0 ve SAPI SDK 5.1 yeterli mi?Daha küçük boyutlu ya da farklı kurumlar gerekiyor mu?
MAY
23
2008
teşekkürler ama , onof yerine açkapa diyebileceğimiz bir makalede yazabilir misiniz. gördüğüm tüm makaleler speech.dll ile alakalı yazılarında ingilizce için neler yapılabileceğini söylemiş. peki biz bunu türkçe uygulamalar için nasıl kullanacağız. bu konuda bilgi verirseniz ok sevinirim
ARA
5
2007
Merhaba, elinize sağlık, gerçekten güzel bir konu. Bu sınıfla neler yapılabileceğimizi düşündümde bir anda gerçekten baya büyük bir havuz oluştu kafamda. Mesela en basiti (toplama-çıkarma vs.. işlemleri yapılabilinir) sanırım ve elleri olamayan insanlara yönelik uygulamalar yazılablinir.
AĞU
29
2007
Güzel bir demo,teşekkürler. Yalnız bir ayrıntı var bölgesel ayarlar ingilizce olmaz ise çalışmıyor. Bunun için : GrammarBuilder grammarBuilder = new GrammarBuilder(choices) satırının altına şu kodu eklerseniz diğer sistemlerde de çalışır.. grammarBuilder.Culture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag(en-US)
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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