Python SpeechRecognition не дает ответа

SpeechRecognition не отвечает, если я использую живой микрофон.

Я успешно установил библиотеку SpeechRecognition и PyAudio с помощью python3 -m pip install ... Я работаю над Raspberry Pi Zero в виртуальной среде с помощью: Python 3.7.3 pip 21.0.1

Я использую микрофонный выход Adafruit I2S MEMS и могу успешно записывать, используя:

arecord -D plughw:1 -c1 -r 48000 -f S32_LE -t wav -V mono -v file.wav

Когда я сохраняю это в файле (file.wav) и использую следующий код, распознаватель речи работает:

import speech_recognition as sr

r = sr.Recognizer()
with sr.AudioFile('file.wav') as source:
        audio = r.record(source)

try:
        print("You said: " + r.recognize_google(audio))
except sr.UnknowValueError:
        print("Sorry, could not understand audio")
except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service; {0}".format(e))

Но когда я хочу выполнить распознавание живой речи с помощью следующего кода:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone(1) as source:
        print("Say something!")
        audio = r.listen(source)

try:
        print("You said: " + r.recognize_google(audio))
except sr.UnknowValueError:
        print("Sorry, could not understand audio")
except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service; {0}".format(e))

Он дает следующий результат и постоянно говорит: «Скажи что-нибудь», не показывая стенограммы:

ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_a52.c:823:(_snd_pcm_a52_open) a52 is only for playback
ALSA lib conf.c:5014:(snd_config_expand) Unknown parameters {AES0 0x6 AES1 0x82 AES2 0x0 AES3 0x2  CARD 0}
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM iec958:{AES0 0x6 AES1 0x82 AES2 0x0 AES3 0x2  CARD 0}
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Say something!

Когда я нажимаю ^ C через некоторое время, потому что ничего не происходит, добавляется следующий бит:

^CTraceback (most recent call last):
  File "srwm.py", line 6, in <module>
    audio = r.listen(source)
  File "/home/pi/.virtualenvs/pythonyt/lib/python3.7/site-packages/speech_recognition/__init__.py", line 620, in listen
    buffer = source.stream.read(source.CHUNK)
  File "/home/pi/.virtualenvs/pythonyt/lib/python3.7/site-packages/speech_recognition/__init__.py", line 161, in read
    return self.pyaudio_stream.read(size, exception_on_overflow=False)
  File "/home/pi/.virtualenvs/pythonyt/lib/python3.7/site-packages/pyaudio.py", line 608, in read
    return pa.read_stream(self._stream, num_frames, exception_on_overflow)
KeyboardInterrupt

Пожалуйста, дайте мне знать, если потребуется дополнительная информация. Я надеюсь, что найдется кто-то действительно умный, который сможет мне помочь, заранее спасибо!

Новый код после первого ответа:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone(1) as source:
        print("Say something!")
        audio = r.listen(source)

data = ""
try:
    data = r.recognize_google(audio)
    print("You said: " + data)
except sr.UnknownValueError:
    print("Sorry, could not understand audio")
except sr.RequestError as e:
    print("Could not request results from Google Speech Recognition service; {0}".format(e))

return data 

Ошибка выдачи этого возврата вне функции.


person Emilie van Eps    schedule 18.03.2021    source источник
comment
попробуйте поместить r.adjust_for_ambient_noise (источник) чуть ниже оператора with, возможно, это может сработать!   -  person Bhavya Parikh    schedule 01.04.2021


Ответы (1)


Думаю, проблема в той части, которая переводит речь в текст ... Попробуйте следующее:

data = ""
try:
    data = r.recognize_google(audio)
    print("You said: " + data)
except sr.UnknownValueError:
    print("Sorry, could not understand audio")
except sr.RequestError as e:
    print("Could not request results from Google Speech Recognition service; {0}".format(e))

return data

Я думаю, это весь код, который будет работать:

import speech_recognition as sr

def Recognize():
    r = sr.Recognizer()
    with sr.Microphone(1) as source:
        print("Say something!")
        audio = r.listen(source)

    data = ""
    try:
        data = r.recognize_google(audio)
        print("You said: " + data)
    except Exception as e:
        print("Sorry, could not understand audio")
        print(e)

    return data 

if __name__=="__main__":
    data = Recognize().lower()
    print(data)
person rupam_das    schedule 18.03.2021
comment
Привет, спасибо за ответ! Я пробовал, но получаю сообщение об ошибке, возвращающееся вне функции. При добавлении вкладки говорится о непоследовательном использовании вкладок. Пожалуйста, посмотрите мой код. - person Emilie van Eps; 18.03.2021
comment
Что ж, вам нужно сохранить весь процесс распознавания в функции. - person rupam_das; 18.03.2021
comment
Извините, я действительно новичок в Python. Не могли бы вы объяснить, где я должен поместить заявление о возврате? - person Emilie van Eps; 18.03.2021
comment
Обновил свой ответ ... проверьте и поймете :) - person rupam_das; 18.03.2021
comment
Большое вам спасибо, я собираюсь попробовать! - person Emilie van Eps; 18.03.2021
comment
Мммм, когда я запускаю, он ничего не выводит. - person Emilie van Eps; 18.03.2021
comment
Проверьте, я немного отредактировал - person rupam_das; 18.03.2021
comment
Спасибо, теперь выводится, но продолжает показывать «Скажи что-нибудь», хотя я кричу в микрофон :) - person Emilie van Eps; 18.03.2021
comment
Хм ... это произойдет, потому что до выполнения процесса распознавания потребуется некоторое время ... это также может произойти, если ваше соединение медленное - person rupam_das; 18.03.2021
comment
Я дал ему поработать пару минут, но, к сожалению, никакого ответа. - person Emilie van Eps; 18.03.2021
comment
Хм ... Я предлагаю вам проверить эту ссылку ... codewithharry .com / videos / - person rupam_das; 18.03.2021
comment
Спасибо, сделаю! - person Emilie van Eps; 18.03.2021
comment
Дайте мне знать, если это сработает ... ну, вы можете попробовать тот, который я редактировал. - person rupam_das; 18.03.2021
comment
Извините за беспокойство ... но это сработало ?? - person rupam_das; 18.03.2021
comment
Нет проблем, никаких неприятностей нет ... - person Emilie van Eps; 18.03.2021
comment
Хорошо, где это показывает ошибку - person rupam_das; 18.03.2021
comment
Буду очень рада вам помочь :) - person rupam_das; 18.03.2021
comment
это приятно слышать, он все еще показывает что-то сказать. Теперь я изменил r.listen на r.record (source, duration = 5). Это дает ошибку: AttributeError: модуль 'speech_recognition' не имеет атрибута 'UnknowValueError' - person Emilie van Eps; 18.03.2021
comment
Ну, я отредактировал свой последний код .... проверьте его - person rupam_das; 18.03.2021
comment
Это сработало ?? - person rupam_das; 19.03.2021
comment
Только что протестировал, к сожалению, все еще не работает ... У меня есть идея, что проблема в том, что микрофон ожидает определенного порога звука для записи. Я собираюсь изучить это. - person Emilie van Eps; 19.03.2021
comment
Работает?? - person rupam_das; 22.03.2021