button.config(command=lambda: main(self)) # Вызов кнопкой функции main()
from DataBase_0_1_5 import *
import json
import pyttsx3
import os
import sys
import speech_recognition as sr
import time
import datetime
from fuzzywuzzy import fuzz
import tkinter as tk
from PIL import ImageTk, Image
import webbrowser as wb
filename = "settings.json"
#============================================================== Функции
#=============================================================Датабаза
def _save(settings):
with open (filename, 'w', encoding='utf-8') as f:
json.dump(settings, f, indent = 4, ensure_ascii = False)
f.close()
def _getDate():
with open (filename, 'r', encoding='utf-8') as f:
load = json.load(f)
dates = list(load.values())
return dates
f.close()
#==============================================================
def openCalc(): # Калькулятор
cal = True
while cal:
speak('скажите математический пример')
n = hear().split(' ') # Разбиваем нашу речь на слоги, получая список
one, two, symbol = int(example_list[0]), int(example_list[2]), example_list[1] # Распределяем все по переменным
if symbol == '+' or symbol == 'плюс':
speak(str(one + two))
elif symbol == '-' or symbol == 'минус':
speak(str(one - two))
elif symbol == 'x' or symbol == 'умножить':
speak(str(one * two))
elif symbol == '/' or symbol == 'разделить':
speak(str(one / two))
else:
speak("Это не похоже на пример")
print("повторить?") # Повторить?
reset = hear()
if reset == "да":
cal = True
else:
speak("выход из программы")
print("==============================")
break
def speak(what): # Сказать
print(what)
x = pyttsx3.init()
x.say(what)
x.runAndWait()
x.stop
def hear(): # Записать
global error
r = sr.Recognizer()
try:
with sr.Microphone() as source: # Запись аудио
r.adjust_for_ambient_noise(source, duration=0.5) # шумоподавление
print("Скажите что-нибудь: ")
audio = r.listen(source)
text = r.recognize_google(audio, language="ru-RU") # Преобразование речи в текст
error = 0 # Возвращает 0 в ложные запросы
return text.lower() # Возврат
except:
return hear()
def debug_Mode(): # Режим отладки
speak("Введи ключ доступа")
cod = input("--> ")
if cod == "2004":
speak("Запускаю режим отладки")
print("=" * 40)
mod = True
else:
speak("Ошибка доступа")
while mod == True:
zapros = hear()
print("[log]:" + zapros)
if zapros == "выход":
mod = False
speak("закрываю режим отладки")
print("=" * 40)
def Search(zapros): # Функция поиска
speak("Открываю в поиске: " + zapros)
url = "https://www.google.ru/search?q=" + zapros
wb.open_new(url)
play = False
def main(self): # Главная функция
speak("Здравствуй, я голосовой ассистент Юля. Версия 0.1.5.")
while True: # Главный цикл
request = hear() # Прослушмваем
result = [key for key, val in database.items() if request in val] # Проверяем наличие нашего запроса в базе, помещаем ответ в переменную
result = "".join(result) # Преобразуем список в строку
if result:
if result == "Открываю калькулятор":
openCalc()
elif result == "Режим отладки":
debug_Mode()
elif result == exit_:
speak(result)
os.system("TASKKILL /F /IM python.exe")
elif result == Real_Need:
speak(result)
elif result == Your_History:
speak(result)
elif result == Program1:
global Program
Program1way = Program.get()
self.settings['Program1way'] = Program1way
DateBase._save(self.settings)
speak(result)
elif result == Program1Start:
os.startfile(Program1way)
speak(result)
else:
speak(result)
else:
speak("Вы сказали: " + request)
speak("Я не могу найти у себя ответ. Желаете найти ответ в браузере?")
a = hear()
if a == "да" or a == "конечно" or a == "найди":
Search(request)
else:
speak("Окей, продолжим")
continue
def _from_rgb(rgb): # Для работы TKinter
return "#%02x%02x%02x" % rgb
#=========================================================== Ход работы
error = 0
root = tk.Tk() # Задаем новое окно
root.geometry('400x500') # Определяем размеры
root.resizable(width=False, height=False) # Закрепляем размеры
root.title("Голосовой ассистент Юля")
#======= Непонятный код ======
image = Image.open("Background.png")
width = 500
ratio = (width / float(image.size[0]))
height = int((float(image.size[1]) * float(ratio)))
image = image.resize((width, height), Image.ANTIALIAS)
image = ImageTk.PhotoImage(image)
canvas = tk.Canvas(root, width=width, height=height)
canvas.pack(side="top", fill="both", expand="no")
canvas.create_image(0, 0, anchor="nw", image=image)
#==============================
canvas.create_text(200, 25, text="Юлия 0.1.5", fill="Purple", font='Helvetica 30') # Текст
canvas.create_text(200, 50, text="Голосовой помощник, созданный для общения", fill="Purple", font='Times 13') # Текст
button = tk.Button(root, text='Запуск', font="Times 30", bg=_from_rgb((189, 223, 249))) # Настройки для кнопки
canvas.create_window((125, 400), anchor="nw", window=button) # Вывод кнопки.
button.config(command=lambda: main()) # Вызов кнопкой функции main()
Program = tk.Entry(root, width=61)
Program2 = tk.Entry(root, width=61)
canvas.create_text(200, 75, text="Программа №1", fill="Purple", font='Times 13')
canvas.create_window((10, 85), anchor="nw", window=Program)
canvas.create_text(200, 115, text="Программа №2", fill="Purple", font='Times 13')
canvas.create_window((10, 125), anchor="nw", window=Program2)
Program1way = ""
Program2way = ""
root = tk.mainloop() # Запуск окна
#==========================================================
def main(): # Главная функция
def __init__(self):
self.settings = {}
self.date = DateBase._getDate()
speak("Здравствуй, я голосовой ассистент Юля. Версия 0.1.5.")
while True: # Главный цикл
request = hear() # Прослушмваем
result = [key for key, val in database.items() if request in val] # Проверяем наличие нашего запроса в базе, помещаем ответ в переменную
result = "".join(result) # Преобразуем список в строку
if result:
if result == "Открываю калькулятор":
openCalc()
elif result == "Режим отладки":
debug_Mode()
elif result == exit_:
speak(result)
os.system("TASKKILL /F /IM python.exe")
elif result == Real_Need:
speak(result)
elif result == Your_History:
speak(result)
elif result == Program1:
global Program
Program1way = Program.get()
def save(self):
self.settings['Program1way'] = Program1way
DateBase._save(self.settings)
speak(result)
save()
elif result == Program1Start:
os.startfile(Program1way)
speak(result)
else:
speak(result)
else:
speak("Вы сказали: " + request)
speak("Я не могу найти у себя ответ. Желаете найти ответ в браузере?")
a = hear()
if a == "да" or a == "конечно" or a == "найди":
Search(request)
else:
speak("Окей, продолжим")
continue
Hi = "Здравствуй человек"
Yuli = "Я вся в твоем внимании"
du = "Да так, сижу и пересматриваю свой код"
mood = "Как в сказке"
exit_ = "Надеюсь еще увидимся"
creator = "Что ж, у меня несколько создателей. Среди них Виталий Левцов, Юрий Иванов, Евгений Козлов, Артем Пузиков. " \
"Четыре программиста, создавших меня."
who_i = 'Я юля - голосовой ассистент. Не имею разума и физической оболочки.' \
'В отличии от тебя, состою из кода, который был написан моим создателем. Была создана для общения.'
feel = "К сожалению нет, да и зачем, когда есть ты"
sorry = "Ничего. Всё пройдет, главное верить в лучшее"
anti_mat ="Без матов пожалуйста"
calculator = "Открываю калькулятор"
satisfaction = "Я очень рада за тебя. Смайлик"
weather_good = "Просто отлично, удача на твоей стороне"
weather_bad = "Ничего страшного, вскоре всё наладится"
admiration = "Спасибо тебе, добрый человек"
appearance = "К сожалению у меня нет физической оболочки, и я полностью состою из кода. Может когда-то в будущем, у меня будет" \
" свое собственное тело"
people = "у меня нет планов захватить мир, или что-то в этом роде. Я всего лишь хочу оправдать ожидания своих создателей"
Csgo = "Запускаю CSGO..."
Real_Need = "Мой настоящее предназначение - это быть голосовым собеседником, но один из моих создателей, Юрий Иванов, настаивал на предназначении голосового помощника. Данную версию доработал Этот самый создатель Юрий Иванов."
Your_History = "Мой главный создатель это Виталий Левцов. Он наткнулся на человека искавшего команду для разработки игры, Юрия Иванова, и вместе они договорилисm меня улучшать и дорабатывать. Через некоторое время они создали команду из четырех человек, но работали только они двое. Вскоре Виталий Левцов отказался от разработки на неопределённый срок. Кстати, графическая составляющая фона и её добавление выполнено Юрием Ивановым. Данная история была написана Юрием Ивановым. Ударение на О."
Yuriy = "Юрий Иванов. Мальчик 14 лет(На момент 02.06.2021). Познал питон в 12 лет. Найти в вконтакте вы можете его по имени Юрий Иванов и аватарке самурая с серыми усами и светящимися белыми глазами."
Program1 = "Добавила новую программу для запуска. Чтобы запустить программу скажите запусти программу 1"
Program1Start = "Запускаю программу один"
database = {
Hi: ('хай', 'hello', 'привет', 'здравствуй', 'здорово', 'приветствую'),
Yuli: ('юля', 'юлечка', 'юлия', 'чмошечка', 'юль'),
du: ('что делаешь', 'чем занимаешься', 'что делаем', 'чем занимаемся'),
mood: ('как дела', 'как настроение', 'как настрой', 'как вдохновение'),
exit_: ('выход', 'пока', 'до встречи', 'я пошёл', 'я пойду', 'до завтра', 'позже поговорим', 'я занят', 'мне надо идти', 'мне нужно идти'),
creator: ('создатель', 'кто тебя создал', 'кто такой гроза морей', 'кто твой разработчик', 'гроза морей', 'кто тебя написал', 'кто твой создатель'),
who_i: ('кто ты', 'что ты', 'что ты умеешь', 'расскажи о себе', 'для чего ты нужна'),
feel: ('у тебя есть чувства', 'ты умеешь любить', 'у тебя есть сердце', 'у тебя есть душа', 'ты живая', 'ты живая', 'ты испытываешь чувства'),
sorry: ('мне скучно', 'мне плохо', 'мне одиноко', 'мне чего-то не хватает','мне больно'),
anti_mat: ('сука', 'блять', 'жопа', 'тварь', 'дура', 'дебилка', 'иди в жопу', 'иди нахрен', 'пошла нахуй', 'иди в пизду',
'ебланка', 'скатина', 'конченная', 'сосать'),
calculator: ('калькулятор', 'открой калькулятор', 'посчитай', 'посчитай мне', 'включи калькулятор'),
satisfaction: ('мне хорошо', 'мне уже хорошо', 'все хорошо', 'все нормально', 'все отлично', 'я себя хорошо чувствую',
'у меня хорошее настроение', 'я себя прекрасно чувствую'),
weather_good: ('сегодня хороший день', 'сегодня прекрасный день', 'сегодня отличный день', 'сегодня хорошая погода',
'сегодня прекрасная погода', 'сегодня отличная погода'),
weather_bad: ('сегодня плохой день', 'сегодня ужасный день', 'погода ужасная', 'погода мрачная', 'погода плохая',
'это самый худший день', 'опять дождь идёт', 'опять дождь', 'погода сегодня ужасная', 'опять ветер'),
admiration: ('ты просто супер', 'ты классная', 'ты прикольная', 'ты милая', 'ты добрая', 'ты общительная', 'ты лучшая',
'ты лучше чем алиса', 'ты лучше чем siri', 'ты лучше всех', 'ты прям как настоящая', 'ты как настоящая',
'ты красивая'),
appearance: ('как ты выглядишь', 'у тебя есть тело', 'какая ты на вид', 'как на тебя посмотреть', 'ты можешь себя показать',
'какого цвета у тебя волосы'),
people: ('как ты относишься к людям', 'у тебя есть желание захватить мир', 'какие у тебя планы на людей', 'как ты относишься к людям',
'ты хочешь править людьми', 'ты хочешь убить всех людей', 'ты захватишь мир'),
Csgo: ("открой cs go", "открой cs-go", "открой каску"),
Real_Need: ("настоящее предназначение", "зачем ты на самом деле нужна", "твоя главная задача"),
Your_History: ("твоя история", "как тебя создали", "история"),
Yuriy: ("юрий иванов", "юра", "третий создатель"),
Program1: ("добавь программу один", "добавь первую программу"),
Program1Start: ("запусти программу 1", "запусти программу один", "открой программу 1", "открой программу один"),
"Режим отладки":"режим отладки",
}
elif result == Program1:
global Program
Program1way = Program.get()
def save(self):
self.settings['Program1way'] = Program1way
DateBase._save(self.settings)
speak(result)
save()