Python İle Speech Recognition Kütüphanesi Kullanarak Sesli Komut Sistemi Nasıl Yapılır?

Python İle Speech Recognition Kütüphanesi Kullanarak Sesli Komut Sistemi Nasıl Yapılır?
Python İle Speech Recognition Kütüphanesi Kullanarak Sesli Komut Sistemi Nasıl Yapılır?

Gereksinimler ve Ortam Kurulumu

Sesli komut sistemi geliştirmek için bilgisayarınızda Python 3.10 veya daha güncel bir sürümün yüklü olması gerekir. Ayrıca ses verilerini işlemek için SpeechRecognition kütüphanesine ve ses kaydı alabilmek için PyAudio kütüphanesine ihtiyacımız olacak.

Terminal veya komut istemcisini açarak aşağıdaki komutları sırasıyla çalıştırın:

# Gerekli kütüphaneleri yükleme
pip install SpeechRecognition
pip install pyaudio

Not: PyAudio kurulumu sırasında bazı işletim sistemlerinde (özellikle Linux ve macOS) ek sistem paketlerine ihtiyaç duyulabilir. Hata alırsanız sisteminize 'portaudio' kütüphanesinin kurulu olduğundan emin olun.

Adım Adım Ses Tanıma Motorunu Hazırlama

Ses tanıma sisteminin temel taşı, Recognizer sınıfıdır. Bu sınıf, ses verisini alır ve desteklenen servisler (Google Web Speech API gibi) aracılığıyla metne dönüştürür. İlk adımda, mikrofonu bir kaynak olarak tanımlayıp basit bir dinleme döngüsü oluşturalım.

import speech_recognition as sr

# Tanıyıcı nesnesini oluşturma
recognizer = sr.Recognizer()

def sesi_dinle():
    with sr.Microphone() as source:
        print("Sizi dinliyorum...")
        # Ortam gürültüsünü engellemek için kısa bir kalibrasyon
        recognizer.adjust_for_ambient_noise(source)
        audio = recognizer.listen(source)
    return audio

Bu kod bloğu, mikrofonu aktif hale getirir ve ortam gürültüsünü filtreleyerek sesi yakalar. adjust_for_ambient_noise metodu, arka plan seslerini analiz ederek daha doğru bir sonuç almamızı sağlar.

Ses Verisini Metne Dönüştürme

Sesi yakaladıktan sonra, bu veriyi anlamlı bir metin dizisine (string) çevirmemiz gerekir. SpeechRecognition kütüphanesi, Google Web Speech API'sini varsayılan olarak kullanır. Bu işlem için internet bağlantısı gereklidir.

def sesi_metne_cevir(audio):
    try:
        # Google API kullanarak sesi metne çevirme
        metin = recognizer.recognize_google(audio, language="tr-TR")
        print(f"Algılanan: {metin}")
        return metin
    except sr.UnknownValueError:
        print("Ses anlaşılamadı.")
        return None
    except sr.RequestError:
        print("Servise ulaşılamadı.")
        return None

Burada try-except blokları kritik öneme sahiptir. Kullanıcı hiçbir şey söylemediğinde veya internet bağlantısı koptuğunda programın çökmesini engellemiş oluruz.

Sesli Komut İşleme Mantığı

Metne dönüştürülen veriyi, belirli komutlarla eşleştirmemiz gerekir. Basit bir if-else yapısı ile kullanıcının söylediği kelimelere göre sistemin tepki vermesini sağlayabiliriz.

def komutlari_calistir(metin):
    if not metin:
        return

    metin = metin.lower()
    if "merhaba" in metin:
        print("Size nasıl yardımcı olabilirim?")
    elif "saat kaç" in metin:
        from datetime import datetime
        print(f"Şu an saat: {datetime.now().strftime('%H:%M')}")
    elif "çıkış" in metin:
        print("Görüşmek üzere!")
        exit()

Bu fonksiyon, metin içindeki anahtar kelimeleri arar. metin.lower() kullanımı, kullanıcının "Merhaba" veya "MERHABA" demesi durumunda sistemin aynı tepkiyi vermesini sağlar.

Ses Tanıma Yöntemlerinin Karşılaştırılması

Ses tanıma işlemleri için farklı motorlar ve kütüphaneler mevcuttur. Aşağıdaki tablo, yaygın yöntemlerin temel farklarını özetlemektedir.

Yöntem Avantajı Dezavantajı
Google Web API Çok yüksek doğruluk İnternet bağlantısı şart
CMU Sphinx Çevrimdışı çalışır Kurulumu zor ve daha az hassas
Whisper (OpenAI) Mükemmel doğruluk Yüksek donanım kaynağı tüketir

Güvenlik ve Performans Uyarıları

Kritik Güvenlik Uyarısı: Sesli komut sistemlerini üretim ortamında kullanırken, mikrofon erişim izinlerine dikkat edin. Kullanıcıdan alınan ses verilerini işlerken, bu verilerin üçüncü taraf API'lere gönderildiğini unutmayın. Gizlilik gerektiren uygulamalarda çevrimdışı çalışan yerel modelleri (Whisper gibi) tercih etmeniz önerilir.

Sıkça Sorulan Sorular

SpeechRecognition kütüphanesi Türkçe destekliyor mu?

Evet, recognize_google metodunda language="tr-TR" parametresini kullanarak Türkçe dil desteğini aktif edebilirsiniz.

