#-Yapay zeka ve ses tanıma-#

Oğuz~#>

Kıdemli Üye
5 Tem 2009
4,772
16
Bursa
Yapay Zeka Ve ses tanıma metodlarını öğrenelim bir çok şirket bu yöntemleri günümüzde kullanıyor ve başarı oranları oldukça yüksek bende sizlerle paylaşmak istedim .

Giriş

Sinir ağları çok çeşitli uygulama alanlarında kullanılmıştır.Günümüzde artık
onların kullanılmadığı yada kullanım potansiyellerinin olmadığı alanlar görmek
neredeyse imkansızdır.

Sinir ağları diğer metotların işe yaramadığı alanlarda,karmaşık yada basit
doku algılama ve eşleştirmede kullanılır.Sinir ağları çok geniş bir problem çözme
yelpazesinde kullanılır. En çok kullanıldığı alan bir işin optimizasyonu yani bir
işin olabilme ihtimali en yüksek olacak şeyi projelendirmedir.Sinir ağları
önceliklerin ortaya konulmasını yaparken tahminleri de çok defa kullanılır.
Mesela bir hastanenin acil servisinde en kritik hasta çok başarılı bir şekilde
seçilebilir.Ayrıca sinir ağları borsada şaşkınlık verecek derecede kesin sonuçlar
vermektedir.Yine kredi kartları kurumlarında iflas tahminlerinde kullanılmaktadır.
Her ne kadar sinir ağları uygulama,tahmin,teşhis,planlama, gözetme,tamir,
yönlendirme ve kontrol için kullanılıyor olsa da en çok kullanıldığı ve başarılı
olarak uygulandığı alanlar sınıflandırma ve görüntü tanımadır. Böyle bir sistem
nesneyi hastalık,doku,görüntü ve kimyasal bileşik adları altında sınıflandırır ve
bir hareket tavsiyesinde bulunur.

NESTOR adlı şirket; kredilerin iyi ve kötü olarak sınıflandırılmasında, ipotek
sigorta kararlarının finansal risklerinin belirlenmesinde kullanmıştır.
YSA aynı zamanda; metni konuşmaya çevirmede kullanılır. Diğer bir alan
karakter tanıma ve el yazısı tanımadır. Bu alan bankacılıkta; kredi kart
işlemlerinde belgelerin üzerindeki el yazısını tanımada kullanılır.Sinirsel ağların
görüntü tanıma kabiliyetleri çek işlemlerinde el yazısına ve sisteme bir insan
sistem çek tarafından girilmiş olan miktarı okumak için kullanılmaktadır. Bu
işlemi otomatik hale getiren işlemlerindeki hataları önemli derecede azaltacaktır.
Böyle bir sistem Bank Tec için HWC tarafından geliştirilmiştir.
En iyi bilinen uygulamalardan biri ABD hava alanında kurulan bomba
detektörleridir. Bu araç SNOOPE olarak adlandırılır ve kimyasal bileşiklerin
içindeki bir takım maddelerin varlığını belirlemek için kullanılır.

Ana Konumuza geçiş yapalım arkadaşlar

Ses tanıma
Görüntü tanıma

Yapay zekanın alanına giren ses uygulamaları içinde ses tanıma ile beraber
aynı zamanda konuşmacı tanımlama ve ses üretmede vardır.Bu üç başlık
konuşma işleme (speech processing) veya ses işleme başlığı altında toplanır. Ses
tanıma bu üç konudan en zor olanıdır, zira konuşmacı tanıma çok fazla sayıda
tanınacak insan olmadığı takdirde, insan sesinin özelliklerinden dolayı kısmen
çeşitli kolaylıklar içermektedir. Hatta bu özelliklerden dolayı ses tanıma daha
zorlaşmaktadır.Yani ses tanıma uygulamalarının konuşmacıdan bağımsız olması
için ayrıca çaba harcanmaktadır. Ses üretme (speech synthesis) ise kısmen de
olsa üzerinde belli başlı bazı algoritmalar geliştirilmiş ve oturmuş bir konudur.
Özellikle İngilizce için bu konuda çok iyi uygulamalar vardır. Hatta son günlerde
Türkçe için de bir iki uygulama çıkmıştır, ancak bunlar çok başarılı değildirler.
Ses tanıma teknolojisi ile Türkiye’de ticari manada ciddi olarak ilgilenen pek
fazla firma yoktur. Bu konuda daha çok çeşitli üniversitelerde doktora tezleri
şeklinde çalışmalar yapılmaktadır. Ancak bu çalışmalardan şanslı olanların
dışardan mali destek gördükleri de olmuştur.

Ses tanıma

Yurt dışında ise, özellikle de Amerika’da bu konuda çalışan pek çok firma var.
Amerika’da 1994 den beri 1250 civarında kuruluş bu konu ile ilgili çalışmalarda
bulunmuştur, bunların 30’a yakını üniversite diğerleri ise ticari ve askeri
kuruluşlardır, bu konu ile ilgili çalışmalar yapan kuruluşların içinde US Army ve
US Navy de yer almıştır. Bunların haricinde telefon şirketlerinde meşrubat
şirketlerine pek çok kuruluş bu çalışmalara katılmıştır.
Ses tanıma ve doğal dil işleme, Microsoft’un hesaplarına göre Dos’tan
Windows’a geçişten sonraki en büyük atılım olacak. Onlara göre bu teknoloji
normalde cansızmış gibi görünen bir objeyle olan (bilgisayar) ilişkinizi köklü
biçimde değiştirecek. Ancak Microsoft’a göre bu teknoloji birden ortaya
çıkabilecek bir teknoloji değil. Gelecek on yıl içinde ortak çalışmalar sonucunda
yavaş-yavaş gelişip yerine oturacak.

Bu teknolojiyi 4 başlık altında incelemek mümkündür.

1. Telefonda ses (konuşma) tanıma:: Komutları anlayan bilgisayarlar ile, bu
konuda zaten bayağı yol alındı. Telefonla servis veren veya verebilecek olan
şirketler için bu konu büyük önem arz etmektedir

Ses tanıma :
2. Dikte ettirme: Sizin sürekli konuşmanıza kısıtlı olarak izin veren, mevcut yazılımlar
var. Örnek olarak "Microsoft Dictation" ve "Dragon Dictate" verilebilir. Bu programların
doğruluk oranları %90-95’ler civarındadır. Ancak hala çalışmalar devam etmektedir
çünkü bu hata oranı 3000 kelimelik bir makalede pek çok boşluk kalmasına sebep
olmaktadır.
3. Konuyu anlayan tanıyıcılar: Bu alandaki çalışmalar sadece söylenen kelimeyi
anlamayı değil ne demek istediğinizi yani söylediğiniz cümlenin anlamını çıkarmayı
hedeflemektedir. Bu hedefe ulaşmak öncelikle uzmanlaşmış uygulamalar yapmayı ve
sınırları belirli alanlar içinde kalmayı, bunu başardıktan sonra genel kullanıma
geçmeyi düşünmektedirler
4. Doğal dil anlama: Bilgisayarlar, sürekli konuşmayı ve diyalogları anlayabildiğinde,
bu, teknolojideki büyük bir devrim olacaktır. Henüz bu teknolojinin gelmesine en az 15
yılın gerektiği düşünülmektedir. Ama bu teknoloji yayıldığında hayatımızda büyük
değişikliklere neden olacaktır. Bilgisayarınıza yapmasını istediğiniz şeyi normal bir
cümle şeklinde söyleyecek ve isteğinize anında ulaşacaksınız. Microsoft ve IBM
beraber bu hedefe ulaşmak için çalışıyorlar. Özellikle Microsoft, işletim sistemine bu
teknolojiyi yerleştirmenin yollarını arıyor. Belki inanmak zor olabilir ama gelecekte bir
gün bilgisayarınızın etrafında ne söylediğinize dikkat etmeniz gerekebilir.

Ses tanıma :
Ayrıca ses tanıma problemine getirilen farklı çözüm tarzları vardır. Bunlar
tanınması gereken konuşmanın kesikli mi yoksa sürekli olduğundan etkilenirler.
Yani iki konuşmayı da aynı teknikle tanımak zordur. Kesikli bir konuşmanın
tanınması daha kolaydır ve kelime-kelime yapılması gayet uygundur. Sürekli bir
konuşmanın ise kelime-kelime tanınması daha zordur çünkü kelimelerin nerede
başlayıp nerede bittiği bilinmemektedir. Dolayısıyla sürekli tanıma genelde fonem
bazında yapılmaktadır. Fonem anlam içeren en küçük ses demektir. Yani fonem bir
heceden daha kısa bir sestir. Normal bir hecede başlangıç-orta-bitiş olmak üzere
genelde üç fonem bulunur. Ancak fonemleri de birbirinden kesin hatlarla ayırmak
pek mümkün değildir. Bu nedenle fonemleri tanıyacak ve temsil edecek çeşitli
sistemler geliştirilmiştir. Bunların başında Hidden Markov Modeli (HMM)
gelmektedir. Ses tanıma problemi kişiye bağımlı, kişiden bağımsız yada kişiye
uyum sağlayan tarzlarda çözülebilir. Ses tanıma probleminde önemli olan diğer bir
nokta da tanınacak kelimelerin (kelime haznesi) sayısıdır.

Küçük kelime haznesi - 10-100 kelime
Orta kelime haznesi - 100-1000 kelime
Geniş kelime haznesi - 1000-10000 kelime
Çok geniş kelime haznesi - 10000 ve daha fazla kelime

Ses tanıma:
Farklı ses kodlama ve tanıma tekniklerine girmeden önce insan sesinin özellikleri
hakkında biraz bilgi vermek konunun daha iyi anlaşılmasına yardımcı olacaktır.
Ses (konuşma) sinyalleri durağan olmayan sinyallerdir. Eğer bu ses segmentlere
bölünürse 5-20 milisaniyelik temel elemanlardan oluştukları görülebilir. Konuşma
sinyalleri sesli (voiced), sessiz yada ikisinin karışımı olabilir. Burada sesli diye bahsedilen
bildiğimiz sesli harfler, sessiz diye bahsedilen de geriye kalan harflerin telâffuzudur. Sesli
sinyalin enerjisi normalde sessiz sinyale göre oldukça yüksektir.
Sesli konuşma gırtlağın, titreşen ses telleri tarafından ürettiği hava palslarıyla tahrik
edilmesi sonucu oluşur. Ses telleri periyodik palslar oluşturur ve bu palsların frekanslarına
Temel Frekans adı verilir. Sessiz konuşma ise gırtlaktaki bir boşluktan havanın burun
bölgesine zorlanmasıyla oluşturulur. “N” gibi burunsal sesler, gırtlağın akustik
kaplinlenmesiyle (sürekli titreşim) oluşturulur. “P” gibi darbeli sesler ise ağız boşluğundan
bir anda hava bırakılmak suretiyle oluşturulur. Konuşma üreten ve kodlayan sistemler bu
karakteristik modelleri göz önünde bulundurarak hazırlanırlar.

