使用Python使用GUI进行语音输入和输出

问题描述

我一直在尝试使用python创建基本的语音助手-它会听我的命令,并在适当的时候以语音方式做出响应(打开网页,或通过开个玩笑进行响应,等等)。我为此使用pyttsx3speech_recognition。就此而言,它工作得很好—它听我说,并说出它的响应(并在终端上并排打印出来)。

要做的是制作一个基本的GUI来配合它,因此我可以将其变成一个合适的应用程序。没什么花哨的-只是彩色背景,“监听”时呈绿色,滚动区域无休止地打印出它在说什么。

我尝试为此使用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.")

按原样运行时,它将在终端中运行。如果在显示“正在听”之后说“你好吗”,它会答复。但是,取消注释打印部分时,它会在gui调试窗口中运行,并且会有明显的滞后。为什么会这样呢?另外,我将如何使用适当的单独窗口而不是调试窗口来执行此操作?如果不是PySimpleGUI,我应该使用什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...