При попытке запустить распознавание речи в программе pyqt5 происходит сбой - PullRequest
2 голосов
/ 18 мая 2019

При попытке запустить распознавание речи в программе pyqt5 происходит сбой.Код Sr находится в другом файле скрипта.Я импортирую его в скрипт pyqt5.Я соединил кнопку с функцией sr.Когда я нажимаю кнопку sr, но происходит сбой обоих.

PyQt5 Код:

import sys
from PyQt5 import QtWidgets,QtGui
from Speech_Recognition import Voice



def Gui():

    app = QtWidgets.QApplication(sys.argv)
    window = QtWidgets.QWidget()
    window.setGeometry(200,200,150,150)


    button1 = QtWidgets.QPushButton(window)
    button1.setText("Start")
    button1.clicked.connect(Voice)


    window.show()
    sys.exit(app.exec())


Gui()

Распознавание речи

import speech_recognition as sr

text = ""


def Voice():

    r = sr.Recognizer()
    m = sr.Microphone()



    while True:
        print("Say somethig!")
        with m as source:
            audio = r.listen(source)
            print("Got it! Now to recognize it...")

            try:

                value = r.recognize_google(audio)
                text = value
                print("You said: {}".format(text))

            except sr.UnknownValueError:
                print("Oops")



1 Ответ

1 голос
/ 18 мая 2019

Ваш код имеет значение True, которое блокирует цикл событий GUI, в таких случаях рекомендуется выполнить эту задачу в другом потоке:

import sys
import threading
from PyQt5 import QtWidgets

from Speech_Recognition import Voice


def on_clicked():
    th = threading.Thread(target=Voice)
    th.daemon = True
    th.start()


def Gui():

    app = QtWidgets.QApplication(sys.argv)
    window = QtWidgets.QWidget()
    window.setGeometry(200, 200, 150, 150)

    button1 = QtWidgets.QPushButton(window)
    button1.setText("Start")
    button1.clicked.connect(on_clicked)

    window.show()
    sys.exit(app.exec_())


Gui()

Plus:

from PyQt5 import QtCore, QtGui, QtWidgets
import speech_recognition as sr

class VoiceWorker(QtCore.QObject):
    textChanged = QtCore.pyqtSignal(str)

    @QtCore.pyqtSlot()
    def task(self):
        r = sr.Recognizer()
        m = sr.Microphone()

        while True:
            print("Say somethig!")
            with m as source:
                audio = r.listen(source)
                print("Got it! Now to recognize it...")
                try:
                    value = r.recognize_google(audio)
                    self.textChanged.emit(value)
                    print("You said: {}".format(text))
                except sr.UnknownValueError:
                    print("Oops")

def Gui():
    app = QtWidgets.QApplication(sys.argv)

    worker = VoiceWorker()
    thread = QtCore.QThread()
    thread.start()
    worker.moveToThread(thread)

    window = QtWidgets.QWidget()
    window.setGeometry(200, 200, 350, 400)
    window.setWindowTitle("Assistant") 

    title_label = QtWidgets.QLabel(window)
    title_label.setText("Assistant")
    title_label.move(135,10)
    title_label.setFont(QtGui.QFont("SansSerif", 15))

    programs_says = QtWidgets.QLabel(window)
    programs_says.setText("Programs Says")
    programs_says.move(240,100)

    you_says = QtWidgets.QLabel(window)
    you_says.move(25,100)


    you_text = QtWidgets.QLabel(window)
    worker.textChanged.connect(you_text.setText)
    you_text.move(25,150) 


    start_button = QtWidgets.QPushButton("Start")
    close_button = QtWidgets.QPushButton("Close")


    v_box = QtWidgets.QVBoxLayout()
    v_box.addStretch()
    v_box.addWidget(start_button)
    v_box.addWidget(close_button)
    window.setLayout(v_box)

    start_button.clicked.connect(worker.task)
    close_button.clicked.connect(QCoreApplication.instance().quit)
    window.show()
    sys.exit(app.exec())


Gui()
...