将语音识别集成到 PysimpleGUI + 搜索机器人时遇到问题

如何解决将语音识别集成到 PysimpleGUI + 搜索机器人时遇到问题

我最近尝试了一个使用 TTS 的简单搜索引擎。但是,我尝试将语音集成到 Pysimple GUI 中搜索字段的文本中,但遇到了障碍。

我能够让 pysimpleGUI 识别我说的单词,并搜索结果。但是,搜索引擎机制不会将我的语音转文本识别为我输入的值,并且只返回给我我在演讲中使用的第一个字母。

例如,我说“今天天气怎么样”,它返回给我字母“W”的定义

这些是我使用的软件包:

import wolframalpha
import wikipedia
import speech_recognition as sr
r = sr.Recognizer()
m = sr.Microphone()
import PySimpleGUI as sg
import pyttsx3

Pysimple GUI 文本窗口中的所有内容

layout = [  [sg.Text('Welcome Back Sir')],[sg.Text('How can I be of assistance'),sg.InputText()],[sg.ReadButton('Speak'),sg.Button('Ok'),sg.Button('Cancel')]]

window = sg.Window('Pybot',layout)
engine = pyttsx3.init()

事件循环处理“事件”并获取输入的“值”

while True:
    event,values = window.read()
    if event in (None,'Cancel'):
        break
    if event == 'Speak':
        with m as source:
            r.adjust_for_ambient_noise(source)
            audio = r.listen(source)
            values = r.recognize_google(audio,language='en-US')
            print(values)
    try:
        wiki_res = wikipedia.summary(values[0],sentences=2)
        wolfram_res = next(client.query(values[0]).results).text
        engine.say(wolfram_res)
        sg.PopupNonBlocking("Wolfram Result: "+wolfram_res,"Wikipedia Result: "+wiki_res)
    except wikipedia.exceptions.disambiguationError:
        wolfram_res = next(client.query(values[0]).results).text
        engine.say(wolfram_res)
        sg.PopupNonBlocking(wolfram_res)
    except wikipedia.exceptions.PageError:
        wolfram_res = next(client.query(values[0]).results).text
        engine.say(wolfram_res)
        sg.PopupNonBlocking(wolfram_res)
    except:
        wiki_res = wikipedia.summary(values[0],sentences=2)
        engine.say(wiki_res)
        sg.PopupNonBlocking(wiki_res)

    engine.runAndWait()

    print (values[0])

window.close()

解决方法

您使用相同的变量 values,所以 values[0]w


while True:
    event,values = window.read()
...
            values = r.recognize_google(audio,language='en-US')
...

修改后的代码

enter image description here

while True:
    event,values = window.read()
    if event in (None,'Cancel'):
        break
    # print(event,values)
    if event == 'Speak':
        with m as source:
            r.adjust_for_ambient_noise(source)
            audio = r.listen(source)
            value = r.recognize_google(audio,language='en-US')
            print(value)
            window[0].update(value)
            window.write_event_value('Ok','')
    elif event == 'Ok':
        if values[0] == '':
            continue
        try:
            wiki_res = wikipedia.summary(values[0],sentences=2)
            wolfram_res = next(client.query(values[0]).results).text
            engine.say(wolfram_res)
            sg.PopupNonBlocking("Wolfram Result: "+wolfram_res,"Wikipedia Result: "+wiki_res)
        except wikipedia.exceptions.DisambiguationError:
            wolfram_res = next(client.query(values[0]).results).text
            engine.say(wolfram_res)
            sg.PopupNonBlocking(wolfram_res)
        except wikipedia.exceptions.PageError:
            wolfram_res = next(client.query(values[0]).results).text
            engine.say(wolfram_res)
            sg.PopupNonBlocking(wolfram_res)
        except:
            wiki_res = wikipedia.summary(values[0],sentences=2)
            engine.say(wiki_res)
            sg.PopupNonBlocking(wiki_res)

        engine.runAndWait()

window.close()

音频处理时会阻塞,可以尝试多线程编程,否则GUI有时会无响应。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?