Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from moviepy.editor import VideoFileClip | |
| import os | |
| import openai | |
| # Aseg煤rate de configurar tu cliente de OpenAI aqu铆 con las claves adecuadas. | |
| from openai import OpenAI | |
| client = OpenAI(api_key="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") # Reemplaza 'tu_api_key' con tu clave real de la API. | |
| # Funci贸n para interactuar con OpenAI | |
| def chat_with_openai(message, system_message="You are a helpful assistant."): | |
| response = client.chat.completions.create( | |
| model="gpt-4-turbo-preview", | |
| messages=[ | |
| {"role": "system", "content": system_message}, | |
| {"role": "user", "content": message} | |
| ] | |
| ) | |
| return response.choices[0].message.content | |
| # Funci贸n que se llamar谩 cuando se haga clic en los botones | |
| def procesar_con_openai(transcripcion, system_message): | |
| return chat_with_openai(transcripcion, system_message) | |
| # Arreglo con la informaci贸n de los botones | |
| botones_info = [ | |
| {"system_message": "Resumen el siguiente texto.", "titulo": "Resumir"}, | |
| {"system_message": "Proporciona contexto adicional para el siguiente texto.", "titulo": "Generar Contexto"}, | |
| {"system_message": "Mejora la redacci贸n del siguiente texto.", "titulo": "Mejorar Redacci贸n"} | |
| ] | |
| def resumir_texto(transcripcion): | |
| return chat_with_openai(transcripcion, system_message="Resumen el siguiente texto.") | |
| def generar_contexto(transcripcion): | |
| return chat_with_openai(transcripcion, system_message="Proporciona contexto adicional para el siguiente texto.") | |
| def mejorar_redaccion(transcripcion): | |
| return chat_with_openai(transcripcion, system_message="Mejora la redacci贸n del siguiente texto.") | |
| def guardar_archivo(transcripcion, guardar): | |
| if guardar and transcripcion: | |
| ruta_archivo = "./data/transcripcion.txt" | |
| with open(ruta_archivo, "w") as archivo: | |
| archivo.write(transcripcion) | |
| return ruta_archivo | |
| return None | |
| # Funci贸n para transcribir audio con Whisper | |
| def transcribe_with_whisper(audio_path): | |
| try: | |
| with open(audio_path, "rb") as audio_file: | |
| transcript = client.audio.transcriptions.create( | |
| model="whisper-1", | |
| file=audio_file, | |
| language="es" | |
| ) | |
| print(f"Transcripci贸n: {transcript}") | |
| return transcript.text | |
| except Exception as e: | |
| print(f"Error al transcribir el archivo: {e}") | |
| return "" | |
| # Funci贸n para manejar la carga y reproducci贸n de audio | |
| def handle_audio(audio_data): | |
| if audio_data is not None: | |
| transcripcion = transcribe_with_whisper(audio_data) | |
| return audio_data, transcripcion | |
| return None, "" | |
| # Funci贸n para manejar la carga y reproducci贸n de video | |
| def handle_video(file_info): | |
| if file_info is not None: | |
| video_path = file_info["file"] # Obtener la ruta del archivo de video | |
| video_extension = os.path.splitext(video_path)[1].lower() | |
| if video_extension == ".mp4": | |
| video = VideoFileClip(video_path) | |
| ruta_audio = os.path.join("./data/", "audio_extraido.mp3") | |
| video.audio.write_audiofile(ruta_audio) | |
| # Implementa la l贸gica para transcribir el audio utilizando Whisper. | |
| transcripcion = transcribe_with_whisper(ruta_audio) | |
| return video_path, transcripcion | |
| else: | |
| return video_path, "Formato de video no soportado para transcripci贸n." | |
| return None, "" | |
| # Interfaces para audio y video | |
| audio_interface = gr.Interface( | |
| fn=handle_audio, | |
| inputs=gr.Audio(sources=["upload", "microphone"]), | |
| outputs=[gr.Audio(label="Reproducci贸n de Audio"), "text"] | |
| ) | |
| video_interface = gr.Interface( | |
| fn=handle_video, | |
| inputs=gr.Video(sources=["upload"]), | |
| outputs=[gr.Video(label="Reproducci贸n de Video"), "text"] | |
| ) | |
| # Crear la interfaz con pesta帽as | |
| tabbed_interface = gr.TabbedInterface([audio_interface, video_interface], ["Audio", "Video"]) | |
| # Creaci贸n de la interfaz Gradio | |
| with gr.Blocks() as iface: | |
| gr.Markdown("Esta herramienta convierte archivos de audio y video a texto usando OpenAI y permite su reproducci贸n.") | |
| tabbed_interface.render() | |
| salida_transcripcion = gr.Textbox(label="Transcripci贸n") | |
| salida_procesada = gr.Textbox(label="Texto Procesado") | |
| boton_guardar = gr.Button("Guardar Resultado") | |
| salida_descarga = gr.File(label="Descargar Resultado") | |
| # Contenedor para botones din谩micos | |
| with gr.Row(): | |
| for boton in botones_info: | |
| boton_accion = gr.Button(boton["titulo"]) | |
| boton_accion.click( | |
| procesar_con_openai, | |
| inputs=[salida_transcripcion], | |
| outputs=[salida_procesada] | |
| ) | |
| # Funci贸n para guardar el archivo de transcripci贸n | |
| def guardar_archivo_fn(transcripcion, guardar): | |
| if guardar: | |
| return guardar_archivo(transcripcion, guardar) | |
| return None | |
| boton_guardar.click( | |
| guardar_archivo_fn, | |
| inputs=[salida_transcripcion, gr.Checkbox(label="驴Guardar el resultado en un archivo?")], | |
| outputs=[salida_descarga] | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch(share=True) |