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

如何解决使用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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?