Распознавание речи, как следует из названия, относится к автоматическому распознаванию человеческой речи. Распознавание речи-одна из важнейших задач в области взаимодействия человека и компьютера. Если вы когда-либо взаимодействовали с Alexa или когда-либо приказывали Siri выполнить задание, вы уже испытали силу распознавания речи.
Распознавание речи имеет различные приложения, начиная от автоматической транскрипции речевых данных (например, голосовой почты) и заканчивая взаимодействием с роботами с помощью речи.
В этом уроке вы увидите, как мы можем разработать очень простое приложение для распознавания речи, которое способно распознавать речь из аудиофайлов, а также в прямом эфире с микрофона. Итак, давайте начнем без лишних слов.
В Python было разработано несколько библиотек распознавания речи. Однако мы будем использовать библиотеку Распознавания речи , которая является самой простой из всех библиотек.
Установка Библиотеки распознавания Речи
Для установки библиотеки выполните следующую команду:
$ pip install SpeechRecognition
Распознавание речи из аудиофайлов
В этом разделе вы увидите, как мы можем перевести речь из аудиофайла в текст. Аудиофайл, который мы будем использовать в качестве входных данных, можно загрузить по ссылке this link . Загрузите файл в свою локальную файловую систему.
Первым шагом, как всегда, является импорт необходимых библиотек. В этом случае нам нужно только импортировать библиотеку speech_recognition
, которую мы только что загрузили.
import speech_recognition as speech_recog
Для преобразования речи в текст нам нужен только один класс-класс Recognizer
из модуля speech_recognition
. В зависимости от базового API, используемого для преобразования речи в текст, класс Recognized
имеет следующие методы:
recognize_bing()
: Использует Microsoft Bing Speech APIrecognize_google()
: Использует Google Speech APIrecognize_google_cloud()
: Использует Google Cloud Speech APIrecognize_houndify()
: Использует API Houndify от SoundHoundrecognize_ibm()
: Использует IBM Speech to Text APIrecognize_sphinx()
: Использует API PocketSphinx
Среди всех вышеперечисленных методов метод recognize_sphinx()
можно использовать в автономном режиме для перевода речи в текст.
Чтобы распознать речь из аудиофайла, мы должны создать объект класса AudioFile
модуля speech_recognition
. Путь к аудиофайлу, который вы хотите перевести в текст, передается конструктору класса AudioFile
. Выполните следующий сценарий:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
В приведенном выше коде обновите путь к аудиофайлу, который вы хотите транскрибировать.
Мы будем использовать метод recognize_google()
для транскрибирования ваших аудиофайлов. Однако метод recognize_google()
требует в качестве параметра объект audioData
модуля speech_recognition|/. Чтобы преобразовать ваш аудиофайл в объект
Audio Data , мы можем использовать метод
record() класса
Recognizer . Нам нужно передать объект
Audio File в метод
record () , как показано ниже:
with sample_audio as audio_file: audio_content = recog.record(audio_file)
Теперь, если вы проверите тип переменной audio_content
, вы увидите, что она имеет тип speech_recognition.Аудиоданные
.
type(audio_content)
Выход:
speech_recognition.AudioData
Теперь мы можем просто передать объект audio_content
в метод recognize_google()
объекта класса Recognizer ()
, и аудиофайл будет преобразован в текст. Выполните следующий сценарий:
recog.recognize_google(audio_content)
Выход:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the young girl gave no clear response the meal was called before the bells ring what weather is in living'
Приведенный выше вывод показывает текст аудиофайла. Вы можете видеть, что файл не был на 100% правильно расшифрован, но точность довольно разумна.
Установка значений Длительности и смещения
Вместо того чтобы транскрибировать всю речь целиком, вы также можете транскрибировать определенный сегмент аудиофайла. Например, если вы хотите транскрибировать только первые 10 секунд аудиофайла, вам нужно передать 10 в качестве значения параметра duration
метода record ()|/. Посмотрите на следующий сценарий:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav') with sample_audio as audio_file: audio_content = recog.record(audio_file, duration=10) recog.recognize_google(audio_content)
Выход:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas'
Точно так же вы можете пропустить некоторую часть аудиофайла с самого начала, используя параметр offset
. Например, если вы не хотите транскрибировать первые 4 секунды аудио, передайте 4 в качестве значения атрибута offset
. Например, следующий сценарий пропускает первые 4 секунды аудиофайла, а затем транскрибирует аудиофайл в течение 10 секунд.
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav') with sample_audio as audio_file: audio_content = recog.record(audio_file, offset=4, duration=10) recog.recognize_google(audio_content)
Выход:
'take the winding path to reach the lake no closely the size of the gas tank web degrees office dirty face'
Обработка Шума
Аудиофайл может содержать шум по нескольким причинам. Шум действительно может повлиять на качество перевода речи в текст. Для уменьшения шума класс Recognizer
содержит метод adjust_for_ambient_noise ()
, который принимает в качестве параметра объект Audio Data
. Следующий сценарий показывает, как можно улучшить качество транскрипции, удалив шум из аудиофайла:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav') with sample_audio as audio_file: recog.adjust_for_ambient_noise(audio_file) audio_content = recog.record(audio_file) recog.recognize_google(audio_content)
Выход:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank web degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the younger again no clear response the mail was called before the bells ring what weather is in living'
Результат очень похож на то, что мы получили ранее; это связано с тем, что аудиофайл уже имел очень мало шума.
Распознавание речи с живого микрофона
В этом разделе вы увидите, как вы можете транскрибировать живое аудио, полученное через микрофон в вашей системе.
Существует несколько способов обработки аудиовхода, получаемого через микрофон, и для этого были разработаны различные библиотеки. Одной из таких библиотек является PyAudio . Выполните следующий скрипт для установки библиотеки PyAudio
:
$ pip install PyAudio
Теперь источником звука для транскрибирования является микрофон. Чтобы захватить звук с микрофона, нам нужно сначала создать объект класса Microphone
модуля Speech_Recogniton
, как показано здесь:
mic = speech_recog.Microphone()
Чтобы просмотреть список всех микрофонов в вашей системе, вы можете использовать метод list_microphone_names()
:
speech_recog.Microphone.list_microphone_names()
Выход:
['Microsoft Sound Mapper - Input', 'Microphone (Realtek High Defini', 'Microsoft Sound Mapper - Output', 'Speakers (Realtek High Definiti', 'Microphone Array (Realtek HD Audio Mic input)', 'Speakers (Realtek HD Audio output)', 'Stereo Mix (Realtek HD Audio Stereo input)']
Это список микрофонов, доступных в моей системе. Имейте в виду, что ваш список, скорее всего, будет выглядеть иначе.
Следующим шагом является захват звука с микрофона. Для этого вам нужно вызвать метод listen()
класса Recognizer ()
. Как и метод record ()
, метод listen()
также возвращает speech_recognition.Аудиоданные
объект, который затем может быть передан методу recognize_google ()
.
Следующий сценарий предлагает пользователю сказать что-то в микрофон, а затем печатает все, что сказал пользователь:
with mic as audio_file: print("Speak Please") recog.adjust_for_ambient_noise(audio_file) audio = recog.listen(audio_file) print("Converting Speech to Text...") print("You said: " + recog.recognize_google(audio))
Как только вы выполните описанный выше сценарий, вы увидите следующее сообщение:
Please say something
В этот момент скажите все, что хотите, а затем сделайте паузу. Как только вы сделаете паузу, вы увидите транскрипцию всего, что вы сказали. Вот результат, который я получил:
Converting Speech to Text... You said: hello this is normally from stack abuse abuse this is an article on speech recognition I hope you will like it and this is just a test speech and when I will stop speaking are you in today thank you for Reading
Важно отметить, что если метод recognize_google()
не может сопоставить произносимые вами слова ни с одним из слов в своем репозитории, то возникает исключение. Вы можете проверить это, произнеся несколько непонятных слов. Вы должны увидеть следующее исключение:
Speak Please Converting Speech to Text... --------------------------------------------------------------------------- UnknownValueError Traceback (most recent call last)in 8 print("Converting Speech to Text...") 9 ---> 10 print("You said: " + recog.recognize_google(audio)) 11 12 ~\Anaconda3\lib\site-packages\speech_recognition\__init__.py in recognize_google(self, audio_data, key, language, show_all) 856 # return results 857 if show_all: return actual_result --> 858 if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError() 859 860 if "confidence" in actual_result["alternative"]: UnknownValueError:
Лучший подход-использовать блок try
при вызове метода recognize_google ()
, как показано ниже:
with mic as audio_file: print("Speak Please") recog.adjust_for_ambient_noise(audio_file) audio = recog.listen(audio_file) print("Converting Speech to Text...") try: print("You said: " + recog.recognize_google(audio)) except Exception as e: print("Error: " + str(e))
Вывод
Распознавание речи имеет различные полезные приложения в области взаимодействия человека с компьютером и автоматической транскрипции речи. Эта статья кратко объясняет процесс транскрипции речи в Python через библиотеку speech_recognition
и объясняет, как перевести речь в текст, когда источником звука является аудиофайл или живой микрофон.