У меня есть ассистент похожий на яндекс алису, сири, jarvis, в коде все работает!
Проблема вот в чем , когда я его запускаю все работает он слушает и ждет пока я дам ему команду затем я даю ему команду он выполняет ее и перестает слушать и приходится заново запускать программу
Вопрос как мне сделать так чтобы он все время слушал и выполнял комманду а не однократно
Вот код самой программы:
https://pastebin.com/AChtqKU6
import os
import time
import datetime
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import webbrowser
import pyowm
from PySide2 import QtCore, QtGui, QtWidgets
import sys
import wolframalpha
import wikipedia
import pyautogui
from time import sleep
opts = {
'alias':('джарвис','жарвис','джей','жавис','джавис','jarvis','эдвин','эд','edvin','ed','edvine','джаред','дабес','даришь'),
'tbr':('скажи','расскажи','покажи','сколько',' произнеси','запусти','открой'),
'cmds':{
"ctimes": ('сколько время','сейчас время','который час','какой час','покажи время','время','сколько сейчас время'),
'stupid': ('расскажи анекдот','расмеши меня'), 'name':('браниак','брениак','брэниак','браин','брайн','брейн','брэйн','бреин','броня','брайан'),
'sketchfab': ('скетчфаб','sketchfab','открой sketchfab','открой скетчфаб','скечфаб'),
'pogoda':('погода','покажи погоду','погоду','какая сейчас погода','пагода'),
'search':('поиск','гугл поиск','гугл' 'поищи','google','найди'),
'yt':('youtube','ютуб'),
'ali':('али','алишка','ali','aliexpress','алиэкспресс','алиэкспрес','алиекспрес','алю','китайцы','китайцев','алибаба','китайцами'),
'ctd':('скрыть','спряч','спрячь','выйти','выходи')
}
}
# Погода
owm = pyowm.OWM('c17e34503b50a20cb2ccef7213239d58',language = "ru" )
place = 'Moscow'
observation = owm.weather_at_place(place)
w = observation.get_weather()
temp = w.get_temperature('celsius')["temp_max"]
def weath():
if temp < 10 :
speak("Одевайтесь как можно теплее , на улице очень холодно!")
elif temp < 20 :
speak("Одевайтесь потеплее!")
else:
speak("Температура нормальная, Одевайтесь на ваш вкус!")
# Функция поиска
def srch():
r = sr.Recognizer()
with sr.Microphone(device_index = 1) as source:
print("Скажите что искать...")
audio = r.listen(source)
query = r.recognize_google(audio, language = "ru-RU").lower()
print('Вы сказали: '+ query.lower())
webbrowser.open('https://www.google.com/search?client=avast&q='+query.lower())
# функции
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("Распознано: " + 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("Голос не распознан!")
except sr.RequestError as e:
speak("Сэр! пожалуйста проверьте подключение к интернету")
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 == 'ctimes':
# сказать текущее время
now = datetime.datetime.now()
speak("Сейчас " + str(now.hour) + ":" + str(now.minute))
elif cmd == 'stupid':
# рассказать анекдот
speak("Чем юзер отличается от программиста? Если попросить их перезагрузить комп пользуясь только мышкой, юзер жмет на ”завершение работы” в Виндовсе. А что сделает программист? Он поднимет мышку со стола и нажмет ею на Reset")
elif cmd == 'sketchfab':
webbrowser.open("https://sketchfab.com/")
speak('Выполняю!')
elif 'pogoda' in cmd:
speak("Погода" + str(temp ) + ' градусов, ' + w.get_detailed_status())
weath()
elif 'search' in cmd:
srch()
elif 'yt' in cmd:
webbrowser.open('https://www.youtube.com/')
speak('Окей! Уже открыл!')
elif 'ali' in cmd:
webbrowser.open('https://best.aliexpress.com/?lan=en')
speak('Прогружаю.Сэр!')
elif 'ctd' in cmd:
pyautogui.hotkey('win','d')
else:
speak("Сэр! я не смог распознать комманду!")
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1) # по умолчанию 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[5].id)
#Распознает время и в соответствии с временем говорит приветствие
now = datetime.datetime.now()
welcome = now.hour
# Функция времени
days = {0: u"Понедельник", 1: u"Вторник", 2: u"Среда", 3: u"Четверг", 4: u"Пятница", 5: u"Субота", 6: u"Воскресенье"}
today = datetime.datetime.today()
if 13 > welcome :
speak('Доброе утро ')
webbrowser.open('C:\\Users\\USER\\Music\\motivation\\rokki_balboa_motivacija_-_rocky_balboa_(zf.fm).mp3')
speak("Сегодня" + ' '+ days[datetime.date.today().weekday()] +'. Время '+ str(now.hour) + ":" + str(now.minute) )
speak("Погода" + str(temp ) + ' градусов, ' + w.get_detailed_status())
weath()
elif welcome <= 17:
speak('Добрый день, Cэр')
elif welcome >= 18:
speak("Добрый вечер, Сэр")
speak("Джарвис слушает")
stop_listening = r.listen_in_background(m, callback)
while True:
time.sleep(0.1) # infinity loop
'''
Доброе утро
сейчас 7:00 утра
Понедельник
Погода в ... и тд
'''