Ses Tanıma Sesin kodlanması

Sesin kodlanması
Ses kodlama (sıkıştırma) frekans domeninde ve zaman domeninde olmak üzere iki
farklı metotla incelenebilir. Kullanılan sıkıştırma algoritmasının tipi ihtiyaç duyulan
fonksiyonelliğe ve istenen çıktı kalitesine göre seçilir.
Her iki yöntemde de sıkıştırma, fazlalığın atılması prensibine göre çalışır. Konu ses
sıkıştırma olunca kullanılmayan kısımların atılmasıyla, hissedilemeyen kısımlar hata
ya da distorsiyon olarak düşünülür.
Pek çok sıkıştırma tekniğinde amaç transfer edilen datanın ve saklama alanının
azaltılmasıdır. Pek çok yüksek kaliteli teknik 64 kBit/saniye gibi yüksek değerlerde
sıkıştırma yaparken 1’e 24 oranında sıkıştıran teknikler de vardır. Ancak sıkıştırmanın
fazla olması, elde edilen datanın gerçek zamanlı olarak işlenebilmesinde ve konuşma
tanımada kullanılmasını zorlaştırır.

KODLAYICI TİPLERİ
Analog ses sinyallerini dijital formata çeviren kodlayıcılar dalga ya da ses kodlayıcı
olabilirler. İkisi arasındaki fark, biri tamamen insan konuşmasına göre optimize edilmiş,
ona göre hazırlanmıştır, diğeri ise tüm ses tipleri için geçerlidir.

Ses tanıma: Doğrusal Kuantizasyon Teknikleri

PCM (Pulse Code Modulation) sesin doğrusal kuantizasyon ile dijital formata
dönüştürüldüğü en basit yöntemdir. Temel olarak 8 kHz’de ses sinyalini örnekleyerek
kuantize eder. Çıkış akışı yaklaşık 64 kBit/saniyedir. Bu sebeple bu çeşit kodlama
gerçek zamanlı sistemlerde, yüksek bant genişliği isteyeceği, hafıza ve kaynak
sıkıntısı yaratacağı için pek uygun değildir.
DPCM (Differential Pulse Code Modulation), PCM’e göre daha etkili bir yöntemdir
çünkü ses sinyali içindeki gereksiz kısımları, daha sonra önceki ve sonrakinden
örneklenebilecek şekilde atar. Böylece sıkıştırıcının tek yaptığı birbiri ardı sıra gelen
örneklerdeki farkı belirtmektir. Çözme işlemi sırasında bu sinyaller yeniden
oluşturulur.
a.ADPCM
ADPCM (Adaptive Differential Pulse Code Modulation) 32 kBit/saniye gibi oranlarda
çok yüksek ses kalitesi sağlayabilir. 16, 24,32 ve 40 kBit/saniyelik bit akış oranlarında
çalışacak şekilde standart hale gelmiştir. ADPCM algoritma olarak PCM’den farklıdır
çünkü örneklenmiş ses sinyalinin kuantize edilmesinin yerine ön kestirilen ve kuantize
edilen sinyal arasındaki farkı kuantize eder. İyi bir ön kestirimde gerçek sinyal ile tahmini
sinyal arasındaki fark çok küçük olacaktır ve bu da daha düşük bit akış hızı anlamına
gelecektir. Arkasında çalışan kuantizer tek tip değildir ve farklı sinyal modellerinde
kullanılmak üzere optimize edilebilir.

