Spaces:
Sleeping
Sleeping
File size: 5,486 Bytes
b8357b7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | 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) |