Python ile Konuşma Tanıma Uygulamaları Geliştirmek (2): (2019 güncellemesiyle)

Geçen yazımızda (Python ile Konuşma Tanıma Uygulamaları Geliştirmek (1)) yaptığımız basit konuşma tanımasında daha önce kaydettiğimiz, ses dosyalarını test ediyorduk. Bu sefer doğrudan mikrofondan gelen inputu, yazıya çevireceğiz.

Güncelleme: Python 3.6.8 sürümünü kullanıyorum. 3.7 sürümüne geçmememin sebebi pyaudio kütüphanesi ile uyumlu çalışmamasıydı. Geliştirme idesi olarak da PyCharm kullandım. 

Mikrofondan ses kaydetmek için, pyaudio kütüphanesini kullanacağız. Kaydettiğimiz audio inputunda belirli bir eşiği geçtiğinde, geçen kısımla birlikte 800 ms saniyelik kısmı alıp işleyerek, testOnlineFileData methoduna göndererek sonucu elde edeceğiz.

Bunun için audioop paketinde bulunan rms (root mean square) metodunu kullanıyoruz.

Program daha verimli çalışacak şekilde yazılabilir. Örneğin thread kullanabiliriz. Sessiz olan kısımları çıkarıp, sesin başlayıp bittiği noktaları ayırarak daha kısa bir sample üzerinden testlerimizi yapabiliriz. Ses sample’ı böyle ayırarak yaptığımda yani baştaki sessiz kısmı silerek yaptığımda tanıma başarısı düşük oluyor.

Çünkü Sessizlik (silence)’ı ayrı bir model olarak değerlendirmek gerekiyor. Training kısmında böyle yapmadığım için, ses dosyalarının başında ve sonunda belirli bir miktar sessizlik olması gerekiyordu.

onlinemic programının çalışması için ekstra olarak pyaudio kütüphanesinin kurulması gerekiyor.

PyCharm kullandığım için, File -> Settings -> Project -> Project Interpreter penceresinden pyaudio paketini ekleyin. İlk bölümde zaten eklediyseniz bu adımı geçebilirsiniz.

Başka bir geliştirme ortamı kullanıyorsanız, pip install pyaudio diyerek paketin kurulumunu gerçekleştirebilirsiniz

onlinemic.py programını yazalım:

cmd.exe’i çalıştıralım. Kök dizinine geçerek python programımızı çalıştırabiliriz (Python’un path içerisinde tanımlı olması gerekiyor):

Birden ona kadar olan sayıları mikrofondan söylediğimizde, bize rakamları yazıyla dönecektir.

onlinemic

Yaklaşık yüzde 70-80 arası bir başarı oranı ile sesleri tanımaktayız. 

Sonuç

Birinci bölümde test için hazır ses dosyalarını kullanmıştık. 

Bu bölümde mikrofondan gelen sesleri canlı olarak yazıya çevirmiş olduk. Model olarak birinci bölümde hazırlamış olduğumuz model dosyalarını kullandık.

Temel konuları basit bir şekilde anlatmak için böyle bir örnek tasarladım.

Kod anlamında pek çok iyileştirme yapılabilir. Teker teker etiketlerle ilgili model dosyaları oluşturup, kaydediyorum.

Daha dinamik ve efektif bir şekilde yazılabilir. Birinci bölümde de aynı şekilde kod iyileştirmelerine muhtaç kısımlar var. Fakat amacım temel konuşma tanıma kavramlarını anlamak ve anlatmaktı.

KISS prensibini biraz abartmış olabilirim 🙂

Örneğimizde belli bir eşiği aşan bir ses algıladığında, o ses parçasını bir dosyaya yazdırıp, test metoduna gönderiyoruz.

Geçici bir dosyaya yazdırmadan da uygun bir formatta bir array oluşturulup test metoduna gönderilebilir.

Birinci bölümde anlattığım gibi daha kapsamlı konuşma tanıma uygulamaları geliştirmek istiyorsanız, google veya microsoftun konuşma tanıma apilerini kullanan SpeechRecognition kütüphanesini kullanabilirsiniz.

Güzel bir ingilizce SpeechRecognition tanıtım yazısı için buraya bir göz atabilirsiniz.

Hatırlatma: Github projesindeki ses dosyaları benim sesimi içerdiği için sizin sesinizle uyumlu olmayacaktır. Kendi ses dosyalarınızı üreterek modelinizi üretmeniz gerekiyor.

Github projesine buradan ulaşabilirsiniz.

Konuyla ilgili yorumlarınızı, varsa düzeltmelerinizi bekliyorum.

5 düşünce - “Python ile Konuşma Tanıma Uygulamaları Geliştirmek (2): (2019 güncellemesiyle)”

  1. Pingback: Python ile Konuşma Tanıma Uygulamaları Geliştirmek (1) - Yazılım Mekanı

  2. Merhaba sayın Admin. Rica etsem hmm kısmını biraz daha açarmısınız? Böyle bir hata alıyorum:
    FileNotFoundError: [Errno 2] No such file or directory: ‘hmm\\bir’

    1. speech dizininin içerisinde hmm diye içi boş bir dizin olması gerekiyor.

      python training.py komutu başarılı bir şekilde çalışırsa, bu dizinin içerisine eğitilmiş model dosyalarını atacaktır.

      Mevcut yazının güncel hali üzerinde çalışıyorum.

  3. Hocam “hmm” dosyasında nasıl bir model oluşturulmalı bende tam olarak onu merak ediyorum banada aynı hatayı veriyor. Bu sorunu nasıl giderebilirim ?

    1. speech dizininin içerisinde hmm diye içi boş bir dizin olması gerekiyor.

      python training.py komutu başarılı bir şekilde çalışırsa, bu dizinin içerisine eğitilmiş model dosyalarını atacaktır.

      Mevcut yazının güncel hali üzerinde çalışıyorum.

Yorum Gönder

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

Scroll to Top