File size: 1,899 Bytes
3a57c3b
 
 
 
 
 
4195f01
 
 
 
 
 
 
 
 
 
3a57c3b
 
4195f01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3a57c3b
4195f01
3a57c3b
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
import gradio as gr
import torch
from PIL import Image
from diffusers import DiffusionPipeline
from transformers import pipeline

# Modelos
modeloObtenerTextoImagen = pipeline(
    "image-to-text", 
    model="Salesforce/blip-image-captioning-base"
)

modeloGenerarImagen = DiffusionPipeline.from_pretrained(
    "sd-legacy/stable-diffusion-v1-5", 
    torch_dtype=torch.float32
)

def obtenerDescripcion(imagen):
    """
    Función que recibe una imagen, genera una descripción de la misma
    y luego crea una nueva imagen basada en esa descripción.
    """
    # Obtener descripción de la imagen
    descripcion = modeloObtenerTextoImagen(Image.fromarray(imagen))
    texto_generado = descripcion[0]['generated_text']
    
    # Generar imagen a partir de la descripción
    imagen_generada = modeloGenerarImagen(texto_generado).images[0]
    
    return imagen_generada, texto_generado

# Layout con Gradio Blocks
with gr.Blocks(title="Asistente Visual para Personas con Discapacidad") as demo:
    
    gr.Markdown(
        """
        # Asistente Visual
        Esta herramienta ayuda a personas con discapacidad visual a comprender imágenes.
        1. Sube una imagen.
        2. La IA generará una descripción de la imagen y una nueva imagen interpretativa.
        """
    )
    
    with gr.Row():
        with gr.Column():
            imagen_input = gr.Image(label="Sube tu imagen aquí", type="numpy")
            boton_generar = gr.Button("Generar descripción e imagen")
        
        with gr.Column():
            imagen_output = gr.Image(label="Imagen generada")
            descripcion_output = gr.Textbox(label="Descripción generada por IA", lines=4)

    # Conectar botón a función
    boton_generar.click(
        fn=obtenerDescripcion, 
        inputs=imagen_input, 
        outputs=[imagen_output, descripcion_output]
    )

# Lanzar app
demo.launch(share=True)