Skip to content

Script de python para transcribir audios largos en español en texto escrito.

License

Notifications You must be signed in to change notification settings

CBaezaT/transcripcion-automatica

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Transcripción de audios automática v1

Por Cristian Baeza T
Transcribir audios largos en español en texto escrito en Python.
Basado en el trabajo de Adbou Rockikz en PythonCode

Esta solución fue pensada para agilizar la transcripción de entrevistas, no es una automatización perfecta, sobre todo en casos en que el hablante posee un acento marcado, aún así la revisión de la transcripción se hace sencilla.
Su funcionamiento de basa en utilizar el reconocimiento de voz de Google para transcribir audios en formato .wav,uno de los problemas del reconocimiento de voz es que no es practico para transcribir audios largos, por lo que se usa pydub para recortar estos audios en los silencios e interrupciones, guardando cada archivo enumerado. Se aplicará el reconocimiento de voz a cada trozo de audio y la consola entregara la transcripción de cada uno, así luego se podrá hacer la revisión por cada una de estas partes. Como resultado final, la consola entregará el texto completo.


Tutorial

Este proyecto fue llevado a cabo en Python 3.8.5 en Conda, VScode como IDE en Mac OS.

Lo primero es asegurarse de tener instalados los paquetes necesarios SpeechRecognition y pydub:

pip install SpeechRecognition pydud   

Lo siguiente es tener preparado nuestra carpeta o directorio en donde tendremos nuestro archivo de audio en formato wav. En este mismo directorio, ya dentro de Visual Studio Code, creamos nuestro archivo transcripcion.py o simplemente descargar de mi repositorio el archivo transcrip.py o hacer un fork de este repositorio.


Luego, ya con nuestro archivo python importamos los paquetes y funciones que usaremos.

import speech_recognition as sr
import os 
from pydub import AudioSegment
from pydub.silence import split_on_silence  

Establecemos el reconocedor de habla como r

r = sr.Recognizer()

Ahora, creamos una función que separará nuestro audio en trozos donde hayan silencios de minimo 700 milisegundos o más, luego guardara estos trozos en una carpeta, para luego analizar y transcribir cada uno de ellos con el reconocimiento de voz de Google y finalmente unir todo el texto.

def get_large_audio_transcription(path):
    """
    Separaremos el audio largo en trozos para
    aplicar reconocimiento de voz a cada trozo 
    """
    # abrimos el audio con pydub
    sound = AudioSegment.from_wav(path)  
    # separamos el audio donde el silencio dure 700 miliseconds o más por los trozos
    chunks = split_on_silence(sound,
        # estas cantidades pueden variar según tu audio
        min_silence_len = 500,
        # ajustese según se necesite
        silence_thresh = sound.dBFS-14,
        # mantiene el silencio por 1 segundo, tambien ajustable
        keep_silence=500,
    )
    folder_name = "audio-chunks" # nombre para la carpeta de los trozos de audio
    # crea un directorio para guardar los trozos del audio 
    if not os.path.isdir(folder_name):
        os.mkdir(folder_name)
    whole_text = ""
    # procesamos cada trozo
    for i, audio_chunk in enumerate(chunks, start=1):
        # exportamos el trozo del audio y lo guardamos enumerado
        # en la carpeta de nombre `audio-chunks`.
        chunk_filename = os.path.join(folder_name, f"chunk{i}.wav")
        audio_chunk.export(chunk_filename, format="wav")
        # reconocemos el trozo de audio
        with sr.AudioFile(chunk_filename) as source:
            audio_listened = r.record(source)
            # lo intentamos convertir en texto, en este caso establecemos
            # usar el reconocimiento de google en español y entrega en la consola el nombre del trozo y su texto en el formato "chunk1: Hola mundo"
            try:
                text = r.recognize_google(audio_listened, language="es-ES")
            except sr.UnknownValueError as e:
                print("Error:", str(e))
            else:
                text = f"{text.capitalize()}. "
                print(chunk_filename, ":", text)
                whole_text += text
    # entrega el texto completo de  todos los trozos de audio que se transcribieron
    return whole_text

Ahora, ya teniendo lista la función en nuestro script solo debemos seleccionar el audio que usaremos y que imprima el texto completo en la consola, si esta en la carpeta como se indico antes solo debes escribir el nombre del archivo.

#seleccionamos el path de nuestro archivo wav
path = "audio.wav"
print("\nFull text:", get_large_audio_transcription(path))  

Espero que les sea utíl!
Agradecimientos a Adbou Rockikz de PythonCode.


Repositorio de transcripción automatica
Proyecto Original de pythoncode
Documentación de pydub
Documentación de SpeechRecognition

About

Script de python para transcribir audios largos en español en texto escrito.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages