Python ile Konuşma Tanıma Uygulamaları Geliştirmek (1)

Konuşma tanıma ile ilgili çok çeşitli kütüphane var. Wikipedia’da bu kütüphaneler hakkında bir sayfa var.

Benim niyetim, bu kütüphaneleri kullanmadan, konuşma tanıma (speech recognition) ile ilgili temel yöntemleri kullanarak, python diliyle basit bir sayı tanıma uygulaması yapmak. 1’den 10’a kadar olan rakamları tanıyan bir program olacak bu. Speech and Language Processing kitabından ve matlab ile benzer bir konuşma tanıma uygulamasının anlatıldığı bir blog yazısından faydalandığımı belirtmeliyim.

Geliştirme yaptığım ortam, Windows 7 – 64 bit ve python 2.7.3 sürümünü kullanıyorum. Makina öğrenmesi işi için scikit-learn kütüphanesini kullanıyorum. Tabii sistemde numpy, scipy gibi kütüphanelerinde kurulu olması gerekiyor.

Konuşma tanıma (speech recognition) temel olarak bir makina öğrenmesi (machine learning) işidir. Temel aşamalarını kabaca listelemek gerekirse:

  • Training için kullanılacak, ses dosyalarının mfcc formatına göre çevrilmesi
  • Saklı markov modellerinin (Hidden markov models) oluşturulup, mfcc datalarına göre eğitilmesi
  • Test için oluşturulmuş, ses dosyalarının bu modellerle ne kadar uyuştuğunun tespit edilmesi (scoring), elde edilen olasılık rakamlarına göre max. olanın bulunması

Python dosyalarını oluşturmak için, öncelikle bir dizin açıyorum: C:\speech. Tüm dosyalarım bunun içerisinde olacak.

Eğitim (Training) Aşaması

Training için kullanılacak wav dosyalarını oluşturuyoruz. Bunun için Audacity programını kullanıyorum. Burda dikkat edilmesi gereken şey, ses dosyalarını hazırlarken, hem training hemde testing için, (Proje Hızı) 16000 Hz, mono (tek kanallı) ve 16 bit pcm şeklinde hazırlanması gerekiyor. Training ve testing için aynı microfon, aynı ortam kullanılırsa, tanıma başarısı daha yüksek olur.

C:\speech dizinin altına trainingwav dizini oluşturuyorum. Oluşturacağım ses dosyalarını bu dizine atacağım. Her rakam için iki wav dosyası oluşturuyorum. Örneğin, bir için d_01_1.wav, d_01_2.wav, iki için d_02_1.wav, d_02_2.wav. Her rakam için bir yerine iki ses dosyası kullanmamın sebebi, sistemin tanıma başarısını arttırmak. Daha fazla wav dosyasıda kullanabiliriz, üçer tane beşer tane. Bir de model dosyalarımızı atmak için hmm diye bir dizin oluşturuyoruz.

training.py programını yazalım:

Mfcc (Mel-frequency cepstral coefficients), oluşturmak için  melfeat.py dosyasını kullanıyorum.

cmd.exe içerisinden, sistemimizi eğitebiliriz. C:\speech dizinine geçerek python programımızı çalıştırabiliriz (Python’un path içerisinde tanımlı olması gerekiyor):

Testing aşaması

Testing aşaması için yine wav dosyalarını oluşturuyoruz: bir rakamını test etmek için d_t_01.wav, iki rakamını test etmek için d_t_02.wav vs…

Bunları testingwav dizinine atıyoruz.

testing.py dosyamızı oluşturuyoruz:

Artık cmd.exe içerisinden, wav dosyalarımızı test edebiliriz. C:\speech dizinine geçerek python programımızı çalıştırabiliriz (Python’un path içerisinde tanımlı olması gerekiyor):

Sonuç olarak bir dönecek. Bu şekilde, teker teker dosyalarımızı test edebiliriz.

d_t_02.wav (iki) testi için:

Yazının devamı için tıklayınız.

11 düşünce - “Python ile Konuşma Tanıma Uygulamaları Geliştirmek (1)”

  1. Merhabalar yazınız için teşekkürler.
    Programı çalıştırmakta sorun yaşıyorum.
    C altına speech klasörünü ve içindeki klasörleri oluşturup wav dosyalarını ekledim.
    Kodlarınızı speech klasöründe oluşturdum.
    Anacondayı kurup scipy ve numpy kütüphanelerini anaconda üzerinden yükledim.
    Aşağıdaki hatayı alıyorum ne yapmalıyım ? Yardımcı olur musunuz ? Teşekkürler.
    Traceback (most recent call last):
    File “testing.py”, line 1, in
    from melfeat import *
    File “c:\Speech\melfeat.py”, line 1, in
    import scipy.io.wavfile
    ImportError: No module named ‘scipy’

    1. Anaconda kullanmadan yazıda anlattığım şekilde deneyebilir misiniz? Anaconda konusunda tecrübem yok. Fırsatım olursa bakarım.

      İyi çalışmalar

        1. Barış Bey. Anaconda ile uygulamayı çalıştırmayı başabildiniz mi. ben de de aynı sorun oldu. Normal şekilde python27 yüklediğimde scipy kütüphanesini bir türlü yükleyemedim. sürekli hata verdi. değişik versiyonları ile de denedim. Başaramadım.

  2. Sayın Admin.
    Daha kapsamlı bir proje için uygulamanızı kullanmak istiyorum. öğreteceğim kelimeleri metin veya komut olarak seri porttan başka cihazlara göndermeyi düşünüyorum. Diğer çihazlarım seri port üzerinden haberleşiyorlar. python27 üzerine scipy kütüphanesini kurmakta sorun yaşadım. Bu konuda basit bir yardım istiyorum mümkünse. Örnek ses dosyaları ve kodların hangi dizinler altında olacağını tam anlayamadım. Hatalı yaptığım neresi var bulamadım. Mümkünse C:\speech dizinini zipleyerek bana mail ile gönderebilirmisiniz. Windows10 altında çalışıyorum ama LinuxMint makinem de var. Arduino ve RasperryPi ye seri porttan veri göndermek gibi basit bir işim var. Bunu sesli komut ile yapmak istiyorum.

      1. Sayın Admin.
        İlginize çok teşekkür ederim. Projedeki uygulamaları python ile geliştiriyorum. Ama Processing veya C# ile de konuşma tanıma kısmını yapabilirim hibrit proje olması benim açımdan sorun değil. Sadece google api lerini kullanmak istemiyorum sistem internet bağlantısı olmadan çalışıyor. Tabii ki öncelikli dileğim python27 . yukarıdaki uygulamanızı işletip biraz geliştirebilirsem (mikrofondan ses alma ; gürültü ve sessizlik tanıma gibi) mükemmel olur.

        Saygılarımla

        1. anaconda command prompt kullanarak denedim. hmm (hidden markov model) modülü başka bir yere taşınmış https://github.com/hmmlearn/hmmlearn. Bu modülü kullanarak programı çalıştırınca, hata verdi. Güncel anaconda ve scikit paketleri ile tekrar çalıştırabilirsem, sitede yayınlayacağım.

          1. hocam bir proje için gerekli olan ses işleme kısmında bulabildiğim en anlaşılır yazı size ait fakat şematik olarak anlamadığım bir problem oluştu. hmm dizin hatası almanın yanı sıra dosyanıj şematik yapısını anlamak acısından projeyi githuba yükliyebilirmisiniz hocam. anlatımınız için teşekkürler.

  3. Hocam selamlar… Yazınız çok aydınlatıcı oldu benim için… Benim kişiye özel değilde genel bir ses tanımada kullanabileceğim bir module ihtiyacım var yardımcı olabilirmisiniz…
    Minik bir projede kullanmak istiyorum…

Yorum Gönder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir