Jarvis на python в чем ошибка?

Не пойму как решить проблему? я создал jarvis персонального ассистента! все хорошо работает вот толька один раз! тоесть я запускаю код он меня слушает даю ему команду он выполняет эту команду а потом перестает слушать ,я хочу сделать чтобы он меня все время слушал и выполнял команды!
Вот код самой программы
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": ('сколько время','сейчас время','который час','какой час','покажи время','время','сколько сейчас время'),
    'music':('включи музыку','включи любимую музыку','поставь песню','поставь музыку','музыка','музончик','крути винилы'),
    'stupid': ('расскажи анекдот','расмеши меня'),
    'telegram':('открой телеграм','телеграм','запусти телеграм','открой ка телеграм','открой telegram','telegram','телегу','тг','tg'),
    'name':('браниак','брениак','брэниак','браин','брайн','брейн','брэйн','бреин','броня','брайан'),
    'sketchfab': ('скетчфаб','sketchfab','открой sketchfab','открой скетчфаб','скечфаб'),
    'pogoda':('погода','покажи погоду','погоду','какая сейчас погода','пагода'),
    'hello': ('привет','прив','хай','хелоу','hello','хеллоу'),
    'nice':('отлично','норм','нормально','хорошо','круто','супер'),
    'explorer':('открой проводник','проводник','файлы','праводник','провадник','провод','запусти проводник'),
    'browser' : ('браузер' ,'бравзер',',бразер','browser','мой браузер','фиговый' , 'фигового' , 'фиговый браузер'),
    'search':('поиск','гугл поиск','гугл' 'поищи','google','найди'),
    'ps':('фотошоп','photoshop','фото шоп','photo shop'),
    'plan':('мои задачи','задачи','заметки','продиктуй мои задачи'),
    'yt':('youtube','ютуб'),
    'ali':('али','алишка','ali','aliexpress','алиэкспресс','алиэкспрес','алиекспрес','алю','китайцы','китайцев','алибаба','китайцами'),
    'ctd':('скрыть','спряч','спрячь','выйти','выходи')
    }
}

# Погода 
owm = pyowm.OWM('c17e34503b50a20cb2ccef7213239d58',language = "ru" )
place = 'Tashkent'
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("Температура нормальная, Одевайтесь на ваш вкус!")




# Создание интерфейса
"""app = QtWidgets.QApplication(sys.argv)
      
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
    

sys.exit(app.exec_())"""

# Функция поиска
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 'music' in cmd:
        # воспроизвести радио
        webbrowser.open("C:\\Users\\USER\\Music\\Music\\Dansez_Fasion__(xtremex3.com).mp3")
        
    
    elif cmd == 'stupid':
        # рассказать анекдот
        speak("Чем юзер отличается от программиста? Если попросить их перезагрузить комп пользуясь только мышкой, юзер жмет на ”завершение работы” в Виндовсе. А что сделает программист? Он поднимет мышку со стола и нажмет ею на Reset")
    
        
    elif 'telegram' in cmd:
        webbrowser.open("C:\\Users\\USER\\AppData\\Roaming\\Telegram Desktop\\Telegram.exe")
        speak('Выполняю!')
        
    elif cmd == 'sketchfab':
        webbrowser.open("https://sketchfab.com/")   
        speak('Выполняю!')
        
    elif 'pogoda' in cmd:
      speak("Погода в Ташкенте  " + str(temp ) + ' градусов, ' + w.get_detailed_status())     
      weath()
      
    elif cmd == 'hello':
        speak('Здравствуйте,Сэр. \nКак ваши дела')
        
    elif cmd == 'explorer':
        webbrowser.open('C:\\Users\\USER\\Documents')
        speak('Выполняю!')
        
    elif 'browser' in cmd:
        webbrowser.open('C:\\Users\\USER\\Documents\\Browser\\index.htm')
    elif 'search' in cmd:
        srch()
       
    elif 'ps' in cmd:
        webbrowser.open('C:\\Users\\USER\\Documents\\Photoshop CS6')    
        speak('Уже открываю')
    elif 'plan' in cmd:
        speak('Вот ваши задачи сэр!... Сделать браиниака разговорчивым... Решить проблему с фоновым слушанием... Переделать браиниака... Продумать поиск по википедии')
    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 :
  webbrowser.open('C:\\Users\\USER\\Music\\Meet_будильник.mp3')
  speak('Доброе утро ')
  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
  • Вопрос задан
  • 550 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы