Рубрики
Без рубрики

Введение в распознавание речи с помощью Python

Распознавание речи-одна из важнейших задач взаимодействия человека и компьютера. Мы будем использовать библиотеку распознавания речи для выполнения этой задачи в Python.

Автор оригинала: Usman Malik.

Распознавание речи, как следует из названия, относится к автоматическому распознаванию человеческой речи. Распознавание речи-одна из важнейших задач в области взаимодействия человека и компьютера. Если вы когда-либо взаимодействовали с 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 API
  • recognize_google() : Использует Google Speech API
  • recognize_google_cloud() : Использует Google Cloud Speech API
  • recognize_houndify() : Использует API Houndify от SoundHound
  • recognize_ibm() : Использует IBM Speech to Text API
  • recognize_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 и объясняет, как перевести речь в текст, когда источником звука является аудиофайл или живой микрофон.