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)