Skip to content

Instantly share code, notes, and snippets.

@jvanyom
Last active October 14, 2024 21:15
Show Gist options
  • Save jvanyom/1695ae4b5246fa0c28cbd81c4b047a2c to your computer and use it in GitHub Desktop.
Save jvanyom/1695ae4b5246fa0c28cbd81c4b047a2c to your computer and use it in GitHub Desktop.
Programa de transcripción de un archivo de audio a un archivo de texto
#################
# Para más información consulte este link: https://realpython.com/python-speech-recognition/
# pip install SpeechRecognition
##################
# Importa las librerías necesarias
import speech_recognition as libreria_principal
from pathlib import Path
import os
# Tupla de extensiones válidas
extensiones_validas = ['.wav', '.aiff', '.aif', '.flac']
# Diccionario de idiomas soportados
idiomas_validos = {
"Español": "es-es",
"Inglés": "en-us",
"Italiano": "it-it",
"Francés": "fr-fr",
"Alemán": "de-de",
"Árabe": "ar-qa",
"Japonés": "ja",
"Coreano": "ko",
"Chino Mandarín": "zh-cn",
"Chino Tradicional": "zh-yue",
"Ruso": "ru"
}
# Función que recorre las entardas que se establezacan y las junta separadas por una coma
def separacion_por_comas(entr1):
return ', '.join(x if isinstance(x, str) else separacion_por_comas(x) for x in entr1)
# Información | Pregunta al usuario que archivo quiere transcribir
print ("## SOLO SE TRANSCRIBIRÁN PERFECTAMENTE ARCHIVOS DE AUDIO SIN RUIDO DE FONDO ##\n")
print ("Las extensiones soportadas son: " + str(separacion_por_comas(extensiones_validas)))
respuesta = str(input("¿Qué archivo quieres transcribir (Ruta Actual)? "))
ruta_respuesta = Path(respuesta)
respuesta_valida = False
# Repetirá las preguntas siempre y cuando las extensiones no concuerden con las soportadas o el archivo no exista
while not respuesta_valida:
# Comprueba si se ha introducido un archivo o no
if not respuesta:
print ("\nDebe introducir un archivo, el campo no puede estar vacío.\n")
print ("Las extensiones soportadas son: " + str(separacion_por_comas(extensiones_validas)))
respuesta = str(input("¿Qué archivo quieres transcribir (Ruta Actual)? "))
# Si el archivo introducido por el usuario no existe, se te informará de ello y te hará introducir otro nombre'
elif not ruta_respuesta.is_file():
print ("\n" + respuesta + " no existe, por favor introduce un archivo válido\n")
print ("Las extensiones soportadas son: " + str(separacion_por_comas(extensiones_validas)))
respuesta = str(input("¿Qué archivo quieres transcribir (Ruta Actual)? "))
ruta_respuesta = Path(respuesta)
# Si la respuesta no tiene una de las extensiones de 'extensiones_validas' te pedirá que introduzcas una que se encuentre dentro
elif not respuesta.endswith(tuple(extensiones_validas)):
print ("\nPor favor, debes introducir una extensión válida\n")
print ("Las extensiones soportadas son: " + str(separacion_por_comas(extensiones_validas)))
respuesta = str(input("¿Qué archivo quieres transcribir (Ruta Actual)? "))
# Si el archivo tiene una extensión válida y existe procederá a hacer la transcripción
else:
respuesta_valida = True
# Pregunta en que idioma está el archivo
print ("\n¿En qué idioma está el archivo (Español por defecto)? \n")
print ("Estos son los idiomas soporados: ")
print (separacion_por_comas(idiomas_validos) + "\n")
idioma = str(input(""))
idioma_valido = False
# Mientras idoma_valido sea False se ejecutará el while
while not idioma_valido:
# Si idioma se deja vacío, el valor por defecto será Español
if not idioma:
idioma_valido = True
idioma = idiomas_validos["Español"]
separacion = ""
# Si idioma no se encuentra dentro de 'idiomas_validos' te exigirá que introduzcas un nuevo idioma
elif idioma not in idiomas_validos:
print ("\nPor favor, introduce un idioma válido o soportado\n")
idioma = str(input("¿En qué idioma está el archivo (Español por defecto)? \n"))
# Si no se cumplen ninguna de las condiciones anteriores se procederá a ejecutar la siguiente parte
else:
idioma_valido = True
idioma = idiomas_validos[idioma]
separacion = "\n"
print (separacion + "Se está analizando %s...\n" % respuesta)
# Reconoce el audio del archivo
funcion_recognizer_libreria_principal = libreria_principal.Recognizer()
# Transforma el archivo a un tipo de audio válido para que Speech Recognition lo pueda leer
archivo_de_audio = libreria_principal.AudioFile(respuesta)
# Lee el archivo de audio, limpia el ruido, reconoce y registra el archivo especificado como fuente
with archivo_de_audio as fuente:
funcion_recognizer_libreria_principal.adjust_for_ambient_noise(fuente)
audio = funcion_recognizer_libreria_principal.record(fuente)
# Transcribe el audio a texto
texto_transcrito = funcion_recognizer_libreria_principal.recognize_google(audio, language = idioma)
# Guarda la transcripción en un archivo en la ruta actual
nombre_archivo_transcrito = os.path.splitext(respuesta)[0] + ".txt"
archivo_transcrito = open (nombre_archivo_transcrito,"w+")
archivo_transcrito.writelines(texto_transcrito)
archivo_transcrito.close()
print ("Se ha guardado la transcripción en el archivo " + nombre_archivo_transcrito + " en tu ruta actual")
@felipesanma
Copy link

Holaa! Tuve un problema con el archivo de texto guardado, es el siguiente:

image

Al final agregué este código al final para poder guardar en UTF-8

    # Guarda la transcripción en un archivo en la ruta actual
    nombre_archivo_transcrito = os.path.splitext(respuesta)[0] + ".txt"
    archivo_transcrito = codecs.open(nombre_archivo_transcrito,"w", "utf-8")
    with archivo_transcrito as temp:
        archivo_transcrito.writelines(texto_transcrito)
    archivo_transcrito.close()

@estebanhirzfeld
Copy link

Me aparece este error

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment