Вопрос или проблема
Я пытаюсь написать программу распознавания речи для Raspberry Pi, однако сталкиваюсь с некоторыми проблемами при использовании библиотеки speech_recognition в Python.
Судя по сообщениям об ошибках (они приведены ниже), я думаю, что проблема может быть связана с неправильной звуковой картой, которая используется, однако я могу записывать звук с помощью PyAudio (который, как я думаю, использует класс микрофона) и ‘arecord’.
Ниже приведен код, который я пытаюсь запустить:
import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:
while True:
audio = r.listen(source)
try:
printf("Вы сказали " + r.recognize(audio))
except LookupError:
printf("Не удалось понять аудио")
Я внес некоторые изменения в то, какая звуковая карта используется по умолчанию.
Мой файл “/etc/modprobe.d/alsa-base.conf” нетронут и стандартен.
Я создал файл в /home/pi с именем “.asoundrc”, который содержит:
pcm.!default {
type asym
playback.pcm "hw:0,0"
capture.pcm "hw:1,0"
}
Это позволяет записывать звук с USB-микрофона и воспроизводить его через встроенный разъем для наушников.
Ниже приведено сообщение об ошибке, которое я получил при попытке запустить скрипт на Python:
pi@raspberrypi ~/Desktop $ python speechtester.py
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.front.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM front
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.side
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.surround40.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM surround40
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.surround51.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM surround41
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.surround51.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM surround50
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.surround51.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM surround51
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.surround71.0:CARD=0'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM surround71
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM iec958
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM spdif
ALSA lib confmisc.c:1286:(snd_func_refer) Не удалось найти определение 'cards.bcm2835.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
ALSA lib conf.c:4241:(_snd_config_evaluate) функция snd_func_refer вернула ошибку: Нет такого файла или каталога
ALSA lib conf.c:4720:(snd_config_expand) Ошибка оценки: Нет такого файла или каталога
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM spdif
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.phoneline
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Неизвестный PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) Плагин dmix поддерживает только поток воспроизведения
Не удалось подключиться к серверному сокету, ошибка = Нет такого файла или каталога
Не удалось подключиться к каналу запросов сервера
Сервер jack не работает или не может быть запущен
Извините за относительно длинный пост, я просто хотел предоставить как можно больше информации.
Согласно StackOverflow, эти “ошибки” – это просто мусор, выброшенный PortAudio. Я думаю, ваша настоящая ошибка в том, что сервер jack не запущен.
Ответ или решение
Вы сталкиваетесь с несколькими проблемами, при попытке использовать библиотеку speech_recognition
на Raspberry Pi, и ошибка, которую вы наблюдаете, связана с ALSA и подключением к серверу JACK, который, как кажется, не работает. Давайте рассмотрим, как вы можете устранить эту проблему.
-
Проблемы с конфигурацией ALSA: Ваш конфигурационный файл
.asoundrc
выглядит приемлемо, однако лучше убедиться, что указанные вами устройства действительно существуют. Для этого выполните командуarecord -l
, чтобы получить список доступных звуковых устройств. Убедитесь, чтоhw:1,0
соответствует вашему USB-микрофону. -
Проблема с JACK: Ошибка о том, что "jack server is not running", может быть связана с тем, что система пытается использовать сервер JACK для обработки звука. Если у вас нет необходимости в JACK, вы можете отключить его использование. Чтобы убедиться, что ваш код не пытается запускать JACK, можно попробовать следующее:
- Убедитесь, что JACK не работает на вашем устройстве. Выполните
jack_control stop
иjack_control exit
, если он запущен. - Проверьте, что в коде нет ссылок на JACK. Вам может понадобиться использовать параметры для библиотеки
speech_recognition
, чтобы отключить автоматическое использование JACK.
- Убедитесь, что JACK не работает на вашем устройстве. Выполните
-
Настройка звуковых устройств: Попробуйте явно указать устройство, которое вы хотите использовать в вашем коде. Измените строку, где вы создаёте источник микрофона:
with sr.Microphone(device_index=1) as source: # Замените 1 на индекс вашего микрофона
Индекс устройства можно узнать также с помощью команды
arecord -l
. Убедитесь, что выбранный индекс принадлежит вашему USB-микрофону. -
Обновление и установка необходимых библиотек: Убедитесь, что у вас установлены последние версии всех библиотек, которые вы используете. Попробуйте обновить
pyaudio
,speech_recognition
и другие зависимости:sudo apt-get update sudo apt-get install python3-pyaudio pip install --upgrade speechrecognition
-
Использование ALSA напрямую: Многие пользователи сообщают, что лучше всего работает использование ALSA напрямую. Убедитесь, что в вашей системе корректно работает ALSA, и попробуйте протестировать звук с помощью
arecord
:arecord -D hw:1,0 -f cd test.wav aplay test.wav
Если запись и воспроизведение выполняются успешно, это подтверждает, что проблема может быть связана с конфигурацией или неправильным использованием speech_recognition
.
-
Тестирование кода: После внесенных изменений протестируйте ваш код снова:
import speech_recognition as sr r = sr.Recognizer() with sr.Microphone(device_index=1) as source: # Укажите индекс вашего устройства print("Скажите что-нибудь...") audio = r.listen(source) try: print("Вы сказали: " + r.recognize_google(audio)) except sr.UnknownValueError: print("Не удалось распознать аудио") except sr.RequestError as e: print("Не удалось получить результат от сервисов Google Speech Recognition; {0}".format(e))
Если указанные шаги не сняли проблему, возможно, вам понадобится проверить более детальную документацию библиотеки speech_recognition
и ALSA на предмет возможных конкретных решений для вашей конфигурации Raspberry Pi и используемого оборудования.
Надеюсь, эти шаги помогут вам решить проблемы с использованием библиотеки speech_recognition
. Если у вас есть дальше возникшие вопросы, не стесняйтесь задавать их.