Merhaba arkadaşlar. Bir sanal asistan olması için aşağıdaki kodları yazdım. Sorun yok asistan çalışıyor tüm komutlar görevlerini yerine getiriyor ama asistan benden bir süre ses alamazsa program çok yavaşlıyor çok geç tepkiler vermeye başlıyor hatta bazen neredeyse hiç tepki vermiyor bile diyebilirim. Bunun nedeninin gereksiz bellek kullanımı olduğunu düşündüm. Bunu çözmek için clear_memory() isminde bellği temizleyen bir fonksiyon yazdım ama yinede sorun devam ediyor. Bu işlerde birazda acemi sayılırım. Kodlarıma bir göz atıp sorunun nereden kaynaklandığını ve nasıl çözebileceğimi söyleyebilirseniz çok mutlu olurum.
from cProfile import run
from playsound import playsound
from gtts import gTTS
import speech_recognition as sr
import os
import time
from datetime import date, datetime
import random
from random import choice
#from pydub import AudioSegment
import webbrowser
import gc
import sys
r = sr.Recognizer()
etkilesim = "activation.mp3"
mrb_options = ["merhaba", "selam bro", "merhaba canım", "sanada merhaba"]
nbr_options = ["iyilik. sende iyi görünüyorsun", "iş güç. kodlanıp duruyoruz", "sıfır ve birler işte. başka bişey yok"]
grs_options = ["ihtiyacın olduğunda ben buralardayım", "görüşürüz", "biraz dinleneyim", "eyvallah reis. pardon görüşürüz diyecektim"]
search_options = ["ne aramamı istersin", "neyi aratalım", "ayıp şeyler olmasın ama. ne arayalım", "of çok üşendim şimdi. ne aratacaksın", "hayır aramayacağım. şaka şaka neyi arayalım"]
app_options = {"steam": "D:\Program Files (x86)\Steam\steam.exe", "epic games": "D:\Program Files (x86)\Epic\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe"}
def response(voice):
etkilesim = "activation.mp3"
if "merhaba" in voice:
global mrb_options
selection = random.choice(mrb_options)
speak(selection)
elif "ne haber" in voice or "nasıl gidiyor" in voice or "ne var ne yok" in voice:
global nbr_options
selection = random.choice(nbr_options)
speak(selection)
elif "görüşürüz" in voice or "kendine iyi bak" in voice or "güle güle" in voice:
global grs_options
selection = random.choice(grs_options)
speak(selection)
elif "saat kaç" in voice or "bana saati söyle" in voice or "saati söyler misin" in voice:
selection = ["Saat şu an: ", "Hemen bakıyorum: ", "eti kemik geçiyor. şaka şaka saat:"]
clock = datetime.now().strftime("%H:%M")
selection = random.choice(selection)
speak(selection + clock)
elif "google'da ara" in voice or "internette ara" in voice:
global search_options
selection = random.choice(search_options)
speak(selection)
playsound("activation.mp3")
search = record
url = "https://www.google.com/search?client=opera-gx&q=" + search() #arama yapacağımız url yi belirledik.
webbrowser.get().open(url) #belirlediğimiz url nin açılmasını sağladık
speak("web'de bunu buldum")
elif "uygulama aç" in voice or "uygulamayı çalıştır" in voice:
speak("Hangi uygulamayı açmamı istiyorsun?")
playsound(etkilesim)
runApp = record()
runApp = runApp.lower()
if "steam" in runApp:
os.startfile("D:\Program Files (x86)\Steam\steam.exe")
speak("İstediğin uygulamayı çalıştırıyorum.")
elif "epic games" in runApp:
os.startfile("D:\Program Files (x86)\Epic\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesLauncher.exe")
speak("oyun saatin gelmiş sanırım")
else:
speak("İstediğin uygulama çalıştırma listemde yok.")
elif "bugün günlerden ne" in voice or "günlerden ne" in voice or "bana günü söyle" in voice or "gün" in voice or "hafatanın hangi günündeyiz" in voice:
today = time.strftime("%A") #BU KOD BİLGİSAYARIN SAATİNİ ALIYOR. BUNU KULLANMAK İÇİN "İMPORT TİME"
today.capitalize()
if today == "Monday":
today = "Pazartesi"
elif today == "Tuesday":
today = "Salı"
elif today == "Wednesday":
today = "Çarşamba"
elif today == "Thursday":
today = "Perşembe"
elif today == "Friday":
today = "Cuma"
elif today == "Saturday":
today = "Cumartesi"
elif today == "Sunday":
today = "Pazar"
speak("bugün günlerden" + (today))
elif "bilgisayarı kapat" in voice:
speak("görüşürüz")
os.system("shutdown /s /t 0") #bilgisayarı kapatma komutu
elif "bilgisayarı yeniden başlat" in voice:
speak("hemen hallediyorum")
os.system("shutdown /r /t 0") #bilgisayarı yeniden başlatma kodu.
elif "dinlen" in voice or "izin verdim" in voice or "güle güle" in voice or "kendini kapat" in voice:
byeSelection = ["makine olabilirim ama kaytarmayı severim. kaçtım", "sonra görüşürüz patron", "daha karpuz kesecektik. neyse birdahaki sefere artık", "güle güle", "kendine iyi bak"]
byeSelection = random.choice(byeSelection)
speak(byeSelection)
exit()
else:
speak("henüz bu konuda beni eğitmedin")
return voice
def record(ask=False):
with sr.Microphone() as source:
if ask:
print(ask)
audio = r.listen(source)
voice = ""
try:
voice = r.recognize_google(audio, language="tr-TR")
except sr.UnknownValueError:
print("Asistan: Anlayamadım")
clear_memory()
except sr.RequestError:
print("Asistan: Sistem çalışmıyor")
return voice
max_memory = 100 * 128 * 128
def clear_memory():
gc.collect()
mem_used = sum(sys.getsizeof(obj) for obj in gc.get_objects())
if mem_used > max_memory:
gc.get_objects().clear()
def speak(string):
tts = gTTS(text=string, lang="tr", slow=False)
file = "answer.mp3"
tts.save(file)
# speeding()
playsound(file)
os.remove(file)
# os.remove("speed.mp3")
def test(wake):
if "hey bilgisayar" in wake:
playsound("activation.mp3")
wake = record()
if wake != '':
voice = wake.lower()
print(wake.capitalize())
response(voice)
speak("patron hoşgeldin")
while True:
wake = record()
if wake != '':
wake = wake.lower()
print(wake.capitalize())
test(wake)