BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > Python Programlama > Python örnek kodlar > python_ornek00012

Python örnek kodlar

Sesli asistan programı

Verilen komutlara bağlı olarak 15 farklı işlem, hesaplama bölümü altında da 7 farklı işlem olmak üzere toplam 21 adet işlem gerçekleştiren bir sesli asistan programı oluşturmaya çalışalım. Program komutları isteğe bağlı olarak artırılabilir.

Program için aşağıda bilgileri ve sanal ortamda kurulum komutları verilen kütüphaneleri kullanacağız:

1. SpeechRecognition kütüphanesi

Çeşitli motorlar ve API'ler için çevrimiçi ve çevrimdışı desteği sağlayan konuşma tanıma kütüphanesidir.


pip install SpeechRecognition

2. gTTS kütüphanesi

gTTS (Google Text-to-Speech), Google Translate API'si kullanarak metini çeviren bir kütüphanedir.


pip install gTTS

Bu kütüphane ile birlikte, urllib3, idna, colorama, charset-normalizer, certifi, six, requests ve click kütüphaneleri otomatik olarak yüklenir.

3. Playsound kütüphanesi

Ses çalmak için kullanılan bir kütüphanedir.


pip install playsound

4. PyAudio kütüphanesi

Tüm işletim sistemlerinde çalışan ses giriş/çıkış akışı kütüphanesidir. Ses ile ilgili işlemlerde kullanılır.

Bu kütüphanenin doğrudan "pip install pyaudio" komutu ile kurulmasında herhangi bir sorun yaşandığında kurulumu gerçekleştirmek için, Christoph Gohlke tarafından Python paketleri için resmi olmayan Windows işletim sistemi dosyalarını içeren web sitesine ait buradaki bağlantıdan bilgisayarımızın işletim sistemine göre indirdiğimiz aşağıdaki dosyalardan birisini, sanal ortamın altındaki Scripts dizini altına kopyalayarak kullanıyoruz:

PyAudio-0.2.11-cp39-cp39-win_amd64.whl

PyAudio-0.2.11-cp39-cp39-win32.whl


pip install PyAudio-0.2.11-cp39-cp39-win_amd64.whl

5. Pillow kütüphanesi

Python resim işlem kütüphanesidir.


pip install Pillow

6. PyAutoGUI kütüphanesi

Python ortamında fare, klavye ve diğer GUI otomasyon işlemlerinin yapılmasını sağlar.


pip install PyAutoGUI

Bu kütüphane ile birlikte, pymsgbox, PyTweening, pyscreeze, pygetwindow ve mouseinfo kütüphaneleri otomatik olarak yüklenir.


import speech_recognition as sr # Speech to text
from gtts import gTTS # Google text to speech kütüphanesi
from playsound import playsound # Ses dosyası oynatma
import random # Rastgele sayı elde etme
import webbrowser # Web tarayıcı açma
import time # Zaman işlemleri için
import os # Ses dosyalarını silme
from PIL import Image # Resim işlemleri için
import pyautogui # Ekran görüntüsü almak için
from datetime import datetime # Tarih işlemleri için
import sys # Sistem komutları için
import locale # setlocale() fonksiyonu için

locale.setlocale(locale.LC_ALL, 'turkish')

user_name = 'Mehmet'
asis_name = 'Niteya'
		
def deger_varmi(veri_list):
    for veri in veri_list:
        if veri in ses_veri:
           return True

r = sr.Recognizer() # speech_recognition için recognizer nesnesi tanımlama

# Metni konuşmaya çeviren ve oynatan fonksiyon
def TextToSpeech(tts_text): 
    tts_text = str(tts_text)       
    tts = gTTS(tts_text, lang='tr')
    rand = random.randint(1, 10000)
    file = 'audio-' + str(rand) + '.mp3'
    tts.save(file) # Dosyayı kaydetme
    playsound(file) # Dosyayı oynatma
    print(asis_name + ":", tts_text) # print what app said	
    os.remove(file) # Dosyayı silme		

# Konuşmayı metine çeviren ve ekrana yazan fonksiyon
def SpeechToText(ondeger=""):
    with sr.Microphone() as mic: #  Giriş kaynağı olarak nikrofon kullanma
        if ondeger:
            TextToSpeech(ondeger)
			
        # Recognizer'ın çevredeki gürültü seviyesine göre enerji eşiğini ayarlamasına izin vermek için bir saniye bekleme 
        r.adjust_for_ambient_noise(mic, duration=0.2)			 			
        audio = r.listen(mic)  # Mikrofon yoluyla sesi alma
        print("Dinleme tamamlandı")
        ses_veri = ''
        try:
            ses_veri = r.recognize_google(audio, language='tr-TR') # Konuşma metne çevirme
        except sr.UnknownValueError: # Recognizer anlama hatası
            TextToSpeech('anlamadım')
        except sr.RequestError:
            TextToSpeech('üzgünüm, hizmet devre dışı') # Recognizer bağlantı hatası
			
        print(">>", ses_veri.lower()) # Kullanıcının söylediğini ekrana yazma
		
        return ses_veri.lower()
		
def cevapla(ses_veri):
    # 1: Selamlama
    if deger_varmi(['merhaba']):
       selamlar = ["merhaba ", "dinliyorum ", "emrinizdeyim "]
       selam = selamlar[random.randint(0,len(selamlar)-1)]
       TextToSpeech(selam + user_name + " size nasıl yardımcı olabilirim")

    elif deger_varmi(['günaydın']):
       gunaydinlar = ["günaydın ", "teşekkürler size de günaydın "]
       gunaydin = gunaydinlar[random.randint(0,len(gunaydinlar)-1)]
       TextToSpeech(gunaydin + user_name + " nasıl yardımcı olabilirim")

    elif deger_varmi(['iyi akşamlar']):
       aksamlar = ["iyi akşamlar ", "size de iyi akşamlar "]
       aksam = aksamlar[random.randint(0,len(aksamlar)-1)]
       TextToSpeech(aksam + user_name + " nasıl yardımcı olabilirim")

    # 2: Kullanıcı ve asistan adı işlemleri
    elif deger_varmi(["adın nedir", "adınız nedir", "kimsin sen"]):
       if user_name: # Kullanıcı adı varsa
          TextToSpeech(f"benim adım {asis_name}, {user_name}") # Asistan ve kullanıcı adını sınıf değerinden alma
       else:
          TextToSpeech(f"benim adım {asis_name}. sizin adınız nedir?") # Asistan adını sınıf değerinden alma

    elif deger_varmi(["ben kimim", "beni tanıyor musun"]):
       TextToSpeech("sizin isminiz " + user_name + " olmalı")
    
    # 3: Hatır sorma
    elif deger_varmi(["nasılsın", "ne var ne yok", "nasıl gidiyor hayat"]):
       hatirlar = ["teşekkür ederim, siz nasılsınız ", "çok iyiyim, sorduğunuz için teşekkür ederim "]
       hatir = hatirlar[random.randint(0,len(hatirlar)-1)]	   
       TextToSpeech(hatir + user_name)

    # 4: Sevgi
    elif deger_varmi(['seni çok seviyorum']):
       sevgiler = ["ben de sizi çok seviyorum ", "sevgimiz karşılıklı "]
       sevgi = sevgiler[random.randint(0, len(sevgiler)-1)]
       TextToSpeech(sevgi + user_name)	
		
    # 5: Teşekkür
    elif deger_varmi(['teşekkür ederim', 'teşekkürler', 'sağ olasın', 'çok yardımcı oldun']):
       tesekkurler = ["ne demek efendim görevimiz ", "size yardımcı olabildiysem ne mutlu bana ", "rica ederim, bu fırsatı bana verdiğiniz için ben teşekkür ederim "]
       tesekkur = tesekkurler[random.randint(0,len(tesekkurler)-1)]
       TextToSpeech(tesekkur + user_name)

    # 6: Tarih
    elif deger_varmi(["tarih", "gün"]):
       TextToSpeech(datetime.today().strftime('%d/%m/%Y %A'))
	   
    # 7: Zaman
    elif deger_varmi(["zaman", "saat kaç"]):
       TextToSpeech(datetime.now().strftime('%H:%M:%S')) # strftime("%d/%m/%Y %H:%M:%S")

    # 8: Google arama
    elif deger_varmi(["google"]): # Örnek: google elma veya elma google     
       arama_veri = ses_veri.replace("google", "") # arama_veri = ses_veri.split("google")[-1]
       url = "https://google.com/search?q=" + arama_veri
       webbrowser.get().open(url)
       TextToSpeech(arama_veri + " için bulduklarım")
    
    # 9: Youtube arama
    elif deger_varmi(["youtube"]): # Örnek: youtube elma veya elma youtube
       arama_veri = ses_veri.replace("youtube", "") # arama_veri = ses_veri.split("youtube")[-1]
       url = "https://www.youtube.com/sonucs?search_query=" + arama_veri
       webbrowser.get().open(url)
       TextToSpeech(arama_veri + " için youtube da bulduklarım")

    # 10: Hisse senedi bulma
    elif deger_varmi(["hisse"]): # Örnek: aksa hisse veya hisse aksa
       arama_veri = ses_veri # aksa hisse
       url = "https://google.com/search?q=" + arama_veri
       webbrowser.get().open(url)
       TextToSpeech(arama_veri + " senedi için bulduklarım")
    
    # 11: Hava durumu
    elif deger_varmi(["hava"]): # Örnek: hava amasya veya amasya hava
       arama_veri = ses_veri.replace("hava", "") # arama_veri = ses_veri.split("hava")[-1]		
       url = "https://www.google.com/search?q="+"weather"+arama_veri	
		
       webbrowser.get().open(url)
       TextToSpeech(arama_veri + " için hava durumu")
     
    # 12: Hesaplama
    # Kullanım: 7 artı 21, 75 eksi 25, 5 çarpı 7, 24 bölü altı, 5 kuvvet 4, 7 kare, 7 küp
    elif deger_varmi(["+","-","x","*","/","kuvvet","kare","küp"]):
       opr = ses_veri.split()[1]
		
       sonuc = 0;        

       if opr == '+':
          sonuc = int(ses_veri.split()[0]) + int(ses_veri.split()[2]) # 7 artı 21
       elif opr == '-':
          sonuc = int(ses_veri.split()[0]) - int(ses_veri.split()[2]) # 75 eksi 25
       elif opr == 'x':
          sonuc = int(ses_veri.split()[0]) * int(ses_veri.split()[2]) # 5 çarpı 7
       elif opr == '/':
          sonuc = int(ses_veri.split()[0]) / int(ses_veri.split()[2]) # 24 bölü altı
       elif opr == 'kuvvet':
          sonuc = int(ses_veri.split()[0]) ** int(ses_veri.split()[2]) # 5 kuvvet 4
       elif opr == 'kare':
          sonuc = int(ses_veri.split()[0]) * int(ses_veri.split()[0]) # 7 kare
       elif opr == 'küp':
          sonuc = int(ses_veri.split()[0]) * int(ses_veri.split()[0]) * int(ses_veri.split()[0]) # 7 küp
       else:
          TextToSpeech("hatalı işlemci")
            
       TextToSpeech(sonuc)    
        
    # 13: Ekran görüntüsü alma
    elif deger_varmi(["ekran","ekran görüntüsü"]):
       myScreenshot = pyautogui.screenshot()
       myScreenshot.save('screen.png') # Ekran görüntüsünü çalışma dizinine kaydetme
       TextToSpeech("Ekran görüntünüz kaydedildi")
    
    # 14: Google map'e göre bulunduğumuz yer
    elif deger_varmi(["neredeyim", "konumum"]):
       url = "https://www.google.com/maps/search/Where+am+I+?/"
       webbrowser.get().open(url)
       TextToSpeech("buralarda bir yerlerde olmalısınız")    

    # 15: Çıkış		
    elif deger_varmi(["görüşmek üzere", "görüşürüz", "güle güle"]):
       TextToSpeech("görüşürüz")
       sys.exit()

time.sleep(1)

while(True):
    ses_veri = SpeechToText("Dinliyorum") # Ses girişini alma
    print("Soru:", ses_veri)
    cevapla(ses_veri) # Cevaplama işlemi

Programı çalıştırdığımızda, SpeechToText() fonksiyonu ile, asistanın "Dinliyorum" ifadesi ekrana yazılır, sonra sesli olarak söylenir. Kullanıcının sesli komutu mikrofon yoluyla alınarak, bir karakter dizisine çevrilir. Fonksiyonun geri döndürdüğü karakter dizisi ses_veri değişkenine atandıktan sonra ekrana yazılır. ses_veri değişkeni parametre olarak geçirilerek cevapla() fonksiyonu çağrılır. Bu fonksiyon içinde, komut dizisi içinde yer alan karakterlerle uyumlu olan if veya elif satırlarından birisi çalıştırılarak, elde edilen karakter dizisi yapısındaki sonuç TextToSpeech() fonksiyonu ile konuşmaya çevrilir ve oynatılır.