Python | Reconocimiento de voz en archivos de audio grandes


El reconocimiento
de voz es el proceso de convertir audio en texto. Esto se usa comúnmente en asistentes de voz como Alexa, Siri, etc. Python proporciona una API llamada SpeechRecognition que nos permite convertir audio en texto para su posterior procesamiento. En este artículo, veremos cómo convertir archivos de audio grandes o largos en texto usando la API SpeechRecognition en python.

Procesamiento de archivos de audio grandes

Cuando la entrada es un archivo de audio largo, la precisión del reconocimiento de voz disminuye. Además, la API de reconocimiento de voz de Google no puede reconocer archivos de audio largos con buena precisión. Por lo tanto, necesitamos procesar el archivo de audio en fragmentos más pequeños y luego enviar estos fragmentos a la API. Hacer esto mejora la precisión y nos permite reconocer archivos de audio grandes.

Dividir el audio basado en el silencio

Una forma de procesar el archivo de audio es dividirlo en partes de tamaño constante. Por ejemplo, podemos tomar un archivo de audio de 10 minutos de duración y dividirlo en 60 fragmentos de 10 segundos de duración cada uno. Luego podemos alimentar estos fragmentos a la API y convertir la voz en texto concatenando los resultados de todos estos fragmentos. Este método es inexacto. Dividir el archivo de audio en fragmentos de tamaño constante puede interrumpir oraciones intermedias y perder algunas palabras importantes en el proceso. Esto se debe a que el archivo de audio puede terminar antes de que se pronuncie una palabra por completo y Google no podrá reconocer las palabras incompletas.

La otra forma es dividir el archivo de audio en función del silencio. Los humanos hacen una pausa por un corto período de tiempo entre oraciones. Si podemos dividir el archivo de audio en fragmentos basados ​​en estos silencios, podemos procesar el archivo oración por oración y concatenarlos para obtener el resultado. Este enfoque es más preciso que el anterior porque no cortamos oraciones intermedias y el fragmento de audio contendrá la oración completa sin interrupciones. De esta manera, no necesitamos dividirlo en trozos de longitud constante.

La desventaja de este método es que es difícil determinar la duración del silencio para dividir porque los diferentes usuarios hablan de manera diferente y algunos usuarios pueden hacer una pausa de 1 segundo entre oraciones, mientras que otros pueden hacer una pausa de solo 0,5 segundos.

Bibliotecas requeridas

Pydub: sudo pip3 install pydub
Speech recognition: sudo pip3 install SpeechRecognition

Ejemplo:

 
Input:  peacock.wav 

 
Output: 

exporting chunk0.wav
Processing chunk 0
exporting chunk1.wav
Processing chunk 1
exporting chunk2.wav
Processing chunk 2
exporting chunk3.wav
Processing chunk 3
exporting chunk4.wav
Processing chunk 4
exporting chunk5.wav
Processing chunk 5
exporting chunk6.wav
Processing chunk 6


Código:

# 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)


Producción :


recognized.txt:

The peacock is the national bird of India. They have colourful feathers, two legs and 
a small beak. They are famous for their dance. When a peacock dances it spreads its 
feathers like a fan. It has a long shiny dark blue neck. Peacocks are mostly found in 
the fields they are very beautiful birds. The females are known as 'Peahen1. Their 
feathers are used for making jackets, purses etc. We can see them in a zoo. 

Publicación traducida automáticamente

Artículo escrito por Adith Bharadwaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *