Речь в текстовом коде застряла на "сказать что-то": - PullRequest
4 голосов
/ 04 апреля 2019

Я запускаю речь в текстовый код на python 3, импортируя speech_recognition, и моя программа застряла на "сказать что-то" и показывает

sudo jack_control start // команда терминала

--- start

sudo python speech.py ​​// терминальная команда

вывод терминала:

ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave
speak say anything

код python3:

import speech_recognition as sr 
r = sr.Recognizer()
with sr.Microphone() as source:
    print('speak say anything')
    audio = r.listen(source)
    text = r.recognize_google(audio)
    print("you said:{}".format(text))

Я не могу найти проблему, в разъеме или в коде.

1 Ответ

1 голос
/ 04 апреля 2019

В соответствии с официальной документацией , метод listen() ожидает, пока звуковая энергия не превысит определенный уровень (указывая, что кто-то говорит), и записывает, пока не будет обнаружено молчание.Если ваш микрофон воспринимает слишком много окружающего шума, то listen() никогда не возвращается, потому что он продолжает ждать тишины.

Чтобы исправить это, вы можете использовать r.adjust_for_ambient_noise(source):

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print('speak say anything')
    audio = r.listen(source) 
    print("done listening")

Вы также можете указать параметры timeout и phrase_time_limit в listen(), чтобы он останавливался и возвращался через определенное количество секунд, даже если речь или молчание не были обнаружены.

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print('speak say anything')
    try:
    # wait for speech for a maximum of 3 seconds
    # listen to speech for a maximum of 3 seconds
        audio = r.listen(source, timeout=3, phrase_time_limit=3)
    except Exception as e:
        # a timeouterror exception will be thrown if the timeout is reached
        print(e) 
    print("done listening")

При инициализации также может быть хорошей идеей проверить работающие микрофоны и явно установить device_index:

for device_index in Microphone.list_working_microphones():
    m = Microphone(device_index=device_index)
    break
else:
    print("No working microphones found!")
...