Ses tanıma :
Sinyalin yeniden üretilmesi kuantize edilmiş farkın tahmini sinyale eklenmesiyle
bulunur. Bu sayede orijinal sese çok yakın bir sinyal elde edilmiş olur. ADPCM
metodu sadece 2:1 gibi çok düşük bir sıkıştırma sunsa da DSI metodlarıyla beraber
kullanılarak 4:1 oranına ulaşılabilir.
Vektörel Kuantizasyon Teknikleri
Vektörel kuantizasyon, datayı doğrusal yerine vektörel olarak kodladığı için daha
yüksek performans sağlar. VPCM ve CELP vektörel kuantizasyon kullanırlar ve
stokastik değerler bir vektör tablosunda tutularak oradan referans edilir.
a.CELP
CELP, Kod etkileşimli doğrusal ön kestirim anlamına gelir. Bu algoritma, insanı bir
filtre ve tahrik kaynağından ibaret görerek yüksek sıkıştırma oranlarına ulaşır.
Sıkıştırmayı filtrenin kod listelerini yaparak gerçekleştirir. Konuşma sinyali geldikçe
filtre kendini insan sesinin karakteristiklerine göre adapte eder. Eğer daha yüksek
sıkıştırma istenirse CELP kodu içindeki duyulamayan frekanslara ait data da
atılabilir.
Ses tanıma :
CELP, zaman domeninde çalışır. 4800 bps ile yaklaşık 13:1 sıkıştırma sağlar. 100
milisaniye civarında bir gecikmesi vardır ve işlem karmaşıklığı 16.5 MIPS’tir.Önce
gelen sesten öncül parametreler belirlenir. Daha sonra kod listesinde buna uygun,
minimum hata veren tahrik modelinin belirlenmesi takip eder. En sonunda da bu
modele gelen ses datası uydurularak parametreler üretilir. Gelen parametreler, kod
kitabından uygun parametrelerle birleştirilerek tahrik modeline yerleştirilir. Daha sonra
buradan spektral parametreler çıkarılır ve ses yeniden üretilir.
b.VSELP
VSELP, oldukça iyi düzenlenmiş bir kod listesi kullanır. İşlem karmaşıklığını
azaltmak ve kanal hatalarında daha sıhhatli sonuç vermesi için kodlar birbirlerine
birbirlerinin kuyruğu gibi eklenmiştir. VSELP modeli bunun dışında çalışması CELP’e
çok benzer.
Bunların dışında bir de FFT tekniği vardır ki ses sinyalini frekans bileşenlerine
ayırır.
Ses tanıma :
Ses tanıma için YSA nasıl kullanılır?
Belli bir kelimeden, FFT, LPC veya CELP ile ya da başka bir teknikle,elde ettiğimiz
katsayıları, YSA’nın giriş katmanına yüklemeliyiz. Kullandığımız teknik ve elde ettiğimiz
katsayıların miktarı, YSA’nın başarısı ve çalışma hızı için önemli etkenlerdir. Sonra
çıkış katmanına da bu kelimeyi temsil edecek bir kod yükleriz. Bu kod bizim seçtiğimiz
bir teknik olabilir, ama temel olarak 0..1 (ya da -1..1) arasındaki değerlerine
dayanmalıdır. Örneğin 0, 5 ten büyük olan çıkışları 1 kabul edip diğerlerini 0 kabul
ederek ikili kodlama yapabilir, ya da 1’e en yakın olan çıkışın numarasını kullanabiliriz.
Sonra YSA’yı eğiten algoritmayı çalıştırırız. Biraz bekledikten sonra başka bir kelime
için bu işi tekrarlarız. Eğitme safhası siz yeterli görene kadar bu şekilde devam eder, ki
yeterli olması için oluşan toplam hatanın belli bir yüzdenin altına inmesi gerekir. Eğitme
aşamasında kullanılan verilerin sırası rastlantısal (düzgün dağılım) olmalıdır, eğer
benzer karakterdeki veriler öbek halinde eğitme işlemine tabi tutulursa, öğrenme en
son öbek için daha iyi olabilir. Bu da diğer öbeklere haksızlık olur. Dolayısıyla eğitme
aşamasındaki döngünün içinde, sıra rastlantısal seçilmelidir. Ayrıca bazı durumlarda
öğrenmenin gerçekleşmeyebileceği de düşünülerek döngünün sonlandırma şartına
belli bir tekrar sayısının aşılması koşulu da eklenmelidir
Ses tanıma :
Nihayet sıra kullanma safhasına gelir. Girişleri -yani konuşulan bir kelimenin
hesaplanan katsayılarını- veririz. Çıkışların hesaplanması için YSA’yı çalıştırırız. Daha
sonra programınızda çıkışları inceleyerek çıkışların gösterdiği koda göre söylenen
kelimeyi anlamaya çalışırız.
Ayrıca bu yöntemle sadece ses değil benzer yapıdaki hemen hemen her şeyi belli
bir doğruluk ile tanıyabilir, bir birinden ayırabilirsiniz. Bunlara örnek olarak matematiksel
fonksiyonlar, elle veya makine ile yazılmış karakterler ya da elektronik devrelerin giriş
ve çıkışları verilebilir.
Geliştirme süreci
Projeyi geliştirirken dördüncü nesil geliştirme teknikleri kullanılmıştır, bu teknik genel
olarak:
1.İhtiyaçların toplanması
2.Dizayn stratejisi
3.Dördüncü nesil teknikleriyle implementasyon(uygulama)
4.Test
Aşamalarından oluşur. Bu
aşamalarda genel olarak neler
yaptığımızı açıklarsak.
İhtiyaçları bir araya getirdik.
Dördüncü nesil dilleri dizaynına
uygun olarak dizayn stratejisi
oluşturduk. Dördüncü nesil
dilleri (C++ Builder 4.0 ve
Delphi 3.0) kullanılarak
kodlama ve implementasyon
gerçekleştirdik.Ortaya çıkan
ürünü test ettik. Değerlendirme
sonucunda hissedilen
eksiklikleri tamamlamak üzere
tekrar başladık. Böylece devam
etti.
Ses tanıma :
UYGULAMA
Bu bölümde projemizin ürünü olarak hazırladığımız programın ve program
kodunun bizden sonra kullanılabileceği veya geliştirilebileceğini düşünerek
hazırladığımız dokümantasyonu içeren bölümdür. Özellikle kafa karıştırabileceğini
düşündüğümüz bazı algoritmaları daha detaylı açıklamaya çalıştık. Ayrıca bu
bölümü okuyan kişinin projenin yapısı hakkında kodu incelemeden önce projenin
yapısı hakkında genel (kuş bakışı) bir fikir elde edebilmesini amaçladık.
İmplementasyon aşamasında Delphi ve C++Builder ürünlerinden faydalandık.
SETA
Sesin kaydını, LPC ile kodlanmasını, yapay sinir ağı içinde tanınmasını ve daha
sonra da alınan sonucun uygulamaya gönderilmesini gerçekleştirir.
Sesin Kaydı
Sesin gerçek zamanlı olarak kaydedilmesi gereklidir aksi takdirde gelen datanın
analiz edilmesi ve kelimenin tanınması gecikecektir. Bu sebeple SETA’nın en
öncelikle yapması gereken şey ses kaydıdır. Programın ana prosesi bu iş için
tahsis edilmiştir.
Ses tanıma :
Windows altında ses kartından kayıt yapmak için alt seviye çoklu ortam
komutlarından “waveInXXX “ grubu kullanılmaktadır. Ses 8 kHz, 16-bit, mono ve PCM
formatında kaydedilmektedir. Bu parametreler aşağıda görülen yere ses kartına
gönderilmektedir
wfmt.wFormatTag = WAVE_FORMAT_PCM;
wfmt.nChannels = 1;
wfmt.wBitsPerSample = 16;
wfmt.nSamplesPerSec = 8000;
wfmt.nBlockAlign = (unsigned short)((wfmt.nChannels * wfmt.wBitsPerSample) / 8);
wfmt.nAvgBytesPerSec = wfmt.nSamplesPerSec * wfmt.nBlockAlign;
wfmt.cbSize = 0;
Daha sonra ses kartı program hazır olduğunda waveInOpen ile kayda
hazırlanmakta, waveInStart ile de kayıt başlamaktadır. Ancak bu aşamada ses
kartından gelen datanın yerleştirileceği bellek hazır değildir. (fonksiyon isimlerinin “_” ile
başlayan halleri, hata kontrollerini toplu olarak başka bir kısımda yapabilmek içindir)

