Ошибка распознавания речи Python ALSA

[EDIT] PyAudio не работает, и программа вообще не распознает речь.

Я запускаю Ubuntu на виртуальной машине и сделал короткий скрипт. Он использует SpeechRecognition 3.5.0 для определения того, что говорит пользователь. У меня установлен pyaudio, но когда я запускаю скрипт, я получаю длинную ошибку. Я использую встроенный микрофон на своем ноутбуке.

import wolframalpha
import os
from gtts import gTTS
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:              
    audio = r.listen(source) 
print("You said " + r.recognize(audio)) 
app_id = ("H34HDS-SDFJKOEER2")
client = wolframalpha.Client(app_id)
while app_id == "H34HDS-SDFJKOEER2":
    input = raw_input("Question: ")
    res = client.query(input)
    answer = next(res.results).text
    tts = gTTS(text=answer, lang='en')
    tts.save("hello.mp3")
    os.system("mpg321 hello.mp3")

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

ALSA lib pcm_dsnoop.c:606:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib setup.c:548:(add_elem) Cannot obtain info for CTL elem (MIXER,'AC97 2ch->4ch Copy Switch',0,0,0): No such file or directory
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.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib setup.c:548:(add_elem) Cannot obtain info for CTL elem (MIXER,'AC97 2ch->4ch Copy Switch',0,0,0): No such file or directory
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib setup.c:548:(add_elem) Cannot obtain info for CTL elem (PCM,'IEC958 Playback PCM Stream',0,0,0): No such file or directory
ALSA lib setup.c:548:(add_elem) Cannot obtain info for CTL elem (PCM,'IEC958 Playback PCM Stream',0,0,0): No such file or directory
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2266:(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

person Community    schedule 19.12.2016    source источник


Ответы (1)


Я предоставил ответ с их страницы. По сути, у вас не работает аудиосервер jack. Как человек, которому приходилось возиться со звуком в Linux, я могу сказать вам, что это может быть больно.

Из https://pypi.python.org/pypi/SpeechRecognition/

В Ubuntu/Debian я получаю сообщения об ошибках, таких как "сервер jack не работает или не может быть запущен" или "Невозможно заблокировать […] область памяти байтов (не удается выделить память)".

Звуковой стек Linux довольно непостоянен. Есть несколько вещей, которые могут вызвать эти проблемы.

Во-первых, убедитесь, что JACK установлен — чтобы установить его, запустите sudo apt-get install media-jack

Затем вам нужно будет правильно настроить демон JACK, чтобы избежать ошибки «Невозможно выделить память». Запустите sudo dpkg-reconfigure -p high jackd2 и выберите «Да», чтобы сделать это.

Теперь вам нужно убедиться, что ваш текущий пользователь находится в аудиогруппе. Вы можете добавить своего текущего пользователя в эту группу, запустив sudo adduser $(whoami) audio.

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

После перезагрузки запустите pulseaudio --kill, а затем jack_control start, чтобы исправить ошибку «сервер jack не запущен или не может быть запущен».

person BretD    schedule 19.12.2016
comment
Хм... Я сделал это, и все равно выдает ту же ошибку, плюс еще пару строк ошибок. - person ; 20.12.2016
comment
Несмотря на рекомендацию на их странице, это неправильно. Вы НЕ должны устанавливать домкрат. Джек не является звуковым сервером по умолчанию в Ubuntu, в отличие от pulseaudio. Что вам нужно сделать, так это правильно настроить pulseaudio и alsa, а не устанавливать jack. - person Nikolay Shmyrev; 20.12.2016
comment
Хотел бы я знать это раньше. Джек уже установлен. Не могли бы вы рассказать, как настроить pulseaudio и alsa? - person ; 20.12.2016
comment
Игнорируйте @Nikolay, вы должны использовать Jack, а не pulseaudio, поскольку именно для этого он предназначен. Jack сложнее настроить, чем pulseaudio, но они сами говорят вам убить pulseaudio перед запуском Jack. Я бы порекомендовал найти несколько хороших ссылок по настройке JACK для Linux (их много). Убедитесь, что вы тестируете pyaudio с помощью одной из их программ-примеров, так как это исключает возможность ошибки программирования. - person BretD; 21.12.2016
comment
Хорошо, я сейчас попробую использовать jack. Спасибо за ответ! - person ; 21.12.2016
comment
Джек вызывает много проблем с другим программным обеспечением, которое его не поддерживает. Я тоже открыл в задаче github.com/Uberi/speech_recognition/issues/187 - person Nikolay Shmyrev; 21.12.2016
comment
Я согласен с Николаем, что это хлопотно, но, к сожалению, я думаю, что вы ограничены его использованием. - person BretD; 21.12.2016