Last active
October 14, 2024 21:15
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################# | |
# 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") |
Holaa! Tuve un problema con el archivo de texto guardado, es el siguiente:
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()
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Holaa! Tuve un problema con el archivo de texto guardado, es el siguiente: