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

Распознавание речи, как следует из названия, относится к автоматическому распознаванию человеческой речи. Распознавание речи - одна из важнейших задач в области взаимодействия человека с компьютером. Если вы когда-либо взаимодействовали с Alexa или когда-либо приказывали Siri выполнить задачу, вы уже испытали на себе силу распознавания речи. Распознавание речи имеет различные приложения, от автоматической транскрипции речевых данных (например, голосовой почты) до взаимодействия с роботами с помощью речи. В этом

Распознавание речи, как следует из названия, относится к автоматическому распознаванию человеческой речи. Распознавание речи - одна из важнейших задач в области взаимодействия человека с компьютером. Если вы когда-либо взаимодействовали с Alexa или когда-либо приказывали Siri выполнить задачу, вы уже испытали на себе силу распознавания речи.

Распознавание речи имеет различные приложения, от автоматической транскрипции речевых данных (например, голосовой почты) до взаимодействия с роботами с помощью речи.

В этом руководстве вы увидите, как мы можем разработать очень простое приложение для распознавания речи, способное распознавать речь из аудиофайлов, а также в реальном времени с микрофона. Итак, начнем без лишних слов.

На Python разработано несколько библиотек распознавания речи. Однако мы будем использовать библиотеку SpeechRecognition , которая является самой простой из всех библиотек.

Установка библиотеки SpeechRecognition

Выполните следующую команду, чтобы установить библиотеку:

 $ pip install SpeechRecognition 

Распознавание речи из аудиофайлов

В этом разделе вы увидите, как мы можем перевести речь из аудиофайла в текст. Аудиофайл, который мы будем использовать в качестве входных данных, можно скачать по этой ссылке . Загрузите файл в вашу локальную файловую систему.

Первым шагом, как всегда, является импорт необходимых библиотек. В этом случае нам нужно только импортировать только что speech_recognition библиотеку Speech_recognition.

 import speech_recognition as speech_recog 

Для преобразования речи в текст нам нужен единственный класс - это класс Recognizer из модуля speech_recognition В зависимости от базового API, используемого для преобразования речи в текст, Recognizer имеет следующие методы:

  • recognize_bing() : использует Microsoft Bing Speech API
  • recognize_google() : использует Google Speech API
  • recognize_google_cloud() : использует Google Cloud Speech API
  • recognize_houndify() : использует Houndify API от SoundHound
  • recognize_ibm() : использует IBM Speech to Text API
  • recognize_sphinx() : использует PocketSphinx API

Среди всех вышеперечисленных методов для перевода речи в текст можно использовать автономный метод recognize_sphinx()

Чтобы распознать речь из аудиофайла, мы должны создать объект класса AudioFile модуля speech_recognition Путь к аудиофайлу, который вы хотите преобразовать в текст, передается конструктору класса AudioFile Выполните следующий скрипт:

 sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav') 

В приведенном выше коде обновите путь к аудиофайлу, который вы хотите расшифровать.

Мы будем использовать метод recognize_google() для расшифровки наших аудиофайлов. Тем не менее, recognize_google() метод требует AudioData объекта speech_recognition модуля в качестве параметра. Чтобы преобразовать наш аудиофайл в AudioData , мы можем использовать метод record() класса Recognizer Нам нужно передать объект AudioFile record() , как показано ниже:

 with sample_audio as audio_file: 
 audio_content = recog.record(audio_file) 

Теперь, если вы проверите тип audio_content , вы увидите, что она имеет тип speech_recognition.AudioData .

 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() , который принимает AudioData в качестве параметра. Следующий скрипт показывает, как можно улучшить качество транскрипции, удалив шум из аудиофайла:

 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 класса Speach_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.AudioData , который затем может быть передан 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) 
 <ipython-input-27-41218bc8a239> in <module> 
 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 и объясняется, как преобразовать речь в текст, когда источником звука является аудиофайл или живой микрофон.

comments powered by Disqus