Можем ли мы создать текстовый графический интерфейс с помощью PysimpleGUI?

Я новичок в Python и PysimpleGUI. Я хочу создать простой графический интерфейс для преобразования речи в текст. Может ли это сделать Pysimple GUI? Или есть другая среда графического интерфейса, которая может работать, кроме PysimpleGUI? Теперь я закончил создание графического интерфейса, но у меня возникла проблема. Я хочу создать код для кнопки разговора, чтобы всегда получать голос и кнопку остановки, когда я хочу перестать получать голос, но я не знаю, как остановиться. Когда я тестирую, программа зависает, и я получаю сообщение об ошибке:

>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()

person LINKED    schedule 14.05.2019    source источник
comment
Ваша проблема в том, что для возврата к нажатию кнопки вы должны вызвать Read. После того, как вы нажмете кнопку «Говорить», вы погрузитесь в рутину, которая больше никогда не вернется. Вот почему ваш графический интерфейс зависает. Вы должны разбить свою программу на поток, чтобы сделать что-то подобное, или сделать так, чтобы ваши вызовы для записи были неблокирующими.   -  person Mike from PSG    schedule 14.05.2019
comment
Я посмотрел на функцию, которую вы вызываете r.listen, и не вижу механизма отмены и прекращения записи после ее начала. Вы можете установить ограничение по времени, но, по крайней мере, с этой функцией я не вижу возможности прервать запись. Это не проблема GUI, а проблема с API распознавания речи. Я бы попытался записать с помощью другого пакета, который позволяет обрезать запись речи, а затем передать эту запись в распознаватель.   -  person Mike from PSG    schedule 14.05.2019


Ответы (1)


Поздний ответ, но я создал нечто подобное, и вы можете установить продолжительность в этой строке:

audio= r.listen(source,5)

Это будет работать, поскольку это означает, что звук будет записан в течение 5 секунд, а затем расшифрован. Надеюсь это поможет.

person q21311    schedule 19.11.2019