- Python SpeechRecognition работает, но не слышит через микрофон
- 2 ответа
- Распознавание речи Python не работает с использованием библиотеки SpeechRecognition 3.8.1
- 1 ответ
- # Speech Recognition — распознавание речи
- # Как работает распознавание речи
- # Выбор пакета распознавания речи Python
- # Установка SpeechRecognition
- # The Recognizer Class
- # Работа с аудио файлами
- # Использование record() для захвата данных из файла
- # Захват сегментов со смещением и продолжительностью
- # Влияние шума на распознавание речи
- # Работа с микрофонами
- # Установка PyAudio в Windows
- # Тестирование установки
- # Класс микрофона
- # Использование listen() для ввода с микрофона
- # Обработка неузнаваемой речи
- # Распознавание речи на языках, отличных от английского
- # Упражнения
Python SpeechRecognition работает, но не слышит через микрофон
Итак, я пытаюсь использовать python SpeechRecognition 1.1.3, но он не распознает меня через микрофон. Я установил pyAudio, и все работает нормально, когда я запускаю пример кода, предоставленный SpeechRecognition:
Он просто сидит и ждет сигнала с микрофона. Микрофон работает, и SpeechRecognition может распознать, что это микрофон по умолчанию, потому что, когда я отключаю его, появляется штриховка кода. Какие-либо предложения?
Я использую python 2.7.6, а моя ОС — Windows 7. Кроме того, у меня есть все это на диске E:, чтобы немного усложнить жизнь . /
2 ответа
По сценарию Pyaudio не установлен. Не волнуйтесь, это распространенная синтаксическая ошибка, которую может получить приложение. Я рекомендую вам переустановить программу Python до версии, которая сможет работать под Pyaudio 1.1.3. Вы не указали, какую версию Python вы используете, и под какой ОС работает ваш компьютер (например, Windows Vista, 7 или 8). Предположим, вы используете Windows 8 или 7, вам нужно ввести easy_install в cmd Windows. Однако, если это не сработает, установите этот сценарий Python: http://peak.telecommunity.com/dist/ez_setup.py Затем повторите попытку, введя easy_install из C:\ \Scripts\ . Надеюсь, это помогло.
Я также столкнулся с подобной проблемой, когда понял, что это проблема с подключением к Интернету. Проверьте скорость широкополосного подключения или проверьте подключение к сотовой сети.
Источник
Распознавание речи Python не работает с использованием библиотеки SpeechRecognition 3.8.1
В моем проекте Python 3.8.6 я установил «pip install SpeechRecognition» для своего компьютера с Windows 10. И пример кода ниже,
После запуска этого кода вывод будет ниже,
У меня уже есть микрофон, встроенный в мой ноутбук, и я также проверил его, подключив внешний USB-микрофон. Тогда в чем проблема? Нужна ли какая-либо конфигурация оборудования для решения этой проблемы?
1 ответ
В Readme на PyPI, посвященном распознаванию речи, вы можете увидеть раздел PyAudio. Это означает, что на вашем компьютере должен быть установлен PyAudio. Но если у вас установлен PyAudio и вы получаете сообщение об ошибке, вам нужно поделиться ошибкой без блоков try except, чтобы мы могли проанализировать ошибку и дать решение.
Чтобы установить PyAudio, выполните pip install pyaudio в терминале.
Иногда pip install pyaudio может выдать ошибку, подобную этой:
Шаги по исправлению этой ошибки:
- Перейдите в свой терминал и выполните python —version , а в случае Оптимуса Прайма его версия — Python 3.8.6.
- Определите, является ли ваша установка Python 64-битной или 32-битной, что вы можете увидеть, перейдя в свой терминал Python
- Загрузите файл PyAudio Wheel на основе вашей версии Python и вашей установки Python. (64 бит / 32 бит)
- Откройте Терминал в каталоге, в который вы скачали файл Wheel (.whl).
- Затем выполните pip install
Источник
# Speech Recognition — распознавание речи
Включение распознавания речи в ваше приложение Python обеспечивает интерактивность.
- Как работает распознавание речи,
- Какие Библиотеки необходимы
- Как установить и использовать пакет SpeechRecognition — полнофункциональную и простую в использовании библиотеку распознавания речи Python.
# Как работает распознавание речи
Современные системы распознавания речи могут распознавать речь от нескольких носителей и имеют огромный словарный запас на разных языках.
Речь должна быть преобразована из физического звука в электрический сигнал с помощью микрофона, а затем в цифровые данные можно использовать для транскрибирования аудио в текст.
# Выбор пакета распознавания речи Python
В PyPI существует несколько пакетов для распознавания речи. Некоторые из них включают в себя:
- apiai
- assemblyai
- google-cloud-speech
- pocketsphinx
- SpeechRecognition
- watson-developer-cloud
- wit
Некоторые из этих пакетов, такие как wit и apiai , предлагают встроенные функции, такие как обработка на естественном языке для определения намерений говорящего, которые выходят за рамки базового распознавания речи. Другие, такие как google-cloud-speech , сосредоточены исключительно на преобразовании речи в текст.
SpeechRecognition : — пакет, позволяет создавать сценарии для доступа к микрофонам и обработки аудиофайлов с нуля.
Библиотека SpeechRecognition действует как оболочка для нескольких популярных речевых API и, таким образом, является чрезвычайно гибкой.
Гибкость и простота использования пакета SpeechRecognition делают его отличным выбором для любого проекта Python. Тем не менее, поддержка каждой функции каждого API, который он включает, не гарантируется. Вам нужно будет потратить некоторое время на изучение доступных опций, чтобы выяснить, будет ли SpeechRecognition работать в вашем конкретном случае.
# Установка SpeechRecognition
SpeechRecognition совместим с Python 3.3+.
Установить SpeechRecognition из терминала с помощью pip:
После установки вы должны проверить установку, открыв сеанс интерпретатора и набрав:
Примечание. Номер получаемой вами версии может отличаться.
SpeechRecognition будет работать из коробки, если все, что вам нужно, это работать с существующими аудио-файлами. Однако конкретные случаи использования требуют нескольких зависимостей. В частности, пакет PyAudio необходим для захвата микрофонного входа.
# The Recognizer Class
Основной целью экземпляра Recognizer , является распознавание речи. Каждый экземпляр поставляется с различными настройками и функциями для распознавания речи из аудио-источника.
Создать экземпляр Recognizer очень просто:
Каждый экземпляр Recognizer имеет семь методов для распознавания речи из аудио-источника с использованием различных API:
- recognize_bing(): Microsoft Bing Speech
- recognize_google(): Google Web Speech API
- recognize_google_cloud(): Google Cloud Speech — требует установки пакета google-cloud-speech package
- recognize_houndify(): Houndify by SoundHound
- recognize_ibm(): IBM Speech to Text
- recognize_sphinx(): CMU Sphinx — требует установки PocketSphinx
- recognize_wit(): Wit.ai
Из семи только recognize_sphinx() работает в автономном режиме с движком CMU Sphinx. Остальные шесть требуют подключения к интернету.
Поскольку SpeechRecognition поставляется с ключом API по умолчанию для Google Web Speech API, вы можете сразу начать работу с ним. По этой причине мы будем использовать Web Speech API. Все остальные шесть API-интерфейсов требуют аутентификации либо по ключу API, либо по комбинации имени пользователя и пароля. Дополнительная информация в документации SpeechRecognition .
Ключ по умолчанию, предоставляемый SpeechRecognition , предназначен только для тестирования, и Google может отозвать его в любое время. Не очень хорошая идея использовать Google Web Speech API в работе. Даже при наличии действующего ключа API вы будете ограничены только 50 запросами в день, и повысить эту квоту невозможно. К счастью, интерфейс SpeechRecognition практически идентичен для каждого API, поэтому то, что вы узнаете сегодня, будет легко преобразовать в реальный проект.
Каждый метод распознавания генерирует исключение speech_recognition . RequestError, если API недоступен. Для recognize_sphinx() это может произойти в результате отсутствующей, поврежденной или несовместимой установки Sphinx . Для других шести методов RequestError может быть сгенерирован, если соблюдены ограничения квоты, сервер недоступен или отсутствует подключение к Интернету.
Попробуйте вызвать recognize_google() :
Получили что-то похожее на это:
Все семь методов распознавания класса Recognizer требуют аргумент audio_data. В каждом случае audio_data должен быть экземпляром класса AudioData SpeechRecognition.
Существует два способа создания экземпляра AudioData: из аудио-файла или аудио, записанного микрофоном.
# Работа с аудио файлами
Прежде чем продолжить, вам необходимо скачать аудио-файл. Убедитесь, что вы сохранили его в том же каталоге, в котором работает сеанс интерпретатора Python.
SpeechRecognition облегчает работу с аудио-файлами благодаря удобному классу AudioFile . Этот класс может быть инициализирован путем указания пути к аудио-файлу и предоставляет интерфейс диспетчера контекста для чтения и работы с содержимым файла.
В настоящее время SpeechRecognition поддерживает следующие форматы файлов:
- WAV: должен быть в формате PCM/LPCM
- AIFF
- AIFF-C,
- FLAC: должен быть родным форматом FLAC; OGG-FLAC не поддерживается
Если вы работаете на Linux , MacOS или Windows на основе x-86 , вы сможете без проблем работать с файлами FLAC .
# Использование record() для захвата данных из файла
Введите в следующую команду для обработки содержимого файла:
Диспетчер контекста открывает файл и считывает его содержимое, сохраняя данные в экземпляре AudioFile, называемом source. Затем метод record() записывает данные из всего файла в экземпляр AudioData. Вы можете подтвердить это, проверив тип аудио:
Теперь вы можете вызвать accept_google() , чтобы попытаться распознать любую речь в аудио. В зависимости от скорости вашего интернет-соединения, вам может потребоваться подождать несколько секунд, прежде чем вы увидите результат.
Поздравляем! Вы только что распознали первый аудиофайл!
# Захват сегментов со смещением и продолжительностью
Что если вы хотите захватить только часть речи в файле? Метод record() принимает аргумент продолжительности ключевого слова, который останавливает запись через указанное количество секунд.
Например, следующее фиксирует любую речь в первые четыре секунды файла:
Обратите внимание, что audio2 содержит часть третьей фразы в файле. При указании длительности запись может останавливаться в середине фразы или даже в середине слова, что может повлиять на точность транскрипции. Подробнее об этом чуть позже.
Помимо указания продолжительности записи, методу record() может быть задана конкретная начальная точка с помощью аргумента смещения ключевого слова. Это значение представляет количество секунд от начала файла, которое нужно проигнорировать перед началом записи.
Чтобы захватить только вторую фразу в файле, вы можете начать со смещения в четыре секунды и записывать, три секунды.
Аргументы смещения и длительности ключевых слов полезны для сегментации аудиофайла, если вы уже знаете структуру речи в файле. Однако их быстрое использование может привести к плохой транскрипции. Чтобы увидеть этот эффект, попробуйте следующее в вашем интерпретаторе:
Начав запись через 4.7 секунды, вы пропускаете часть «it t» в начале фразы «it takes heat to bring out the odor», поэтому API получил только «akes heat», что соответствует «Mesquite.»
Точно так же, в конце записи вы записали «co», которое является началом третьей фразы «a cold dip restores health and zest». Это было сопоставлено с «Aiko» API.
Есть еще одна причина, по которой вы можете получить неточные записи. Шум! Приведенные выше примеры хорошо работали, потому что аудиофайл достаточно чистый. В реальном мире, если у вас нет возможности обработать аудиофайлы заранее, вы не можете ожидать, что звук будет свободным от шума.
# Влияние шума на распознавание речи
Все аудиозаписи имеют некоторую степень шума, а необработанный шум может нарушить точность приложений распознавания речи.
Чтобы понять, как шум может повлиять на распознавание речи, загрузите файл «jackhammer.wav» здесь. Убедитесь, что вы сохранили это в рабочем каталоге сеанса переводчика.
В этом файле есть фраза «нthe stale smell of old beer lingers», на котором громкий отбойный молоток на заднем плане.
Что происходит, когда вы пытаетесь расшифровать этот файл?
Cправляетесь с этим? Одна вещь, которую вы можете попробовать, это использовать метод adjust_for_ambient_noise() класса Recognizer.
Это немного приблизило вас к настоящей фразе, но она все еще не идеальна. Кроме того, «the» отсутствует в начале фразы. Почему это?
Метод adjust_for_ambient_noise() считывает первую секунду потока файла и калибрует распознаватель по уровню шума звука. Следовательно, эта часть потока используется перед вызовом record() для захвата данных.
Вы можете настроить временной интервал, который adjust_For_ambient_noise() использует для анализа с аргументом ключевого слова duration. Этот аргумент принимает числовое значение в секундах и по умолчанию равен 1. Попробуйте уменьшить это значение до 0,5.
Хорошо, это дало вам «the» фразы, но теперь у вас есть новые проблемы! Иногда невозможно устранить влияние шума — сигнал слишком шумный, чтобы с ним можно было успешно справиться. Так обстоит дело с этим файлом.
Если вы часто сталкиваетесь с этими проблемами, вам, возможно, придется прибегнуть к некоторой предварительной обработке аудио. Это можно сделать с помощью программного обеспечения для редактирования аудио или пакета Python (такого как SciPy), который может применять фильтры к файлам. На данный момент, просто имейте в виду, что окружающий шум в аудиофайле может вызвать проблемы и должен быть устранен, чтобы максимизировать точность распознавания речи.
При работе с зашумленными файлами может быть полезно увидеть фактический ответ API. Большинство API возвращают строку JSON, содержащую много возможных транскрипций. recognize_google() всегда будет возвращать наиболее вероятную транскрипцию, если вы не заставите ее дать полный ответ.
Вы можете сделать это, установив для аргумента ключевого слова show_all метода recognize_google() значение True.
Как вы можете видеть, recognize_google() возвращает словарь с ключом «альтернатива», который указывает на список возможных расшифровок. Структура этого ответа может варьироваться от API к API и в основном полезна для отладки.
К настоящему времени у вас есть довольно хорошее представление об основах пакета SpeechRecognition. Вы видели, как создать экземпляр AudioFile из аудиофайла и использовать метод record() для захвата данных из файла. Вы узнали, как записывать сегменты файла, используя аргументы смещения и длительности ключевого слова record(), и испытали пагубное влияние шума на точность транскрипции.
# Работа с микрофонами
Чтобы получить доступ к микрофону с помощью SpeechRecognizer, вам необходимо установить пакет PyAudio.
# Установка PyAudio в Windows
В Windows вы можете установить PyAudio с помощью pip:
# Тестирование установки
После установки PyAudio вы можете проверить установку с консоли.
Убедитесь, что ваш микрофон по умолчанию включен. Если установка сработала, вы должны увидеть что-то вроде этого:
Поговорив в микрофон и посмотрите, насколько хорошо SpeechRecognition транскрибирует вашу речь.
# Класс микрофона
Теперь вместо использования аудиофайла в качестве источника вы будете использовать системный микрофон по умолчанию. Вы можете получить к нему доступ, создав экземпляр класса Microphone.
Если в вашей системе нет микрофона по умолчанию, или вы хотите использовать микрофон, отличный от стандартного, вам нужно будет указать, какой из них использовать, указав индекс устройства. Вы можете получить список имен микрофонов, вызвав статический метод list_microphone_names() класса Microphone.
Обратите внимание, что ваш вывод может отличаться от приведенного выше примера.
Индекс устройства микрофона — это индекс его имени в списке, возвращаемом функцией list_microphone_names(). Например, учитывая вышеприведенный вывод, если вы хотите использовать микрофон с именем «front», который имеет индекс 3 в списке, вы должны создать экземпляр микрофона, например:
Тем не менее, для большинства проектов вы, вероятно, захотите использовать системный микрофон по умолчанию.
# Использование listen() для ввода с микрофона
Теперь, когда у вас есть готовый экземпляр Microphone, пришло время захватить некоторые данные.
Как и класс AudioFile, Microphone является контекстным менеджером. Вы можете захватить ввод с микрофона, используя метод listen() класса Recognizer внутри блока with. Этот метод принимает источник звука в качестве первого аргумента и записывает ввод от источника до тех пор, пока не будет обнаружена тишина.
Как только вы выполните блок with, попробуйте сказать «привет» в свой микрофон. Подождите, пока приглашение переводчика не отобразится снова. Как только будете готовы распознать речь добавьте:
Если запрос не возвращается, ваш микрофон, скорее всего, воспринимает слишком много окружающего шума. Вы можете прервать процесс с помощью Ctrl+C , чтобы вернуть ваше приглашение.
Чтобы обрабатывать окружающий шум, вам нужно использовать метод adjust_for_ambient_noise() класса Recognizer, как вы это делали, когда пытались разобраться в шумном аудиофайле. Поскольку ввод с микрофона гораздо менее предсказуем, чем ввод из аудиофайла, рекомендуется делать это каждый раз, когда вы слушаете вход с микрофона.
После запуска приведенного выше кода, подождите секунду, пока метод adjust_for_ambient_noise() сделает свое дело, затем попробуйте сказать «привет» в микрофон. Опять же, вам придется немного подождать, пока переводчик предложит вернуться, прежде чем попытаться распознать речь.
adjust_for_ambient_noise() анализирует источник звука в течение одной секунды. Если это кажется вам слишком длинным, не стесняйтесь изменить его с помощью аргумента продолжительности ключевого слова.
Документация SpeechRecognition рекомендует использовать продолжительность не менее 0.5 секунд. В некоторых случаях вы можете обнаружить, что длительность, превышающая значение по умолчанию в одну секунду, приводит к лучшим результатам. Минимальное значение, которое вам нужно, зависит от окружающей среды микрофона. К сожалению, эта информация обычно неизвестна во время разработки. Длительность по умолчанию в одну секунду подходит для большинства приложений.
# Обработка неузнаваемой речи
Попробуйте набрать предыдущий пример кода и сделать несколько неразборчивых шумов в микрофон. Вы должны получить что-то вроде этого в ответ:
Аудио, которое не может быть сопоставлено с текстом API, вызывает исключение UnknownValueError . Вы должны всегда заключать вызовы API в блоки try и except , чтобы обработать это исключение.
Возможно, вам придется приложить больше усилий, чем вы ожидаете, чтобы получить исключение. API работает очень усердно, чтобы транскрибировать любые звуки. Даже короткие ворчания были расшифрованы как слова «как» для меня. Кашель, хлопки в ладоши и щелчки языка постоянно поднимали бы исключение.
# Распознавание речи на языках, отличных от английского
Мы распознавали речь на английском языке, который является языком по умолчанию для каждого метода распознавания пакета SpeechRecognition. Тем не менее, это возможно для распознавания речи на других языках.
Чтобы распознавать речь на другом языке, задайте в качестве аргумента ключевого слова языка метода распознавания строку, соответствующую нужному языку. Большинство методов принимают языковой, например, «en-US» для американского английского или «fr-FR» для французского. Например, следующее распознает французскую речь в аудиофайле:
Только следующие методы принимают аргумент ключевого слова языка:
- recognize_bing ()
- recognize_google ()
- recognize_google_cloud ()
- recognize_ibm ()
- recognize_sphinx ()
Чтобы выяснить, какие языковые теги поддерживаются используемым API, вам нужно обратиться к соответствующей документации. В этом ответе о переполнении стека можно найти список тегов, принятых функцией accept_google().
# Упражнения
В конце концов, вы примените то, что вы узнали, к простой игре «Угадай слово» и посмотрим, как все это объединится.
Источник