@sdrom

Как заставить прогу начинаться сначала после её завершения?

нужно поставить в цикл так что-бы программа стартовала заново после завершения
# Голосовой ассистент Виталий (основано на "Кеша" ХаудиХо) 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)
  • Вопрос задан
  • 214 просмотров
Решения вопроса 4
SoreMix
@SoreMix Куратор тега Python
yellow
?
while True:
    r.listen_in_background(m, callback)
Ответ написан
samodum
@samodum
Какой вопрос - такой и ответ
Почему бы не сделать это через bat-файл или cron?
Или вообще зациклить исполнение внутри самой проги?
Ответ написан
@andro1
?
def x():
    #тут ваш код
    x()
Ответ написан
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
listen_in_background отдельный фоновый поток запускает, а надо слушать в основном потоке. Тогда удастся дождаться завершения одного цикла работы алгоритма и через while True запустить его еще раз. Только надо отделить повторяемую логику от однократной инициализации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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