9 November 2025 Sunday 10:45:13


Python ile Sesli Asistan

Python ile Sesli Asistan

Herkes kendine ait bir sesli asistanının olmasını ister. Python dili her şey için mutlaka bir modül bulundurmasıyla bilinir. Bu iş içinde birden çok modülü bulunmakta. Bu yüzden kendi kullanımımız için veya çok daha geliştirerek çevremizdeki kişilerin de kullanımına açabileceğimiz bir sesli asistan programlama işlemine Python dilinde başlayalım.

Bu proje için kullanacağımız modüller;

· time -> Programı geçici süreliğine durdurmak için kullanılabilir.

· sqlite3 -> Kullanıcının bilgilerini tutabilmesi için kullanacağız.

· wikipedia -> wikipedia üzerinden aratma yapabilmek için gerekli.

· speech_recognition -> Konuşmanın yazıya dökülebilmesini sağlayan modül.

· pyttsx3 -> Bu modül, çevrimdışı çalıştığı bir programda metni konuşmaya dönüştürmek için kullanılır.

· datetime -> Bilgisayarımızda saati çekme işlemi için kullanılır.

· webbrowser -> Varsayılan taracıyımız üzerinden istediğimiz bir url’nin açılmasını sağlar.

· wolframalpha -> Wolfram’ın algoritmalarını, bilgi tabanını ve yapay zeka teknolojisini kullanarak uzman düzeyinde yanıtları hesaplamak için kullanılır.

Kütüphanelerimizi projemize ekleyerek başlayalım.

import time
import sqlite3
import wikipedia
import speech_recognition as sr
import pyttsx3
from datetime import datetime
import webbrowser
import wolframalpha

Öncelikle ilk yapmak istediğimiz şey sesli asistanın bizimle ilk kez mi iletişime geçtiğini anlamasını sağlayıp ismimizi sorması. Eğer daha önce program çalıştırılmışsa bu isim alma işlemini daha önce yapmış ve bu ismi SQL database’ine eklemiş olacaktır. Bu database’den kullanıcı ismini alarak “greeting” fonksiyona geçer.

def first_date(self):
        con = sqlite3.connect("user.db")
        cursor = con.cursor()
        cursor.execute("CREATE TABLE IF NOT EXISTS USER(Name TEXT,Surname TEXT)")
        con.commit()

        cursor.execute("select * from USER")
        self.name = cursor.fetchall()
        if(len(self.name)==0):
            self.speak("Hi. My name is Carla. I will always be here for you. What is your name sir?")
            self.response = sr.Recognizer()
            with sr.Microphone() as source:
                print("Listening...")
                audio = self.response.listen(source)
            try:
                self.phrase = self.response.recognize_google(audio, language="tr-TR")
                self.phrase = self.phrase.lower()
                print(self.phrase)
            except sr.UnknownValueError:
                self.speak("Sorry, I did not get that.Please repeat")
            
            self.name_list = self.phrase.split(" ")

            cursor.execute("insert into USER VALUES(?,?)",(self.name_list[0],self.name_list[1]))
            con.commit()

            cursor.execute("select * from USER")
            self.name = cursor.fetchall()
            self.greeting()
        else:
            self.greeting()

“greeting” fonksiyonunda öncelikle bilgisayardan güncel saat çekilir ve bu saat dilimine göre “Günaydın”, ”İyi akşamlar” gibi cümleler söylenmesi sağlanır. Daha sonra sesli asistan verilen komutları dinlemeye başlar.

def greeting(self):
        hour = datetime.now().hour
        if(hour>=7 and hour<12):
            self.speak("Good Morning " + self.name[0][0])
        elif(hour>=12 and hour<18):
            self.speak("Good Afternoon " + self.name[0][0])
        elif(hour>=18 and hour<22):
            self.speak("Good Evening " + self.name[0][0])
        else:
            self.speak("Good Night " + self.name[0][0])
        
        self.listen()

“Speak” fonksiyonu verilen string değer ne olursa olsun sesli bir şekilde o değeri okur.

def speak(self,say):
        self.engine = pyttsx3.init()
        self.engine.say(say)
        self.engine.runAndWait()

Wikipedia modulünün içinde bulunan “summary” methodu, içine parametre olarak aranmak istenen kelime veya kelime grubunu ve “sentences” parametresi olarak ta çıkan sonuçtan kaç cümlenin alınacağını belirtmeyi sağlar. Örneğin, “barack obama” kelimesi aratıldığında “sentences=2” ise Barack Obama’nın Wikipedia sayfasındaki ilk 2 cümle getirilir.

elif "wikipedia" in self.phrase:
    list = self.phrase.split(" ")
    a = list.index("wikipedia")
    search = ""
    for i in list[a+1:]:
        search += str(i+" ")
    try:
        sentence = wikipedia.summary(search,sentences=2)
        print(sentence)
        self.speak(sentence)
    except:
        self.speak("I could not find anything about it.")

Wolfram|Alpha sitesi içinde bir çok sorunun cevabının bulunduğu database’e sahiplik eden bir website. Örneğin, “Istanbul weather” dediğinizde size anlık olarak İstanbul’un hava durumunu söyleyebilmekte. Bu sitede arama yapabilmek için kayıt olmalı ve site verilen API KEY’i fonksiyonun içine yazmalısınız. Kayıt olduktan sonra “My Apps (API)” bölümünden kendi API KEY’inizi alabilirsiniz.

client = wolframalpha.Client("YOUR API KEY")
res = client.query(self.phrase)
print(next(res.results).text)
self.speak(next(res.results).text)

Bu ve bunun gibi bir çok işlemi sesli asistana yaptırılabilir. Örneğin; “subprocess” modülü kullanılarak bilgisayarın uykuya alınması, “os” modülü kullanılarak bilgisayardan bir programın başlatılması, “winshell” modülü kullanılarak çöp kutusunun boşaltılabilmesi vb.

Ben bu yazımda sadece bir kaç işlemi anlattım. Bu projeyi ilerletmek tamamen hayal gücünüze bağlı. Okuduğunuz için teşekkür ederim. Diğer yazılarımda görüşmek üzere.

img

ibrahim ÖZKAN