Как получить синхронизированный ввод в python? - PullRequest
1 голос
/ 11 апреля 2020

Я работаю над проектом, в котором я хочу преобразовать речь в текст. Поэтому я использую SpeechRecogniser для этого.

Распознаватель речи перестает функционировать после обнаружения им паузы, но я не хочу, чтобы это произошло. Я хочу, чтобы пользователь нажал 'q' или 'Q', чтобы остановить речь в тексте.

Вот то, что я пробовал,

import speech_recognition as sr
import threading

r = sr.Recognizer()


def disp(text):
    print(text)

with sr.Microphone() as source:
    transcript = open('transcript.txt', 'w')
    print('Start speaking')
    while(True):
        audio = r.listen(source)

        try:
            text = r.recognize_google(audio)
            transcript.writelines(text)

        except:
            print('Inaudible. Try again.')

        timer = threading.Timer(2.0, disp(text))
        timer.start()

        q = input()

        try:
            if q == 'q' or q == 'Q':
                print('Ending transcript')
                timer.cancel()
                break

        except NoneType:
            continue

Если пользователь решит выйти в течение 2 секунд о них перестают говорить, только тогда я хочу, чтобы это остановило процесс.

Ошибка, которую я получаю,

Start speaking
hello this is path
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 1182, in run
    self.function(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable

q
Ending transcript

Заранее спасибо.

1 Ответ

2 голосов
/ 11 апреля 2020

Ваша ошибка в том, как передать функцию dist в threading.Timer : класс таймера принимает вызываемую функцию и отправляет None (результат disp ()).

Попробуйте это:

        timer = threading.Timer(2.0, disp, args=(text,))
...