# Голосовой ассистент КЕША 1.1 BETA
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import win32com.client as wincl
import webbrowser
import sys
import random
from currency_converter import CurrencyConverter
import functions
# настройки
opts = {
"alias": ('кеша','кеш','инокентий','иннокентий','кишун','киш',
'кишаня','кяш','кяша','кэш','кэша'),
"tbr": ('', '', 'покажи', 'сколько', '', 'как','сколько','поставь','переведи', "засеки",'запусти','сколько будет'),
"cmds": {
"ctime": ('текущее время', 'сейчас времени', 'который час', 'время', 'какое сейчас время'),
'startStopwatch': ('запусти секундомер', "включи секундомер", "засеки время"),
'stopStopwatch': ('останови секундомер', "выключи секундомер", "останови"),
"stupid1": ('расскажи анекдот', 'рассмеши меня', 'ты знаешь анекдоты', "шутка", "прикол"),
"calc": ('прибавить','умножить','разделить','степень','вычесть','поделить','х','+','-','/'),
"shutdown": ('выключи', 'выключить', 'отключение', 'отключи', 'выключи компьютер'),
"conv": ("валюта", "конвертер","доллар",'руб','евро'),
"Youtube": ("открой ютуб", "ютуб", "youtube", "Открой youtube"),
"Pozdrav": ("поздравь","поздравить"),
"deals": ("дела","делишки", 'как сам', 'как дела'),
"Poka": ("Пока","До свидания", 'Прощай', 'бб'),
"Radio": ("Музыка","Включи музыку", 'Включи Радио', 'Включи песню'),
"google": ("гугл","браузер", 'Запусти браузер', 'Запусти гугл', "Запусти Google", 'Открой Google'),
"Povtori": ("Повтори","Произнеси", 'Скажи', ''),
"pogoda": ("Какая Погода","Покажи погоду", 'Погода', 'Сегодня солнце?'),
"zakroigogle": ("Закрой гугл","Закрой Google", 'Закрой Браузер', ""),
"sozdatel": ("Кто твой создатель?","Как зовут твоего создателя?", 'кто разработчик?', ""),
"zakroimuziky": ("Останови музыку","выключи музыку", 'вырубай музыку', ""),
"vrazrabotke": ("","", '', "")
}
}
# функции
def speak(what):
print(what)
speak = wincl.Dispatch("SAPI.SpVoice")
speak.Speak(what)
def callback(recognizer, audio):
try:
global voice
voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
print("[log] Распознано: " + voice)
if voice.startswith(opts["alias"]):
# обращаются к Кеше
cmd = voice
for x in opts['alias']:
cmd = cmd.replace(x, "").strip()
for x in opts['tbr']:
cmd = cmd.replace(x, "").strip()
# распознаем и выполняем команду
cmd = recognize_cmd(cmd)
execute_cmd(cmd['cmd'])
except sr.UnknownValueError:
print("[log] Голос не распознан!")
except sr.RequestError as e:
print("[log] Неизвестная ошибка, проверьте интернет!")
def recognize_cmd(cmd):
RC = {'cmd': '', 'percent': 0}
for c,v in opts['cmds'].items():
for x in v:
vrt = fuzz.ratio(cmd, x)
if vrt > RC['percent']:
RC['cmd'] = c
RC['percent'] = vrt
return RC
def execute_cmd(cmd):
# сказать текущее время
if cmd == 'ctime':
now = datetime.datetime.now()
speak("Сейчас " + str(now.hour) + ":" + str(now.minute))
# воспроизвести радио
elif cmd == 'Radio':
music = ("D:\\Python\\Kesha\\music\\zapomni-derevya-padayut-stoya.mp3","D:\\Python\\Kesha\\music\\zapomni-kozhura-tik-tok.mp3","D:\\Python\\Kesha\\music\\maks-korzh-gnutsya-strely-rvutsya-strely-gnutsya-strely-nad-golovoj.mp3","D:\\Python\\Kesha\\music\\zapomni-ya-so-svoej-duri-tebya-poceluyu.mp3")
os.system(random.choice(music))
return RC
#Начало ошибок в коде
elif cmd == "calc":
def calc(cmd):
try:
list_of_nums = voice.split()
num_1,num_2 = int((list_of_nums[-3]).strip()), int((list_of_nums[-1]).strip())
opers = [list_of_nums[0].strip(),list_of_nums[-2].strip()]
for i in opers:
if 'дел' in i or 'множ' in i or 'лож' in i or 'приба' in i or 'выч' in i or i == 'x' or i == '/' or i =='+' or i == '-' or i == '*':
oper = i
break
else:
oper = opers[1]
if oper == "+" or 'слож' in oper:
ans = num_1 + num_2
elif oper == "-" or 'выче' in oper:
ans = num_1 - num_2
elif oper == "х" or 'множ' in oper:
ans = num_1 * num_2
elif oper == "/" or 'дел' in oper:
if num_2 != 0:
ans = num_1 / num_2
else:
speak("Делить на ноль невозможно")
elif "степен" in oper:
ans = num_1 ** num_2
speak("{0} {1} {2} = {3}".format(list_of_nums[-3], list_of_nums[-2], list_of_nums[-1], ans))
except:
speak("Скажите, например: Сколько будет 5+5?")
#Конец ошибок
else:
print('Команда не распознана, повторите!')
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1)
with m as source:
r.adjust_for_ambient_noise(source)
speak_engine = pyttsx3.init()
# Только если у вас установлены голоса для синтеза речи!
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', voices[4].id)
# forced cmd test
speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
#speak("Добрый день, повелитель")
#speak("Кеша слушает")
#stop_listening = r.listen_in_background(m, callback)
#while True: time.sleep(0.1) # infinity loop