Spaces:
No application file
No application file
File size: 2,157 Bytes
86def46 43555c1 86def46 43555c1 86def46 43555c1 86def46 43555c1 86def46 43555c1 86def46 43555c1 86def46 af1df58 43555c1 af1df58 43555c1 86def46 43555c1 |
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 |
import gradio as gr
from PIL import Image
from diffusers import StableDiffusionImg2ImgPipeline
import torch
# 1. Cargar el modelo ligero (Solo se ejecuta una vez al iniciar el Space)
model_id = "runwayml/stable-diffusion-v1-5"
device = "cuda" if torch.cuda.is_available() else "cpu"
# Usamos StableDiffusionImg2ImgPipeline para Image-to-Image
try:
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to(device)
except:
# Fallback si no hay GPU o si falla la carga con float16
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id)
pipe = pipe.to(device)
# 2. Función de procesamiento (Aquí se ejecuta la inferencia)
def convert_to_bn_diffusion(input_image: Image.Image, prompt: str, strength: float) -> Image.Image:
"""
Ejecuta el pipeline de difusión I2I para estilizar la imagen.
"""
# Aseguramos que la imagen esté en RGB y redimensionamos si es necesario
input_image = input_image.convert("RGB").resize((512, 512))
# Prompt forzando el estilo monocromático
bn_prompt = f"{prompt}, high contrast, black and white, monochrome, grayscale"
# Generación (Inferencia)
output_image = pipe(
prompt=bn_prompt,
image=input_image,
strength=strength, # Cuanto más alto, más se transforma (más BN)
guidance_scale=7.5
).images[0]
return output_image
# 3. Interfaz de Gradio
iface = gr.Interface(
fn=convert_to_bn_diffusion,
inputs=[
gr.Image(type="pil", label="Sube tu imagen (se redimensionará a 512x512)"),
gr.Textbox(label="Prompt adicional (ej: 'a moody photo', 'vintage style')", value="A sharp, detailed photograph"),
gr.Slider(minimum=0.5, maximum=1.0, step=0.05, value=0.9, label="Fuerza de Estilización (Strength - Cuánto se convierte a B/N)")
],
outputs="image",
title="Conversor a B/N con Modelo de Difusión (Img2Img)",
description="Sube una imagen y el modelo Stable Diffusion intentará convertirla a blanco y negro basado en el prompt y la fuerza de estilización."
)
if __name__ == "__main__":
iface.launch() |