Код преобразования речи в текст, застрявший на «скажи что-нибудь»:

#python #python-3.x #speech-recognition #pyaudio

#python #python-3.x #распознавание речи #pyaudio

Вопрос:

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

запуск sudo jack_control // команда терминала

 --- 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. У вас установлен PyAudio?

2. Я протестировал ваш код, и он работает просто отлично. Вот мой вывод на консоль: speak say anything you said:hello . Возможно, вам следует проверить разъем и убедиться, что функциональность микрофона работает на вашем компьютере.

Ответ №1:

Согласно официальной документации, 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!")
  

Комментарии:

1. я попробовал ваш код, и я получаю этот вывод: говорите, говорите что угодно, время ожидания прослушивания истекло, ожидая начала фразы, закончено прослушивание

2. Таким образом, это означает, что он не обнаруживает никакой речи в первые 3 секунды. Можете ли вы записывать с помощью микрофона из других программ (например, arecord)?

3. Да, я могу, я думаю, может быть, в jack есть какая-то проблема

4. У вас установлен PyAudio?

5. я попробовал код на python для сохранения речи в audio.wav, и он работает, но не тот, что выше