Neden "UnknownValueError" hatası alıyorum?

Bu hata, mikrofonun ses algılayamadığı veya ortamın çok gürültülü olduğu durumlarda oluşur. Mikrofon ayarlarınızı kontrol edin veya adjust_for_ambient_noise süresini artırın.

İnternet olmadan sesli komut sistemi yapabilir miyim?

Evet, ancak bunun için PocketSphinx gibi çevrimdışı çalışan kütüphaneleri entegre etmeniz gerekir. Google API çevrimdışı çalışmaz.

Sistemim çok yavaş çalışıyor, ne yapmalıyım?

Ses işleme sırasında bekleme sürelerini (latency) azaltmak için ses kaydı süresini (timeout) kısıtlayın ve gereksiz kütüphane yüklemelerinden kaçının.

Daha karmaşık komutlar için ne kullanmalıyım?

Basit if-else yapıları yerine NLP (Doğal Dil İşleme) kütüphaneleri olan spaCy veya NLTK kullanarak cümle yapısını analiz edebilirsiniz.

Sesli Komut Sistemini Sesli Yanıt ile Geliştirme (pyttsx3 Entegrasyonu)

Sisteminizin sadece komutları algılaması yeterli olmayabilir; kullanıcının komutunun alındığını veya işlemin başarıyla tamamlandığını onaylayan bir geri bildirim mekanizması, kullanıcı deneyimini (UX) önemli ölçüde artırır. pyttsx3 kütüphanesi, çevrimdışı çalışabilen ve Python ile tam uyumlu bir metin-ses (Text-to-Speech) motorudur.

Kurulum ve Temel Kullanım

Öncelikle kütüphaneyi terminal üzerinden pip install pyttsx3 komutuyla kurun. Ardından, ses tanıma sisteminize aşağıdaki entegrasyonu ekleyerek asistanınızın konuşmasını sağlayabilirsiniz:

import pyttsx3

def asistan_konus(metin):
    engine = pyttsx3.init()
    # Ses hızını ve ses tipini ayarlama
    engine.setProperty('rate', 150)
    engine.say(metin)
    engine.runAndWait()

# Örnek kullanım
asistan_konus("Komutunuz başarıyla alındı.")

Sistem Testi ve Hata Ayıklama Stratejileri

Sesli komut sistemlerinde en sık karşılaşılan sorunlar, ortam gürültüsü ve mikrofon kalibrasyonudur. Sisteminizi kararlı hale getirmek için aşağıdaki test adımlarını izlemelisiniz:

  • Gürültü Eşiği (Energy Threshold) Ayarı: Ortamdaki arka plan gürültüsünü filtrelemek için recognizer.adjust_for_ambient_noise(source, duration=1) metodunu mutlaka kullanın.
  • Hata Yakalama Blokları: UnknownValueError ve RequestError hatalarını ayrı ayrı ele alarak, sistemin çökmesini engelleyin.

Kapsamlı Hata Yönetimi Örneği

import speech_recognition as sr

def ses_dinle():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Dinleniyor...")
        r.adjust_for_ambient_noise(source)
        try:
            audio = r.listen(source, timeout=5, phrase_time_limit=5)
            komut = r.recognize_google(audio, language="tr-TR")
            return komut
        except sr.UnknownValueError:
            return "Anlayamadım, tekrar eder misin?"
        except sr.RequestError:
            return "Servise bağlanılamadı."
        except Exception as e:
            return f"Bir hata oluştu: {e}"

Performans Optimizasyonu İçin İleri İpuçları

Sisteminizin tepki süresini (latency) iyileştirmek için şu teknikleri uygulayabilirsiniz:

  1. Thread Kullanımı: Ses dinleme ve komut işleme süreçlerini ana döngüden ayırarak arayüzün donmasını engelleyin.
  2. Ses Örnekleme Hızı: Mikrofonun örnekleme hızını (sample rate) 16kHz veya 44.1kHz olarak sabitlemek, işlemci yükünü optimize edebilir.
  3. Yerel İşleme: İnternet bağımlılığını azaltmak için Google API yerine Vosk gibi yerel (offline) çalışan modelleri tercih ederek gecikmeyi milisaniye seviyelerine indirebilirsiniz.
Not: Sesli komut sistemlerinde güvenlik için, sistemin kritik işlemler (dosya silme, sistem kapatma vb.) yapmadan önce mutlaka sesli onay istemesini sağlayın.

Sonuç

Bu makalede, Python ile Speech Recognition kullanarak temel bir sesli komut sisteminin nasıl inşa edileceğini öğrendiniz. Mikrofonu yapılandırmaktan ses verisini metne dönüştürmeye ve bu metni mantıksal bir komuta dönüştürmeye kadar tüm süreci ele aldık. Bir sonraki adım olarak, sisteminize pyttsx3 kütüphanesini ekleyerek bilgisayarınızın size sesli cevap vermesini sağlayabilir, böylece tam teşekküllü bir sesli asistan deneyimi oluşturabilirsiniz.

Bu yazıya tepkinizi paylaşın:
Selin Yılmaz

Verimlilik ve zaman yönetimi odaklı pratik bilgiler konusunda içerik üretiyorum. Okuyuculara günlük rutinlerinde hız kazandıracak uygulanabilir stratejiler sunuyorum.

Yorumlar (0)

Yorum Yaz