eyvallah hocam ruh eşi çok sıradan, bana suç ortağı lazım.

Eline sağlık şyle bi bakınca çok kolay gzüküyor tabi xml dosyalarıyla uğraşması grameri oluşturması var orası ayrı da gayet açıklayıcı bilale anlatır gibi. bir cw klasiği olarakEline sağlık

adamin dibisin Ne zaman birşey ğrenmek istesem, Birden Vaktim Kalmıyor?

Çocuk hergeçen gün kendini 2x geliştiriyor abi Eline sağlık iyibu! yeniden..

Microsoft Speech Recognition Engine nedir? Microsoft'un ses tanıma işlemleri için sunduğu bir kütüphane. Türkçe desteği yok ancak bu yazıda kolay anlaşılsın diye Türkçe üzerinden anlatılacaktır ve Microsoft Speech Recognition Engine yerine kısaca SRE denecektir. ncelikle SpeechRecognizer diye bir sınıf tanımlıyoruz. public static double validity = 0.82; public static SpeechRecognitionEngine recognizer; private static bool Continue; Buradaki validity değeri SRE'nin dndürdüğü sonucu dediğimizi ne kadar doğru anladığına gre filtreliyor. Yani siz "Mahmut Ayşeye zıpzıp top al" dediğinizde onun dndürdüğü sonuç bazen "Mahmut Ayşeyi zıplat." gibi nahoş bir anlam çıkabilir. Ancak bunun Confidence değeri düşük olacağından, validity değerini belirleyerek byle yorumlamaların nüne geçeceğiz. Ardından recognizerı kurmak için InitializeRecognizer diye bir metod tanımlıyoruz. public void InitializeRecognizer ilk satırda yeni bir recognizer tanımlıyoruz. Sonraki xmlGrammar ve cfgGrammar değişkenlerine bakalım. Konu başlığında gramer oluşturmadan bahsettim. Yani sylediğiniz şeyi belli bir gramatik sıralama ve düzene uyup uymadığına gre denetleyebiliyorsunuz, ayrıca bu sylediklerinizin doğru anlaşılmasını da pratikte artırıyor. Bunun nedeni o gramerde belirtilenden başka şekilde yorumlamaması. Peki gramer dediğim ne? Bir Xml dosyası, aslında grxml :) Bu dosyayı oluşturduktan sonra yolunu xmlGrammar'e aktarıyoruz. Bu dosyanın kullanılabilmesi için derlenmesi lazım. Derlendiğinde oluşan dosya. cfg uzantılı olacak. Onun yolunu da cfgGrammar'e yazıyoruz. Ardından Create modunda bir FileStream nesnesi yaratarak grammar. cfg'yi oluşturuyoruz. Şimdi... koyduğum kısma bakalım: XmlReaderSettings settings = new XmlReaderSettings ; settings. DtdProcessing = DtdProcessing. Parse; XmlReader reader = XmlReader. Create ; SrgsGrammarCompiler. Compile(reader, fs); fs. Close ; Grammar g = new Grammar ; recognizer. LoadGrammar ; recognizer. SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs> ; recognizer. SetInputToDefaultAudioDevice ; settings nesnesi ile bir XmlReader için ayarları belirliyoruz. Burada Dtd işlemeyi açtık. Ardından bir XmlReader nesnesi yaratıyoruz ve bizim grammar. xml dosyamızla ayarlarımızı parametre olarak veriyoruz. Altındaki satırda gramer dosyasını derliyoruz ve filestream'e yazıyoruz. Ardından da filestream i kapıyoruz. Sonra derlenmiş gramer dosyamızı ve onun ana kuralını belirterek yeni bir gramer nesnesi yaratıyoruz ve recognizer'a ekliyoruz. Ardından da Ses tanıma gerçekleştiğinde çalışacak event'i tanımlıyoruz. Son satırda ise recognizer'ın girişini bilgisayarın varsayılan ses girişi olarak belirliyoruz. Şimdi StartRecognizing diye bir metod tanımlayalım: public void StartRecognizing { recognizer. RecognizeAsync ; Continue = true; while } Burada ilk satırda recognizerı başlatıyoruz sonra continue değerini true yapıyoruz. While dngüsü recognizerın tanıması için şart bu nedenle aklınızda bulunsun StartRecognizing'i kullanırken async olarak veya ayrı bir thread'de çalıştırın. Ve EndRecognizing: public void EndRecognizing Şimdi de ses tanınma eventini yazalım: void recognizer_SpeechRecognized { if } Burada e. Result. Confidence eğer daha nce belirlediğimiz validity'den yüksekse işleme sokmasını sylüyoruz. Bylece Mahmut'un Ayşe'ye ktü muamelelerde bulunmasını nlüyoruz. Peki ben yukarda niye 0.82 diye belirledim. Kullandığım projede en güzel sonucu o değer veriyordu çünkü. Biraz deneme yanılmayla sizde kendi değerinizi belirleyebilirsiniz. Şimdi gelelim zurnanın zırt dediği yere yani gramerimizi oluşturmaya. nce bir giriş yapalım: <grammar version="1.0" xml:lang="en-US" root="commands" xmlns="http://www. w3. org/2001/06/grammar"> buradaki root kısmına ana kuralımızı yazıyoruz. Kural derken? Gramer bir kurallar bütünü olduğundan tüm cümleyi kapsayan kuralı ana kural olarak belirliyoruz. NOT: Birazdan greceğiniz kodlarda <rule>: Kuralları belirlemek için, <item>: Dilin herhangi bir ğesi olarak, <one-of>: Bu grup ise içindekilerden sadece bir tanesinin seçilmesi için kullanılıyor olacaktır. Şimdi kurmak istediğimiz cümleler "Ali topu at." cümlesini temel alsın. Ali olmasın ama sadece Mahmut olsun Abdulsuavi olsun Necmiye olsun ama başkası da olmasın. Sonra bunlar topu atsın başka şeyleri de atsın, hatta "topu ve " de atabilsin. Ve tüm bunları yaparken "atsın" başka bir eylem yapmasın. Bunları gramere dkelim: nce atacaklar için bir kural belirleyelim: <rule id="atacaklar"> <one-of> <item>Ali</item> <item>Mahmut</item> <item>Abdulsuavi</item> <item>Necmiye</item> </one-of> </rule> Burada one-of ile Ali, Mahmut, Abdulsuavi ve Necmiye'den sadece birinin olabileceğini belirtiyoruz. Şimdi de atılabilecek şeyler için bir kural belirleyelim: <rule id="atilacaklar"> <one-of> <item>Masayı</item> <item>Topu</item> <item>Sandalyeyi</item> <item>Yumruk</item> </one-of> </rule> Şimdi ana kuralımızı yani cümle yapmızı belirleyelim: <rule id="commands"> <ruleref uri="#aticaklar" /> <ruleref uri="#atilacaklar" /> <item repeat="0-1"> <item>ve</item> <ruleref uri="#aticaklar"> </item> <item>at</item> </rule> Burada daha nce bahsetmediğim şeyler var. Birincisi ruleref. Ruleref etiketi sizin daha nce tanımladığınız başka bir kurala referans vermenizi sağlar bylece bir kuralı ana kuralınızın içine defalarca yazmaktan kurtulursunuz. Diğer bahsetmediğim şey ise item etiketinin repeat zelliği. Biz bunu ne için kullandık? Bunun için cümle yapımızı inceleyelim. Şu şekilde ana kuralmızı daha semantik ifade edebiliriz: (0-1) 1- Cümle atacak kişilerden birinin ismiyle başlayacak. 2- Atılacak eşyalarıdan biriyle devam edecek. 3- Ardından opsiyonel olarak "ve" + yine atilacak eşyalardan biri gelecek. Burada opsiyonelliği sağlayan şey item etiketinin repeat zelliğidir. Biz 0-1 diyerek 0 kereyle 1 kere arasında tekrar edilebilir diyerek opsiyonel olmasını sağladık. Farklı şekillerde de kullanılabilir elbette. 4- Cümleyi "at" ile bitirdik. Bu sayede kendi gramerimizi oluşturmuş olduk. Gramer oluşturmanın şyle bir artısı var. Mesela siz bu grameri uyguladıktan sonra "Ali Ayşeye koş." dediniz ama yazdığınız program onu bu gramere gre yorumlamaya çalışacağından muhtemelen "Ali sandalyeyi at." gibi bir şey çıkaracaktır. Ee, bunun neresi artı? Eğer validity değerini de doğru ayarlarsanız ufak tefek yanlışlıkları düzeltmiş olursunuz. Dküman burada bitmiştir. SRE ve gramer oluşturma aslında çok daha geniş bir konu. Semantik etiketler vs. oluşturabiliyorsunuz, ben hakim olduğum kadarıyla aktarmaya çalıştım. Daha detaylı bilgi için MSDN kaynaklarına bakabilirsiniz. Dipnot: Bu dküman Lightsaber tarafından Tahribat. Com için yazılmıştır, kaynak gstermeden yayınlamayınız. Lightsaber tarafından 18/Ağu/15 14:02 tarihinde düzenlenmiştir İnsan; insan olsaydı, insan olmazdı..

Teşekkürler.

grmeyenler için up, anlaşılmayan bi şey varsa sorabilirsiniz İnsan; insan olsaydı, insan olmazdı..