|
.NET 3.0 ile Ses Tanıma Uygulamaları |
|
Gönderiliyor lütfen bekleyin... |
|
|
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 Windowsa entegresinin kolay olmasıdır. Çoğumuz Windows Denetim Masası
içinde bulunan Speech seçeneğini görmüştür. Windowsa 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ı
20ye 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 Microsoftda ü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.2de 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 %50ye 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.3de görüldüğü gibi uygulamamız Windowsa 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
|
|
|
-
-
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
|
|