C# Media Player daki

0

C # da Media Player daki Çıkan konuşmaları Not Defterine Kayıt Etmek  için Nasıl Bir yol İzlemeliyim

e3e3e3 e3e3e3 (15)
9 yıl önce sordu

    Toplam 1 Cevap


    0

    .NET 3.0 ile Ses Tanıma Uygulamaları

    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:


     Kaynak

    feritarslan feritarslan (303)
    9 yıl önce cevaplandı

    • Merhaba, bu tür kopyala- yapıştır cevaplar. uzmanim.net'te hoş karşılanmamaktadır. Kaynak dahi belirtilmiş olsa kopyala yapıştır şeklinde lütfen cevap vermeyiniz. hakan 9 yıl önce
    üyelik gerektirir

    Cevap yazabilmek için üye girişi yapmalısınız.

    Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
    uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol