File size: 4,224 Bytes
e82fc4d 43afbf7 ea46d30 da71889 8be51a8 e82fc4d ea46d30 b15d29b e82fc4d ea46d30 e82fc4d ea46d30 da71889 e82fc4d da71889 e82fc4d da71889 ea46d30 da71889 e82fc4d ea46d30 e82fc4d ea46d30 e82fc4d ea46d30 e82fc4d ea46d30 e82fc4d da71889 e82fc4d |
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 |
import gradio as gr
from PIL import Image
import torch
from diffusers import StableDiffusionImg2ImgPipeline, StableDiffusionInpaintPipeline
import spaces
from huggingface_hub import login
from dotenv import load_dotenv
import os
# Cargar las variables de entorno desde el archivo .env
load_dotenv()
# Obtener el token de Hugging Face del archivo .env
huggingface_token = os.getenv('HUGGINGFACE_TOKEN')
# Autenticaci贸n en Hugging Face
def huggingface_login(token):
try:
login(token)
print("Autenticaci贸n exitosa con Hugging Face.")
except Exception as e:
print(f"Error al autenticar con Hugging Face: {e}")
# Llamar a la funci贸n de autenticaci贸n
huggingface_login(huggingface_token)
# Inicializar los pipelines globalmente
device = "cuda" if torch.cuda.is_available() else "cpu"
# Modelo para img2img
model_id_img2img = "CompVis/stable-diffusion-v1-4"
pipe_img2img = StableDiffusionImg2ImgPipeline.from_pretrained(model_id_img2img).to(device)
# Modelo para edici贸n de im谩genes (inpainting)
model_id_inpainting = "stabilityai/stable-diffusion-inpainting"
pipe_inpainting = StableDiffusionInpaintPipeline.from_pretrained(model_id_inpainting).to(device)
@spaces.GPU(duration=0)
def cartoonize_image(image, prompt):
try:
# Preprocesar imagen
image = image.convert("RGB")
image = image.resize((512, 512)) # Ajusta el tama帽o seg煤n sea necesario
# Generar imagen con Stable Diffusion Img2Img
with torch.no_grad():
result = pipe_img2img(prompt=prompt, init_image=image, strength=0.75).images[0]
return result
except Exception as e:
return f"Error procesando la imagen: {e}"
@spaces.GPU(duration=0)
def edit_image(image, mask, prompt):
try:
# Preprocesar imagen
image = image.convert("RGB")
mask = mask.convert("L") # Convertir la m谩scara a escala de grises
# Generar la imagen editada con Stable Diffusion Inpainting
with torch.no_grad():
result = pipe_inpainting(prompt=prompt, image=image, mask_image=mask).images[0]
return result
except Exception as e:
return f"Error editando la imagen: {e}"
def main():
with gr.Blocks() as demo:
gr.Markdown("## Conversi贸n de Imagen a Caricatura Estilo Pixar y Edici贸n de Im谩genes")
with gr.Tab("Caricaturizar"):
with gr.Row():
with gr.Column():
input_image = gr.Image(type="pil", label="Sube tu imagen")
prompt = gr.Textbox(label="Prompt", value="A Pixar-style cartoon character")
with gr.Row():
submit_button = gr.Button("Submit")
output_image = gr.Image(type="pil", label="Imagen Caricaturizada")
def process_image(image, prompt):
return cartoonize_image(image, prompt)
submit_button.click(
fn=process_image,
inputs=[input_image, prompt],
outputs=output_image
)
with gr.Tab("Editar Imagen"):
with gr.Row():
with gr.Column():
input_image = gr.Image(type="pil", label="Sube tu imagen a editar")
mask_image = gr.Image(type="pil", label="Sube una m谩scara (blanco para la parte a editar)")
prompt_edit = gr.Textbox(label="Describe los cambios", value="Cambia el color del objeto a rojo")
with gr.Row():
submit_edit_button = gr.Button("Submit Edici贸n")
output_image_edit = gr.Image(type="pil", label="Imagen Editada")
def process_edit_image(image, mask, prompt_edit):
return edit_image(image, mask, prompt_edit)
submit_edit_button.click(
fn=process_edit_image,
inputs=[input_image, mask_image, prompt_edit],
outputs=output_image_edit
)
demo.launch()
if __name__ == "__main__":
main()
|