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