Ses tanıma :

**** TLPC::BeginRecord()
{
_waveInOpen(&hwavein, WAVE_MAPPER, &wfmt, DWORD(waveInProc), 0, CALLBACK_FUNCTION);
_waveInStart(hwavein);
}
**** CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case WIM_CLOSE: PostMessage(LPC->Handle, CM_WAVE_CLOSE, 0, 0);break;
case WIM_DATA : PostMessage(LPC->Handle, CM_WAVE_DATA, dwParam1, 0);break;
case WIM_OPEN : PostMessage(LPC->Handle, CM_WAVE_OPEN, 0, 0);break;
}
}
waveInOpen içindeki parametrelerden biri görüldüğü üzere waveInProc diye başka
bir fonksiyondur. Bu kısım, ses kartının donanım olarak bizimle haberleşmesi için
kullanılan bir CALLBACK fonksiyondur. CALLBACK fonksiyonlar bizim tarafımızdan
değil, işletim sistemi tarafından ihtiyaç duyulduğunda çağrılır. Burada ses kartı kayda
başladığında, gönderdiğimiz bellek hazır olduğunda ve kayıt bittiğinde bu fonksiyon
çağrılacaktır.
Ses tanıma :
Kayıt başlamıştır ancak kaydedilen data şu an herhangi bir yerde saklanmamakta, ses
kartı üzerindeki tampon bellek üzerinde, doldukça kaybolmaktadır. Bunun için de
waveInPrepareBuffer() ve waveInAddBuffer() fonksiyonlarının çağrılması
gerekmektedir: İşte bu çağırma işlemi CALLBACK fonksiyonumuzun çağrıldığı zaman
yapılmalıdır. O zamana kadar ses kartının bizim kullanımımıza hazır olduğunu
bilmemize imkan yoktur. WaveInProc fonksiyonu işletim sistemi tarafından her ihtiyaç
duyduğunda yeniden çağrılacağı için programın bu kısmında çok az işlem yapılıp
kontrol tekrar ana programa döndürülmeli, bu fonksiyon çağrılmaya hazır tutulmalıdır.
Bu sebeple burada tek yapılan ana programa ses kartı ile ilgili bize ulaşan bilgiyi
PostMessage ile haber vermek olacaktır. Ana program hazır olduğunda gereken
işlemleri gerçekleştirecektir. Bu arada işletim sisteminden donanımla ilgili bir sinyal
daha gelirse bu da program tarafından kullanıma hazır olacaktır.
#define CM_WAVE_CLOSE (WM_APP + 400)
#define CM_WAVE_DATA (WM_APP + 401)
#define CM_WAVE_OPEN (WM_APP + 402)
#define CM_COMMAND (WM_APP + 403)
#define CM_WAVEOUTDONE (WM_APP + 404)
Ses tanıma :
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(CM_WAVE_CLOSE , TMessage, CMWaveClose)
MESSAGE_HANDLER(CM_WAVE_OPEN , TMessage, CMWaveOpen)
MESSAGE_HANDLER(CM_WAVE_DATA , TMessage, CMWaveData)
MESSAGE_HANDLER(CM_COMMAND , TMessage, CMCommand)
MESSAGE_HANDLER(CM_WAVEOUTDONE, TMessage, CMWaveOutDone)
END_MESSAGE_MAP(TControl)
**** __fastcall TLPC::CMWaveOpen(TMessage &Message)
{
if(bufsent) hdr.lpData=(char *)buffer[1]; else hdr.lpData=(char *)buffer[0];
hdr.dwBufferLength=360*PACKET_AT_ONCE;
hdr.dwFlags=0;
_waveInPrepareHeader(hwavein, &hdr, sizeof(hdr));
_waveInAddBuffer(hwavein, &hdr, sizeof(hdr));
}
waveInProc tarafından CM_WAVE_OPEN mesajı gönderilmesiyle ana program hazır
olduğunda CMWaveOpen fonksiyonunu alt programını çağıracaktır. Burada ses
kartına üzerine kayıt yapması için gereken bellek gösterilecektir. Bu belleğin boyu bir
paketin uzunluğu (360) ile bir kerede kaydedilecek paket sayısının çarpımına
(PACKET_AT_ONCE) eşit olmalıdır. Bir saniyede 16 Kb dolduracak olan ses kartına
360 bayt uzunluğundaki paketlerin birer-birer gönderilmesi işletim sisteminin ilgili
yordamlarında çok fazla yüke sebep olmaktadır bu sebeple PACKET_AT_ONCE için
ön değer olarak 20 seçilmekte, bu şekilde programımız 450 ms. gecikme ile
çalışmaktadır.
Ses tanıma :
Ses kaydı artık başlamıştır. Kayıtta kesinti olmaması için, yani ses kartında her zaman
doldurulmaya hazır bir bellek bulunması için iki adet kayıt belleği kullanılmaktadır.
Bunlardan birine işletim sistemi tarafından ses kaydı yapılırken diğer ses kartı tarafından
doldurulmuş olan diğer bellek üzerinde kelime arama ve LPC işlemleri yapılmaktadır.
Hangi belleğin o anda ses kartında, hangisinin bizim elimizde olduğunu takip edebilmek
için de bufsent adında BOOLEAN bir değişken tutulmaktadır. Gönderdiğimiz bellek
doldurulduğu zaman tekrar CALLBACK prosedür çağrılacak CM_WAVE_DATA mesajı ile
kontrolü tekrar ana programa, CMWaveData prosedürüne verecektir
**** __fastcall TLPC::CMWaveData(TMessage &Message)
{
.
.
//ses kartından data geldi, burada işlenecek
bufsent=!bufsent; //bufsent ise 1 numara değilse 0 numara kayıtta
if(bufsent)
{
hdr.lpData=(char *)buffer[1];
toprocess=0;
} else
{
{
hdr.lpData=(char *)buffer[0];
toprocess=1;
}
if(hwavein)
{ //kayıt belleği bitti, öncelikle hemen yenisini gönder
_waveInPrepareHeader(hwavein, &hdr, sizeof(hdr));
_waveInAddBuffer(hwavein, &hdr, sizeof(hdr));
}
.
.
.
}
2. Kelimenin Tesbiti
Burada görüldüğü gibi önce hangi belleğin geldiğine bakılmakta, daha sonra da
emen diğer, boş bekleyen bellek ses kartına doldurması için gönderilmektedir. Aksi
takdirde kaydedilen ses içinde boşluklar oluşacaktır. Bu prosedürün devamında gelen
bellek içinde tek-tek paket seviyesinde, bir kerede PACKET_AT_ONCE kadar
gönderiyorduk, kelime ve enerji tespiti için ön analiz yapılacaktır. Belirli bir eşik
seviyesinin üzerinde enerjiye sahip olan (ENERGY_LEVEL) paketler dolu diye
işaretlenerek tampon belleğe (queue) alınacaktır. Kelime bitene kadar tampon
bellekte kalacaktır bu paketler. Kelime sonu belirli uzunluktan (MAX_EMPTY) daha
fazla sessizlik gelmesi ile anlaşılacaktır. Daha sonra tampon belleğimiz üzerine
tamamı aktarılmış olan kelimemiz gerekli şartlara uyduğu kontrol edildikten sonra
(MIN_KELIME < kelime < MAX_KELIME) ana proses üzerinden arka planda başka bir
prosese kaydedilmek üzere gönderilecektir

Ses tanıma : 3.Arka planda Çalışan Proseslerin Oluşturulması

Her tespit edilen kelime için yeni bir proses oluşturulacaktır. Bu şekilde aynı hem
kayıt kesintiye uğramadan devam ederken birden fazla kelimenin kodlanması da paralel
olarak yürütülecektir. Eğer çok işlemcili bir bilgisayarda çalıştırılacak olursa programın
sistem performansı üzerinde çok az yüke neden olduğu gözlenebilir. Kelimenin tespiti ve
kontrolünden sonra tampon bellek kelimenin takibinin yapılması ve kodlanması için
başka bir nesne olarak tanımlanmış TWords (wrds) içine Add komutu ile aktarılır.
Şekilde bir kelime için tutulan nesne yapısı görülmektedir. encoder arkada çalışan
prosestir. Bir kere yaratıldıktan sonra kelime tamamen kodlanıp yapay sinir ağında
işlenene kadar proses içinde işlem yapılır. Ana program sadece prosesin çalışıp
çalışmadığını kontrol eder. Proses sona erdiği zaman çıkış bilgilerini diğer değişkenlere
yerleştirir. Ana program, düzenli olarak arkada çalışan prosesleri kontrol eder ve bitmiş
prosesler için ayrılmış belleği temizler, prosesi öldürür.
4. Prosesin Çalışması
Prosesin çalışma mantığı basittir. Kendisine gönderilen her kelime için iki adet
durum kaydı (lpc10_encoder_state, ysa_state) vardır. Tüm gerekli global ve statik
değişkenler bu durum kayıtlarının içindedir ve her proses birbirinden bağımsız olarak
aynı prosedürü sorunsuz çalıştırabilir. Bu durum kayıtları Execute() metodunun
çağrılmasıyla oluşturulurlar. Daha sonra proses içinde sırasıyla kelimenin kodlanması
ve ardından yapay sinir ağına girerek tanınması sağlanır.
Ses tanıma:

Prosesin Execute() metodundan çıkması prosesin ve ilgili belleğin boşaltılmasına sebep
olacaktır ama daha proses tarafından işlenmiş datayı almadığımız için prosesi Suspend()
metoduyla Execute() prosedürünün sonunda durdururuz. Ana program yaptığı kontroller
sırasında durdurulmuş bir prosesle karşılaşırsa önce onun çıktılarını ilgili yerlere
göndermekte daha sonra da o prosesi öldürmektedir. (Burada öldürülmüş/yaratılmamış
bir proses ile durdurulmuş prosesin farkına dikkat çekmek istiyorum: Proses
yaratılmamış ve öldürülmüş ise Suspended özelliği ile kontorlünü yapmak hata
verecektir. Dolayısıyla proseslerin gerçekten varolup olmadığını bir üst seviyede bulunan
Free adlı mantıksal değişkenle anlıyoruz. Proses yaratılırken değeri FALSE olarak
verilen bu değişken daha sonra proses öldürüldüğü zaman TRUE olarak çevrilmektedir.
Proses kendi kendini öldüremediği için de tüm olay kontrolümüzde gerçekleşmektedir.)

**** __fastcall TWordCoder::Execute()
{
//Durum kayıtlarını oluştur
//LPC kodla
//Çıkan datayı YSA ile analiz et
SendMessage(LPC->Handler, CM_COMMAND, 6, idcode);
Suspend(); //Prosesi durdur, kendi kendini öldürmesini engeller

Ses tanıma :
LPC
Amerikan Standartlar Enstitüsü ve NATO Standartları arasına da alınan bu
algoritmanın implementasyonu, ilk olarak 1973 yılında yazılan ve daha sonraki yıllarda
geliştirilen FORTRAN kodu baz alınarak C++’da yazılmıştır. Algoritmanın içerdiği filtreler
ve hesaplamalar nedeniyle ileri seviyede olmasından dolayı pek çok kısmı doğrudan
Fortran kodundan transfer edilmiştir. Ancak özellikle veri yapılarının müsaade etmediği ve
C++ fonksiyonlarının karşılık gelmediği durumlarda kod yeniden yazılmıştır. Bu yeniden
yazma işleminde de mümkün olduğunca aslına sadık kalınmaya çalışılmıştır. Bunda
amaç, LPC10 algoritmasının çok yaygın olması ve hemen-hemen her yerde aynı şekilde
kullanılması, ayrıca mevcut kodu açıklayan pek çok doküman bulunmasıdır. Kaba
hatlarıyla ana prosedürlerin ne yaptığı aşağıda açıklanmıştır. Ayrıntılı bilgi için ilgili
standart protokolüne ve bu protokol ile ilgili dokümantasyona başvurulabilir.
1.PrePro (Ön Hazırlık)
Gelen ses datası üzerinde ön hazırlık işlemlerini yapar. LPC parametrelerini sadece
insan sesi için üreteceğimiz için yapmamız gereken insan sesinin spektrumu dışında
kalan seslerin datanın içinde ayıklanmasıdır. Bu işlemi 100 Hz low-pass filtreden
geçirerek yapıyoruz
Ses tanıma :
2.Analys (Analiz)
Filtreden geçmiş ses datasının içinden kodlama için gerekli parametrelerin alınması
işlemi burada yapılır.(Bu konu ile ilgili teorik bilgi için bakınız Bölüm III) Analiz aşamasında
çağrılan pek çok alt prosedür vardır.
a.preemp
Tek-sıfır seviye bir filtre ile gelen paket içindeki sesin vurgusunun arttırılmasını sağlar.
Bu şekilde farklı ortamlarda da hata oranı minimize edilmeye çalışılır.
b.onset
Gelen ses datası içinde ve komşu pencerelerde atak (giriş, formant) başlangıcı arar.
Bulunca bunu daha ileri hesaplamalarda kullanmak üzere kaydeder. Burada ses datası
üzerinde bir değişiklik ve işlem yapılmaz.
c.placev
Ses datası, kendine komşu pencerelerle beraber işleme tutulmaktadır. Dolayısıyla
bundan sonraki filtrelerde daha rahat işlem yapabilmek için mevcut pencere, daha
öncekilerin de yerleştirildiği daha büyük bir tampon bellek bölgesi içine yerleştirilir.
d.lpfilt, ivfilt
Ses datası üzerine işlemler yapan muhtelif filtreler. Kodun bu kısmı üzerinde
herhangi bir değişiklik yapılmadı Pek çok kısmı Fortran kodundan aynen C koduna
aktarılmıştır. Ayrıntılı bilgiyi ilgili prosedürlerin kaynak kodunda ve bu konuyla ilgili
doktora ve yüksek lisans çalışmalarından bulabilirsiniz.
Ses tanıma :
e.tbdm
LPC algoritmasının temelini oluşturan ve daha önce teorik kısımda anlatılan AMDF
ile ilgili hesaplamalar, yani ses içindeki Ortalama Büyüklük Farkı hesaplaması burada
yapılmaktadır. En küçük ve en büyük frekans değerleri hesaplanarak mevcut pencere
bu frekanslar arasına oturtulmakta, böylece daha hassas analiz yapılmasına
yaramaktadır. Bu prosedür tarafından DIFMAG adlı başka bir yardımcı prosedür
çağrılmaktadır.
f.voicin
Gelen pencerenin voiced olup olmadığına karar veren kısımdır. Kodlama burada
verilecek karara göre devam edecektir. Kararın daha sağlıklı olması için gelen pencere
iki parça halinde düşünülmekte ve daha sonra gelen pencereler ile beraber
hesaplanmaktadır. Esasen LPC algoritmasının 10ms gecikmesi vardır ve her pencere,
kendisinden gelen pencereye bakılarak kodlanır. Karar, enerji miktarına ve sıfır
seviyesini kesme sayısına bakılarak verilir.
g.dyptrk
Bu fonksiyon dinamik ses çıkışlarını bulur.
h.placea
Ses çıkışlarını, başlangıçları ve filtrelenmiş datayı birleştirip bir tampon bellek içinde
toparlar.
Ses tanıma :
i.dcbias
Ses datası içindeki doğrusal biası bulur ve filtreler
j.energy
Ses datası içindeki RMS enerji katsayılarını tesbit eder.
k.mload
Hesaplama için gerekli kovaryans matrisini oluşturur.
l.invert
Kovasyans matrisimizi Choleski dekompozisyon metodu ile ters çevirir. Bu kısımla
ilgili ayrıntılı bilgi teorik bölümde verilmiştir.
m.rcchk
RC parametrelerini kontrol eder, eğer tutarsız bir parametre grubu ile karşılaşırsa o
RC grubu yerine bir önceki pencerenin parametrelerini tekrar eder.
Encode (Kodlama)
Buraya kadar RC ve RMS parametreleri değişik aşamalarda filtreler ve analizler
sonucu elde edildi. Artık bu parametreler yeniden inşa edilip tek grup altında toplanabilir.
Bunun için bu fonksiyon içinde RC ve RMS parametrelerinin bir araya getirilmesi,
kodlanması ve bitlere dağıtılması yapılır. Testler kısmında da değinileceği üzere, YSA’ya
bu kadar çok sayıda parametre vermek performansı ve başarıyı düşürdüğü için bunun
yerine bu parametreler doğrudan çıktı olarak verilmektedir. Dolayısıyla orijinal
LPC10’dan farklı olarak bu kısım sadece parametrelerin kuantizasyonunu yapmaktadır.
Görüntü Tanıma Sistemleri:

Son zamanlarda belli sayıda görüntü tanıma uygulamaları hakkında basında yazılar
çıktı.Wall Street Journal, sensörlerden çıkan çıktıları tanımlayarak bagajlardaki
bombaları tespit eden bir sistem geliştirildiği haberini verdi.Başka bir makale de bu
sistemin,öncelikli kararların verilmesi gereken alanlarda iyi bir ayıraç olduğu belirtiliyor.
Başka bir uygulama ise; ender madeni paraların sınıflandırılmasını gerektirmektedir.
Dijitalleştirilmiş görüntüler,elektronik kameradan alınmış,sinir ağına tedarik edilir.Bu
görüntüler bir takım ön ve arka açı görüntüsü içermektedir.Daha sonra bu görüntüler
madeni paraların sınıflandırılmasını gösteren çeşitli ve bilinen dokularla karşılaştırılır.Bu
sistem ortalama 3 kişinin yapabileceği ve 200$’a mal olacak değerlendirmeyi,15$’lık
maliyetle kısa zamanda yapabilir.Bu sonuç,sinir ağı uygulamasının insan sınıflandırma
metodundan çok daha başarılı olduğunu göstermiştir.
Bugüne kadar sinir ağının görüntü tanıyıcı olarak en büyük yararı kalite kontrolü
alanındadır.Belli sayıda otomatik kalite uygulamaları şu an kullanımdadır.Bu uygulamalar
100’ün içindeki bir veya 1000’in içindeki bir hatalıyı bulmak üzere tasarlanmıştır.İnsan
müfettişler yoruldu ve dikkatleri dağıldı.Şimdi sistemler lehim,eklem,kaynak,kesim ve
yapıştırıcı uygulamalarında değerlendiriliyor.Bir araba üreticisi boyaların resmini doğru
gölgeler olup olmadığını anlamak için dijitalleştiriyor.
Görüntü tanıma
Sinir ağlarını görüntü tanıma sistemlerinin içine inşa edildiği başka bir ana saha
sensörler için işlemcilerdir.Sensörler o kadar çok veri sağlayabilirler ki az anlam dolu
bilgiler kaybolabilir.İnsanlar samanlıkta iğne aramak için ekrana bakarken ilgilerini
kaybedebilirler.Savunma sanayisinde bu sensör işlem uygulamalarının çoğu bulunuyor.
Bu sinir ağı sistemleri hedef tespitinde başarı kaydetmiştir.Bu sensör işlemciler verileri
kameralardan,sismik kaydedicilerden,kızılötesi sensörlerden almaktadırlar.Veriler daha
sonra ihtimal fenomenini tanımlamak için kullanılıyor.
Diğer bir sensör işlemciyle alakalı saha da tıp endüstrisinde ki sensör veri görüntü
tanımadır.Şu an sıvı örneğinin taranmasında kullanılıyor.Bu ağın,sıvı örneklerini
algılama da teknisyenlerden daha iyi olduğu gösterilmiştir.Tespit edilemeyen hastalıklar
bu endüstride genel bir problemdir.
Birçok durumda bir profesyonel sesten görüntü elde etmedir.x-ray’dan kanseri ya da
bir kırılmayı tespit etmek gibi.Sinir ağlarının hızlı donanımları mümkün olduğu zaman
görüntü tanımanın bir çok profesyonel alanda çok daha başarılı sonuçlar vereceği ümit
ediliyor.

Alıntıdır..
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.