Помогите с программой "помощник"

Александр

Новичок
Пользователь
Апр 10, 2020
5
0
1
Добрый день.Пытаюсь сделать письменного-голосового помощника на данный момент он работает только в письменном форме . Мне хочется чтобы программа меня попросила чтобы я ввёл команду а я мог либо с помощью клавиатуры ввести её либо нажать на Ctrl я сказал команду микрофон меня послушал через сервера гугл преобразовал речь в текст и записали вместо меня
Python:
import speech_recognition as sr
import win32com.client
import keyboard
import webbrowser
import datetime
import random
pravda=True
speaker=win32com.client.Dispatch("SAPI.SpVoice")


def voicecommand():
    r = sr.Recognizer() # Создаем объект на основе библиотеки speech_recognition и вызываем метод для определения данных
    with sr.Microphone() as source:# Начинаем прослушивать микрофон и записываем данные в source
        print("Говорите")# Просто вывод, чтобы мы знали когда говорить
        r.pause_threshold = 1# Устанавливаем паузу, чтобы прослушивание началось лишь по прошествию 1 секунды
        r.adjust_for_ambient_noise(source, duration=1)# используем adjust_for_ambient_noise для удаления посторонних шумов из аудио дорожки
        audio = r.listen(source)# Полученные данные записываем в переменную audio пока мы получили лишь mp3 звук

    try: # Обрабатываем все при помощи исключений
        """
        Распознаем данные из mp3 дорожки.
        Указываем что отслеживаемый язык русский.
        Благодаря lower() приводим все в нижний регистр.
        Теперь мы получили данные в формате строки,
        которые спокойно можем проверить в условиях
        """
        zadanie = r.recognize_google(audio, language="ru-RU").lower()
        # что сказал пользователь
        print("Вы сказали:"+zadanie)# что сказал пользователь
        command=zadanie
        

        
        
    except sr.UnknownValueError:# Если не смогли распознать текст, то будет вызвана эта ошибка
        # Здесь просто проговариваем слова "Я вас не поняла"
        # и вызываем снова функцию command() для
        # получения текста от пользователя
        print("Я вас не поняла")
        zadanie = voicecommand()


name5=("Окжма")
name4=("Ок жма")
name3=("окжма")
name2=("ок жма")
name1=("okjma")
name=("ok jma")
b=input("Вызовите меня:")
if b==name or b==name1 or b==name2 or b==name3 or b==name4 or b==name5:
    print("Слушаю повелитель")
    speaker.Speak("слушаю повелитель")
    command=(' '.join(input("Введите вашу команду:").split())) or voicecommand()
else:
    print("Меня зовут не " + (b))
    speaker.Speak("Меня зовут не" +(b))
    speaker.Speak("Назовите меня правильно")
    b=input("Назовите меня правильно:")
    if b==name or b==name1 or b==name2 or b==name3 or b==name4 or b==name5:
        print("Слушаю повелитель")
        speaker.Speak("Слушаю повелитель")
        command=(' '.join(input("Введите вашу команду:").split()))
    else:
        print("Бан")
        speaker.Speak("Бан")
        raise SystemExit



