C# ile .NET içindeki ses tanıma (Speech Recognition) kütüphanesini kullanarak mikrofondan aldığımız komutlara göre işlem yapabilir ya da tanıdığımız kelimeleri kaydedebiliriz.

C# - Sesle Komut İşleme (Speech Recognition)
Hazırladığım örnek bir ses tanıma uygulaması.

Ben denemelerimi İngilizce Windows 7 Ultimate 64-bit üzerinde yaptım. Daha alt Windows sürümlerinde (XP, Vista) sorun çıkar mı bilmiyorum. Türkçe işletim sistemlerinde sorun çıkartabilir. En azından aktif etmesenizde sisteme ingilizce dil paketini kurup deneyebilirsiniz.

Hazırlık

Ses tanıma kütüphanesini projenizde kullanmak istiyorsanız Visual Studio içinde üst menüden Project > Add Reference... yolunu izleyin. Ardından açılan pencerede soldaki menüden Assemblies altındaki Framework seçeneğini seçtikten sonra ortadaki listeden System.Speech kütüphanesini seçili hale getirip OK butonuna tıklayın.

using System.Speech.Recognition;

Tabi ki form içinde bu kütüphaneyi kullanacağımızı using ile belirtiyoruz.

Tanımlanacak Kelimeler

Önce sınıf seviyesinde (Form1 içinde) string dizisi oluşturup tanımlanacak kelimeleri önceden belirtiyoruz. Yani Speech Recognition Engine bu kelimelere duyarlı olacak.

private string[] words = { "hello", "bye", "speech", "example" };

Tanımlayıcı Nesne

Şimdi, belirlediğimiz kelimeleri tanıyacak olan SpeechRecognitionEngine nesnesini oluşturup gerekli ayarları yapacağız. Ben Form1_Load içine yazdım, size de öyle öneririm. Çünkü form dışında herhangi bir yerden erişim gerekmeyecek.

private void Form1_Load(object sender, EventArgs e)
{
    // 1. Bölüm
    SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine();
    speechRecognitionEngine.SetInputToDefaultAudioDevice();

    // 2. Bölüm
    Choices choices = new Choices();

    foreach (string word in this.words)
    {
        choices.Add(word);
    }

    // 3. Bölüm
    GrammarBuilder grammarBuilder = new GrammarBuilder(choices);
    Grammar grammar = new Grammar(grammarBuilder);

    // 4. Bölüm
    speechRecognitionEngine.LoadGrammar(grammar);
    speechRecognitionEngine.SpeechRecognized += this.speechRecognitionEngine_SpeechRecognized;
    speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}

Birinci bölümde gerekli nesneyi oluşturup SetInputToDefaultAudioDevice varsayılan mikrofonu kullanmasını sağladık. Eğer harici mikrofon kullanıyorsanız değiştirmelisiniz.

İkinci bölümde algılanacak kelimeleri tutan Choices nesnesini oluşturup bir döngü yardımıyla üstte belirlediğimiz kelimeleri tek tek seçeneklere -Add methodu ile- ekledik.

Üçüncü bölümde belirlediğimiz kelimelerden bir "gramer yapıcı", ondan ise bir "gramer" nesnesi oluşturduk.

Dördüncü bölümde oluşturduğumuz gramer nesnesini, ses tanıma nesnesine -LoadGrammar methodu ile- yükledik. Bir ses algılandığında form içindeki speechRecognitionEngine_SpeechRecognized methoduna gidilmesini -ki henüz oluşturmadık- sağladık. Bir de ses algılama yöntemini asenkron/çoklu olarak ayarladık.

Buraya kadar karşılaştığınız tek problem dördüncü bölümün ikinci satırı ise sorun yok demektir. Şimdi oluşturacağımız method ile o hata da kaybolacak.

Ses Tanıma Olayı (SpeechRecognized Event)

Yukarıdaki örnekte kelimeleri yazdırmak için iki tane ListBox kullandım. Siz isterseniz başka bir şeyler de yapabilirsiniz. Basitçe aşağıdaki method, algılanan kelimeyi üstte belirlediğimiz kelimeler içinde arar. Eğer varsa listBox1 yoksa listBox2 içine yazdırır.

private void speechRecognitionEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    foreach (RecognizedWordUnit recognizedWord in e.Result.Words)
    {
        // words dizisi algılanan kelimeyi içeriyor mu?
        if (words.Contains(recognizedWord.Text))
        {
            // Yukarıda belirlenen kelimeler için.
            listBox1.Items.Add(recognizedWord.Text);
        }
        else
        {
            // Tanınmayan kelimeler için.
            listBox2.Items.Add(recognizedWord.Text);
        }
    }
}

Ayrıca fark ettim ki "merhaba" deyince de "hello" yazdırdı. Bu bir özellik midir yoksa kodda mı bir sorun var anlayamadım. Test edebilirsiniz. :)

Örnek proeyi indirmek isteyenler SpeechRecognitionExample1.rar linkine tıklayabilirler.