Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




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 : 22.8.2007
Okunma Sayısı : 74578
Yorum Sayısı : 30     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.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
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
NİS
26
2013
recognizer.LoadGrammar(grammar); satırında Error HRESULT E_FAIL has been returned from a call to a COM component.hatası alıyorum işletim sistemi dili ing,SpeechSDK51 ve sapi kurdum hatadan nasıl kurtulurum yardımcı olursanız sevinirim.
ŞUB
22
2013
Arkadaşlar daha önce belirtilen "System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag(en-US)" kodu eklediğimde çalışmadı ancak araştırdım, aşağıdaki kodu eklediğimizde sorunsuz olarak çalıştı bende. grammarBuilder.Culture = System.Globalization.CultureInfo.GetCultureInfo("en");
AĞU
4
2012
Programı Çalıştıramayan Arkadaşlar Hala olabilir diye düşündüm Çünkü nerdeyse hiçbiyerde net bir bilgiye ulaşamadım (en-us) dil hatası sanıpta olmuor diye pes eden arkadaşlar olmuş olabilir.SDK ,framework,hatta visual studioda bile sorun olabilir.diyenler olmuş .Çözüm kendi işletim sisteminizde kesin Çözümler için Mail:[email protected]
NİS
10
2012
Ben bu çalışmadan yola çıkarak bi proje hazırladım programın diğer sistemlerde çaışması için grammarBuilder.Culture = System.Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag(en-US) bu kodu eklemem yeterlimi ? yoksa extra bişi yapmalımıyım ?
EYL
22
2011
arkadaşlar ben bu uygulamayı denedim çok güzel çalışıyor ancak şu ayrıntıyı belirtmek isterim. "light on" "light of" şeklinde yazmak yerine "light,on" ve light,off" yazarsanız hatalı çalışma olasılığı kalmıyor. Birde ben bu uygulamanın bir adım ilerisine gittim VB.NET ile bir usb hid programı yazdım ve konuşma tanıma uygulaması ile entegre ederek bir proje hazırladım aşağıdaki linkten videosunu izleyebilirsiniz. http://www.youtube.com/watch?v=QYP3OfaPSuI
NİS
4
2011
Hata alan arkadaşlar güncelleştirmelerden ingilizce dil paketini yüklesinler ve grammerBuilder için şu satırı eklesinler builder.Culture = new System.Globalization.CultureInfo("en-US"); Yukarıdaki satırı eklemek istemezseniz sisteminizin dilini ingilizce olarak ayarlayadabilirisiniz. Ama dil paketini (eğer yüklü değilse) mutlaka indirmelisiniz.
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. [email protected]
Sayfalar : 1 2 
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