Procesamiento de audio usando Pydub y la API de reconocimiento de voz de Google

Los archivos de audio son un medio generalizado de transferir información. Por lo tanto, veamos cómo dividir los archivos de audio (archivos .wav) en partes más pequeñas y reconocer el contenido en ellos y almacenarlo en un archivo de texto. Para obtener más información sobre los archivos de audio y sus formatos, consulte Audio_formats .

¿Necesita desglosar un archivo de audio?

Cuando hacemos cualquier procesamiento en archivos de audio, lleva mucho tiempo. Aquí, el procesamiento puede significar cualquier cosa. Por ejemplo, podemos querer aumentar o disminuir la frecuencia del audio, o como se hizo en este artículo, reconocer el contenido en el archivo de audio. Al dividirlo en pequeños archivos de audio llamados fragmentos, podemos asegurarnos de que el procesamiento sea rápido.

Instalaciones requeridas:

pip3 install pydub
pip3 install audioread
pip3 install SpeechRecognition

Hay principalmente dos pasos en el programa.

Paso #1: Se trata de dividir los archivos de audio en pequeños fragmentos de un intervalo constante. El corte se puede hacer con o sin superposición. Superposición significa que el siguiente fragmento creado comenzará desde un tiempo constante hacia atrás, de modo que durante el corte, si se corta algún audio/palabra, puede quedar cubierto por esta superposición. Por ejemplo, si el archivo de audio es de 22 segundos y la superposición es de 1,5 segundos, el tiempo de estos fragmentos será:

  chunk1 : 0 - 5 seconds
  chunk2 : 3.5 - 8.5 seconds
  chunk3 : 7 - 12 seconds
  chunk4 : 10.5 - 15.5 seconds
  chunk5 : 14 - 19.5 seconds
  chunk6 : 18 - 22 seconds

Podemos ignorar esta superposición estableciendo la superposición en 0.

Paso #2: Se trata de trabajar con el archivo de audio cortado para hacer lo que el usuario requiera. Aquí, con fines de demostración, los fragmentos se han pasado a través del módulo de reconocimiento de voz de Google y el texto se ha escrito en un archivo separado. Para comprender cómo usar el módulo de reconocimiento de voz de Google para reconocer el audio de un micrófono, consulte este . En este artículo, usaremos los archivos de audio cortados para reconocer el contenido.

El paso n.º 2 se realiza en un bucle dentro del paso n.º 1 . Tan pronto como el archivo de audio se divide en fragmentos, se reconoce el fragmento. Este proceso continúa hasta el final del archivo de audio.

Ejemplo:

Input :  Geek.wav


Output : 
Screenshot of cmd running the code:


Text File: recognized

 
A continuación se muestra la implementación:

# Import necessary libraries
from pydub import AudioSegment
import speech_recognition as sr
  
# Input audio file to be sliced
audio = AudioSegment.from_wav("1.wav")
  
'''
Step #1 - Slicing the audio file into smaller chunks.
'''
# Length of the audiofile in milliseconds
n = len(audio)
  
# Variable to count the number of sliced chunks
counter = 1
  
# Text file to write the recognized audio
fh = open("recognized.txt", "w+")
  
# Interval length at which to slice the audio file.
# If length is 22 seconds, and interval is 5 seconds,
# The chunks created will be:
# chunk1 : 0 - 5 seconds
# chunk2 : 5 - 10 seconds
# chunk3 : 10 - 15 seconds
# chunk4 : 15 - 20 seconds
# chunk5 : 20 - 22 seconds
interval = 5 * 1000
  
# Length of audio to overlap. 
# If length is 22 seconds, and interval is 5 seconds,
# With overlap as 1.5 seconds,
# The chunks created will be:
# chunk1 : 0 - 5 seconds
# chunk2 : 3.5 - 8.5 seconds
# chunk3 : 7 - 12 seconds
# chunk4 : 10.5 - 15.5 seconds
# chunk5 : 14 - 19.5 seconds
# chunk6 : 18 - 22 seconds
overlap = 1.5 * 1000
  
# Initialize start and end seconds to 0
start = 0
end = 0
  
# Flag to keep track of end of file.
# When audio reaches its end, flag is set to 1 and we break
flag = 0
  
# Iterate from 0 to end of the file,
# with increment = interval
for i in range(0, 2 * n, interval):
      
    # During first iteration,
    # start is 0, end is the interval
    if i == 0:
        start = 0
        end = interval
  
    # All other iterations,
    # start is the previous end - overlap
    # end becomes end + interval
    else:
        start = end - overlap
        end = start + interval 
  
    # When end becomes greater than the file length,
    # end is set to the file length
    # flag is set to 1 to indicate break.
    if end >= n:
        end = n
        flag = 1
  
    # Storing audio file from the defined start to end
    chunk = audio[start:end]
  
    # Filename / Path to store the sliced audio
    filename = 'chunk'+str(counter)+'.wav'
  
    # Store the sliced audio file to the defined path
    chunk.export(filename, format ="wav")
    # Print information about the current chunk
    print("Processing chunk "+str(counter)+". Start = "
                        +str(start)+" end = "+str(end))
  
    # Increment counter for the next chunk
    counter = counter + 1
      
    # Slicing of the audio file is done.
    # Skip the below steps if there is some other usage
    # for the sliced audio files.
  
  
'''
Step #2 - Recognizing the chunk and writing to a file.
'''
  
    # Here, Google Speech Recognition is used
    # to take each chunk and recognize the text in it.
  
    # Specify the audio file to recognize
  
    AUDIO_FILE = filename
  
    # Initialize the recognizer
    r = sr.Recognizer()
  
    # Traverse the audio file and listen to the audio
    with sr.AudioFile(AUDIO_FILE) as source:
        audio_listened = r.listen(source)
  
    # Try to recognize the listened audio
    # And catch expections.
    try:    
        rec = r.recognize_google(audio_listened)
          
        # If recognized, write into the file.
        fh.write(rec+" ")
      
    # If google could not understand the audio
    except sr.UnknownValueError:
        print("Could not understand audio")
  
    # If the results cannot be requested from Google.
    # Probably an internet connection error.
    except sr.RequestError as e:
        print("Could not request results.")
  
    # Check for flag.
    # If flag is 1, end of the whole audio reached.
    # Close the file and break.
    if flag == 1:
        fh.close()
        break

Producción:

reconocida.txt :

como podemos ver en la captura de pantalla anterior, todos estos fragmentos se almacenan en el sistema local. Ahora hemos cortado con éxito el archivo de audio con una superposición y reconocido el contenido de los fragmentos.

Ventajas de este método:

  • El intervalo se puede establecer en cualquier longitud dependiendo de cuánto tiempo necesitemos que sean los fragmentos.
  • La superposición garantiza que no se pierdan datos, incluso si se dice alguna palabra precisamente al final del intervalo.
  • Todos los fragmentos pueden almacenarse en diferentes archivos de audio y usarse más tarde si es necesario.
  • Cualquier procesamiento que se pueda hacer en un archivo de audio también se puede hacer en estos fragmentos, ya que son solo archivos de audio.

Desventajas de este método:

  • El uso del reconocimiento de voz de Google requiere una conexión a Internet activa.
  • Después de la superposición, se debe realizar algún procesamiento de texto para eliminar las palabras duplicadas reconocidas.
  • La precisión del reconocimiento de voz de Google varía según muchos factores, como el ruido de fondo, el acento del hablante, etc.

Publicación traducida automáticamente

Artículo escrito por AbhijeetSridhar 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 *