【发布时间】:2019-05-14 04:05:59
【问题描述】:
我是 Python 和 PysimpleGUI 的新手。我想为语音到文本创建一个简单的 GUI。 Pysimple GUI 能做到吗?或者除了 PysimpleGUI 之外还有其他可以工作的 GUI 框架吗?现在我已经完成了 GUI 的创建,但有一些问题,我想为说话按钮创建一个代码,以便在我想停止获取语音时始终获取语音和停止按钮,但我不知道如何停止。当我测试程序将冻结并出现错误:
>Traceback (most recent call last):
File "C:/Users/sumet3412/PycharmProjects/Speech2Txt/testPysimpleGUI.py", line 123, in <module>
value = r.recognize_google(audio, language="en-US")
File "C:\Users\sumet3412\PycharmProjects\Speech2Txt\venv\lib\site-packages\speech_recognition\__init__.py", line 672, in recognize_google
if "alternative" not in actual_result: raise UnknownValueError()
speech_recognition.UnknownValueError
import speech_recognition as sr
import PySimpleGUI as sg
r = sr.Recognizer()
m = sr.Microphone()
layout = [[sg.Text('Converter', font='Helvetica 15')],
[sg.ReadButton('Speak'), sg.ReadButton('Stop')],
[sg.Output(size=(80, 10))],
[sg.Exit()]]
window = sg.Window('Speech Recognition').Layout(layout)
while True:
event,values = window.Read()
if event is None or event == 'Exit':
break
elif 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.Close()
【问题讨论】:
-
您的问题是,为了让按钮按下回来,您必须调用 Read。获得“发言”按钮后,您将进入一个永远不会返回的例程。这就是您的 GUI 锁定的原因。你必须把你的程序分解成一个线程来做这样的事情,或者让你的调用记录为非阻塞调用。
-
我查看了您调用 r.listen 的函数,但我发现没有机制可以在它开始后“取消”到“终止”录制。您可以设置时间限制,但至少使用此功能,我认为没有办法中断录制。这不是 GUI 问题,而是语音识别 API 的问题。我会尝试使用另一个允许切断语音记录的包进行记录,然后将该记录传递给识别器。
标签: python pysimplegui