whisper / app.py
SoyAlekZen's picture
Create app.py
b8357b7 verified
Raw
History Blame Contribute Delete
5.49 kB
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)