нужно поставить в цикл так что-бы программа стартовала заново после завершения
# Голосовой ассистент Виталий (основано на "Кеша" ХаудиХо) 1.0 BETA
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import webbrowser
# Настройки
opts = {
"alias": ('Виталя','Виталь','виталя','Виталий','виталий','слушай',
'слышь','железяка','дурак','окей','компьютер','виталик'),
"tbr": ('скажи','расскажи','покажи','сколько','произнеси','Пожайлуста',),
"cmds": {
"ctime": ('текущее время','сейчас времени','который час'),
"radio": ('включи музыку','воспроизведи радио','включи радио'),
"humor": ('расскажи анекдот','рассмеши меня','ты знаешь анекдот',),
"howareyou": ('как дела','как дилишки', 'как ваше ничего?'),
"yes": ('да', 'Да'),
"like": ('Какой ты умный','ты молодец','ты что капец умный'),
"by": ('пока','досвидания','прощай'),
"google": ('открой интернет', 'открой гугл', 'открой браузер', 'гугл', 'интернет', 'браузер'), #инет
"vk": ('открой вк', 'вк','открой вконтакте', 'вконтакте')
}
}
# Функции
def web_search(): # осуществляет поиск в интернете по запросу (adress)
global adress
webbrowser.open('https://yandex.ru/yandsearch?clid=2028026&text={}&lr=11373'.format(adress))
def speak(what):
print( what )
speak_engine.say( what )
speak_engine.runAndWait()
speak_engine.stop()
def callback(recognizer, audio):
try:
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':
# радио
webbrowser.open('https://wifmedia.com/radio/')+ speak("Без-проблем")
elif cmd == 'humor':
# рассказать анекдот
speak("Приходят 2 компьютера в бар... А дальше не помню... Мне это Сири разказала. После этого я сней не общался")
#шутки
elif cmd == 'howareyou':
# как дела
speak("Хорошо, но не много одиноко... А стойте я придумал себе занятие! Привет Алиса! Как дела?"), speak("Замечательно, курачки светлеют, солнышко клюет. Или там было подругому?")
elif cmd == 'yes':
# наглость 80lv
speak("провода, нет, интернет")
elif cmd == 'like':
# наглость 80lv
webbrowser.open('https://lh3.googleusercontent.com/proxy/OG7JVesXVTm5AAF-Vn7Ky5peLx1yRpJTt18L-sYVsADoQp8aDvCcoX10QLc6jZv40UFQQ8OCrdYZQAnfuWlhyJJwRIw')+speak("Да я знаю, но спасибо что напомнили.")
elif cmd == 'by':
# пока
speak("Досвидания было приятно свами иметь дело!")
#интернет запросы
elif cmd == 'google':
# гугл
webbrowser.open('https://www.google.com/')+ speak("Фиксики уже включают")
else:
print('--')
elif cmd == 'vk':
# вк
webbrowser.open('https://www.vk.com/')+ speak("Идет подключение к серверу Дурова... 3. 2. 1. Поехали")
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)
speak("Виталий слушает")
stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1)