import gradio as gr from transformers import pipeline import time # 1. Cargamos el primer modelo: Image Captioning (Visión-Lenguaje) captioner = pipeline("image-to-text", model="Salesforce/blip-image-captioning-base") # 2. Cargamos el segundo modelo: Traducción (NLP) translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es") def procesar_imagen(imagen): # Iniciamos el contador de rendimiento start_time = time.time() # Modelo 1: Extraemos el texto de la imagen en inglés caption_en = captioner(imagen)[0]['generated_text'] # Modelo 2: Traducimos el texto al español caption_es = translator(caption_en)[0]['translation_text'] # Paramos el contador end_time = time.time() tiempo_ejecucion = round(end_time - start_time, 2) # Devolvemos el inglés, el español y el tiempo que ha tardado return caption_en, caption_es, f"{tiempo_ejecucion} segundos" # Creamos la interfaz con Gradio with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("# 🖼️ Generador de Descripciones en Español") gr.Markdown("Esta aplicación soluciona el problema de obtener descripciones de imágenes en español encadenando dos modelos de Inteligencia Artificial: uno de **Visión-Lenguaje** (BLIP) y otro de **Procesamiento de Lenguaje Natural** (MarianMT).") with gr.Row(): with gr.Column(): # Variedad en el input (permite subir fotos o usar la webcam del PC/Móvil) imagen_input = gr.Image(type="pil", label="Input: Sube una imagen o usa tu cámara", sources=["upload", "webcam", "clipboard"]) btn_procesar = gr.Button("Analizar y Traducir", variant="primary") with gr.Column(): output_en = gr.Textbox(label="Output 1: Descripción en Inglés (Modelo BLIP)") output_es = gr.Textbox(label="Output 2: Traducción al Español (Modelo MarianMT)") output_tiempo = gr.Textbox(label="Rendimiento (Tiempo de ejecución en CPU)") btn_procesar.click(fn=procesar_imagen, inputs=imagen_input, outputs=[output_en, output_es, output_tiempo]) demo.launch()