Python | Распознавание речи на больших аудиофайлах

Опубликовано: 24 Июля, 2021



Распознавание речи
- это процесс преобразования звука в текст. Это обычно используется в голосовых помощниках, таких как Alexa, Siri и т. Д. Python предоставляет API под названием SpeechRecognition, позволяющий преобразовывать аудио в текст для дальнейшей обработки. В этой статье мы рассмотрим преобразование больших или длинных аудиофайлов в текст с помощью SpeechRecognition API в Python.

Обработка больших аудиофайлов

Когда вводится длинный аудиофайл, точность распознавания речи снижается. Более того, API распознавания речи Google не может с хорошей точностью распознавать длинные аудиофайлы. Следовательно, нам нужно обработать аудиофайл на более мелкие фрагменты, а затем передать эти фрагменты в API. Это повышает точность и позволяет нам распознавать большие аудиофайлы.

Разделение звука на основе тишины

Один из способов обработки аудиофайла - разбить его на части постоянного размера. Например, мы можем взять аудиофайл продолжительностью 10 минут и разбить его на 60 фрагментов длиной 10 секунд каждый. Затем мы можем передать эти фрагменты в API и преобразовать речь в текст, объединив результаты всех этих фрагментов. Этот метод неточен. Разделение аудиофайла на куски постоянного размера может прервать предложения между ними, и мы можем потерять некоторые важные слова в процессе. Это связано с тем, что аудиофайл может закончиться до того, как слово будет полностью произнесено, и Google не сможет распознать неполные слова.

Другой способ - разделить аудиофайл по тишине. Люди делают короткие паузы между предложениями. Если мы можем разделить аудиофайл на фрагменты на основе этих тишин, тогда мы сможем обработать предложение файла предложение за предложением и объединить их, чтобы получить результат. Этот подход более точен, чем предыдущий, потому что мы не разрезаем предложения между ними, а звуковой фрагмент будет содержать все предложение без каких-либо перерывов. Таким образом, нам не нужно разбивать его на куски постоянной длины.

Недостатком этого метода является то, что трудно определить продолжительность паузы для разделения, потому что разные пользователи говорят по-разному, и некоторые пользователи могут делать паузу на 1 секунду между предложениями, тогда как некоторые могут делать паузу всего на 0,5 секунды.

Требуются библиотеки

Pydub: sudo pip3 установить pydub
Распознавание речи: sudo pip3 установить SpeechRecognition

Пример:

 
Вход: peacock.wav 

 
Выход:

экспорт chunk0.wav
Блок обработки 0
экспорт chunk1.wav
Блок обработки 1
экспорт chunk2.wav
Блок обработки 2
экспорт chunk3.wav
Блок обработки 3
экспорт chunk4.wav
Блок обработки 4
экспорт chunk5.wav
Блок обработки 5
экспорт chunk6.wav
Блок обработки 6


Код:




# importing libraries
import speech_recognition as sr
import os
from pydub import AudioSegment
from pydub.silence import split_on_silence
# a function that splits the audio file into chunks
# and applies speech recognition
def silence_based_conversion(path = "alice-medium.wav" ):
# open the audio file stored in
# the local system as a wav file.
song = AudioSegment.from_wav(path)
# open a file where we will concatenate
# and store the recognized text
fh = open ( "recognized.txt" , "w+" )
# split track where silence is 0.5 seconds
# or more and get chunks
chunks = split_on_silence(song,
# must be silent for at least 0.5 seconds
# or 500 ms. adjust this value based on user
# requirement. if the speaker stays silent for
# longer, increase this value. else, decrease it.
min_silence_len = 500 ,
# consider it silent if quieter than -16 dBFS
# adjust this per requirement
silence_thresh = - 16
)
# create a directory to store the audio chunks.
try :
os.mkdir( 'audio_chunks' )
except (FileExistsError):
pass
# move into the directory to
# store the audio files.
os.chdir( 'audio_chunks' )
i = 0
# process each chunk
for chunk in chunks:
# Create 0.5 seconds silence chunk
chunk_silent = AudioSegment.silent(duration = 10 )
# add 0.5 sec silence to beginning and
# end of audio chunk. This is done so that
# it doesn't seem abruptly sliced.
audio_chunk = chunk_silent + chunk + chunk_silent
# export audio chunk and save it in
# the current directory.
print ( "saving chunk{0}.wav" . format (i))
# specify the bitrate to be 192 k
audio_chunk.export( "./chunk{0}.wav" . format (i), bitrate = '192k' , format = "wav" )
# the name of the newly created chunk
filename = 'chunk' + str (i) + '.wav'
print ( "Processing chunk " + str (i))
# get the name of the newly created chunk
# in the AUDIO_FILE variable for later use.
file = filename
# create a speech recognition object
r = sr.Recognizer()
# recognize the chunk
with sr.AudioFile( file ) as source:
# remove this if it is not working
# correctly.
r.adjust_for_ambient_noise(source)
audio_listened = r.listen(source)
try :
# try converting it to text
rec = r.recognize_google(audio_listened)
# write the output to the file.
fh.write(rec + ". " )
# catch any errors.
except sr.UnknownValueError:
print ( "Could not understand audio" )
except sr.RequestError as e:
print ( "Could not request results. check your internet connection" )
i + = 1
os.chdir( '..' )
if __name__ = = '__main__' :
print ( 'Enter the audio file path' )
path = input ()
silence_based_conversion(path)


Выход :


признанный.txt:

Павлин - национальная птица Индии. У них разноцветные перья, две ноги и 
небольшой клюв. Они славятся своим танцем. Когда павлин танцует, он распускает 
перья как веер. У него длинная блестящая темно-синяя шея. Павлины в основном встречаются в 
на полях они очень красивые птицы. Самки известны как Peahen1. Их 
из перьев делают куртки, кошельки и т. д. Их можно увидеть в зоопарке. 

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.