İlginizi Çekebilir
  1. Ana Sayfa
  2. C# (c sharp)
  3. C# – Sesle Komut İşleme (Speech Recognition)

C# – Sesle Komut İşleme (Speech Recognition)

featured

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.

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.
 

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. :)
Bir sonraki makalemde görüşmek üzere kendinize çok iyi bakın sağlıcakla kalın.
 

Yorum Yap

Yorum Yap