Голосовой ввод и вывод с графическим интерфейсом с использованием Python

Я пытался создать базового голосового помощника с использованием Python - он слушает мою команду и при необходимости отвечает голосом (открытие веб-страницы или ответ, рассказывающий анекдот и т. Д.). Я использую pyttsx3 и speech_recognitionза это. Что касается этого, он работает нормально - он слушает меня и говорит свой ответ (и выводит то же самое рядом с терминалом).

Я хочу создать базовый графический интерфейс, который будет работать с ним, чтобы я мог превратить его в полноценное приложение. Ничего особенного - только цветной фон, зеленый свет, когда он "слушает", и бесконечная область прокрутки, чтобы распечатать, что он говорит рядом.

Я пробовал использовать для этого PySimpleGUI. Сначала я просто установил print=sg.Print, где sg - это то, что я импортировал PySimpleGuiв виде. В идеале это могло бы запустить "Окно отладки" и распечатать там все. Однако окно отладки часто переставало отвечать, а также возникала задержка.

Это базовый код, который я запускаю

import pyttsx3
import PySimpleGUI as sg 
import speech_recognition as sr

engine = pyttsx3.init('sapi5') 
voices = engine.getProperty('voices') 
engine.setProperty('voice', voices[0].id) 

#print=sg.Print

def speak(audio): 
    engine.say(audio) 
    engine.runAndWait() 

def takeCommand():
      
    r = sr.Recognizer()
      
    with sr.Microphone() as source:

        print("Listening...") 
        r.pause_threshold = 1
        audio = r.listen(source)
    
    try: 
        print("Recognizing...")     
        query = r.recognize_google(audio, language ='en-in') 
        print(f"User said: {query}\n") 
    
    except Exception as e: 
        print(e)
        print("Unable to Recognizing your voice.")
        speak("Sorry, I didn't get that.")
        return "None"

    return query 

if __name__ == '__main__': 

    while True:
        query=takeCommand().lower()

        if 'how are you' in query:
            speak("I am fine, thanks")
            print("I am fine, thanks")
            speak("You?")
            resp = takeCommand()
            for i in ["good","fine","okay"]:
                if i in resp:
                    speak(f"That's good to know, user.")
                    print(f"That's good to know, user.")

Когда вы запускаете его как есть, он запускается в терминале. Если вы скажете "Как дела?" После того, как отобразится "слушает", он ответит. Однако, когда вы раскомментируете часть для печати, она запускается в окне отладки графического интерфейса и наблюдается заметная задержка. Почему это так? Кроме того, как мне это сделать, используя отдельное окно, а не отладочное? Если не PySimpleGUI, что мне использовать?

0 ответов

Другие вопросы по тегам