pravda=True
while pravda:
    
    napominanie3=1
    napominanie2=1
    napominanie1=1
    randomhislo=random.randint(1,100000)
    joke=random.randint(1,3)#переменная для показа шуток
    coin=random.randint(1,3)#переменная для команды броска монеты
    now=datetime.datetime.now()#команда для времини
    f=int(random.uniform(1,10))


    if joke==1 and (command=="Расскажи анекдот") or joke==1 and (command=="расскажи анекдот") or joke==1 and (command=="Пошути") or joke==1 and (command=="пошути"):
        print("Идут значит 2 рэпера, один в кепке, другой тоже звизды получит")
        speaker.Speak("Идут значит 2 рэпера, один в кепке, другой тоже звизды получит")
        command=(' '.join(input("Введите вашу команду:").split()))

    if joke==2 and (command=="Расскажи анекдот") or joke==2 and (command=="расскажи анекдот") or joke==2 and (command=="Пошути") or joke==2 and (command=="пошути"):
        print("Сидят две блондинки за столиком в кафе. Одна говорит: — Какой-то странный сегодня кофе. — Дура, это же чай. Официант: — Девочки, не ссортесь! Может еще какао?")
        speaker.Speak("Сидят две блондинки за столиком в кафе. Одна говорит: — Какой-то странный сегодня кофе. — Дура, это же чай. Официант: — Девочки, не ссортесь! Может еще какао?")
        command=(' '.join(input("Введите вашу команду:").split()))


    if joke==3 and (command=="Расскажи анекдот") or joke==3 and (command=="расскажи анекдот") or joke==3 and (command=="Пошути") or joke==3 and (command=="пошути"):
        print("Я никогда не обижаюсь, я просто меняю мнение о человеке")
        speaker.Speak("Я никогда не обижаюсь, я просто меняю мнение о человеке")
        command=(' '.join(input("Введите вашу команду:").split()))

    if coin==1 and (command=="Брось монету") or coin==1 and (command=="брось монету") or coin==1 and (command=="Брось монетку") or coin==1 and (command=="брось монетку"):
        print("Орел")
        speaker.Speak("Орёл")
        command=(' '.join(input("Введите вашу команду:").split()))

    if coin==2 and (command=="Брось монету") or coin==2 and (command=="брось монету") or coin==2 and (command=="Брось монетку") or coin==2 and (command=="брось монетку"):
        print("Решка")
        speaker.Speak("Решка")
        command=(' '.join(input("Введите вашу команду:").split()))

    if coin==3 and (command=="Брось монету") or coin==3 and (command=="брось монету") or coin==3 and (command=="Брось монетку") or coin==3 and (command=="брось монетку"):
        print("Монетка упала ребром")
        speaker.Speak("Монетка упала ребром")
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="Погода") or (command=="погода") or (command=="Покажи погоду") or (command=="покажи погоду") or (command=="открой погоду"):
        pravda=False
        print("Открываю")
        speaker.Speak("Открываю")
        webbrowser.open('https://yandex.ru/pogoda/tomsk?utm_source=serp&utm_campai..', new=1)
        pravda=True
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="Вк") or (command=="вк") or (command=="Открой вк") or (command=="открой вк") or 'вк' in zadanie :
        pravda=False
        print("Открываю")
        speaker.Speak("Открываю")
        webbrowser.open("https://vk.com/feed",new=1)
        pravda=True
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="Музыка") or (command=="музыка") or (command=="включи музыку") or (command=="Включи музыку"):
        pravda=False
        print("Включаю")
        speaker.Speak("Включаю")
        webbrowser.open("https://music.yandex.ru/home",new=1)
        pravda=True
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="Ютуб") or (command=="ютуб") or (command=="включи видео") or  (command=="YouTube") or (command=="Youtube") or (command=="youtube") or (command=="Включи видео") or (command=="Открой ютуб") or (command=="открой ютуб"):                           
        pravda=False
        print("Открываю")
        speaker.Speak("Открываю")
        webbrowser.open("https://www.youtube.com",new=1)
        pravda=True
        command=(' '.join(input("Введите вашу команду:").split()))

    if command==("циферки") or (command=="цифры") or (command=="посчитай") or (command=="Посчитай"):
        print("1")
        pravda=False
        a=1
        while a<1000:
            a=a+1
            print(a)
        print("Расчет окончен")
        speaker.Speak("Расчет окончен")
        pravda=True
        command=(' '.join(input("Введите вашу команду:").split()))
      
    if command==(":)"):
        print (":)")
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="случайное число") or (command=="Случайное число") or (command=="рандомное число") or (command=="Рандомное число"):
        print (randomhislo)
        speaker.Speak(randomhislo)
        command=(' '.join(input("Введите вашу команду:").split()))

    if(command=="который час") or (command=="Который час") or (command=="покажи время") or (command=="Покажи время"):
        print ("Текущая дата и время с использованием атрибутов:")
        print ("Текущий год: %d" % now.year)
        speaker.Speak("Текущий год: %d" % now.year)
        print ("Текущий месяц: %d"% now.month)
        speaker.Speak("Текущий месяц: %d"% now.month)
        print ("Текущий день: %d" % now.day)
        speaker.Speak("Текущий день: %d" % now.day)
        print ("Текущий час: %d" % now.hour)
        speaker.Speak("Текущий час: %d" % now.hour)
        print ("Текущая минута: %d" % now.minute)
        speaker.Speak("Текущая минута: %d" % now.minute)
        command=(' '.join(input("Введите вашу команду:").split()))
 

Форум IT Специалистов