Fash / app.py
Allex21's picture
Update app.py
5ded1c9 verified
raw
history blame
2.81 kB
# app.py
# --- 🚨 CORREÇÃO DE EMERGÊNCIA: Garantir websockets >= 11.0.3 ANTES de importar qualquer coisa ---
import subprocess
import sys
def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", "--no-cache-dir", package])
try:
import websockets
# Verifica se o submódulo 'asyncio' existe (presente só a partir da v11+)
if not hasattr(websockets, 'asyncio'):
raise ImportError("Versão antiga do websockets detectada. Atualizando...")
except (ImportError, AttributeError):
print("📦 Instalando websockets>=11.0.3...")
install_package("websockets>=11.0.3")
# Recarrega o módulo após instalação
import importlib
import websockets
importlib.reload(websockets)
print("✅ websockets atualizado com sucesso!")
# --- ✅ FIM DA CORREÇÃO ---
# Agora sim, importe o resto
import os
import gradio as gr
from utils.editor import run_pipeline
from PIL import Image
import io
DESCRIPTION = """
# 👗 Fashion Editor — Stable Diffusion + ControlNet (OpenPose)
Envie a foto da modelo e uma foto da peça (jaqueta, camiseta etc.). A ferramenta
irá alinhar a peça, extrair a pose e usar Stable Diffusion + ControlNet para gerar
a composição fotorrealista.
"""
examples = [
# Você pode adicionar exemplos aqui (caminhos relativos dentro do repo) após fazer upload
]
def infer(model_image, garment_image, prompt_extra):
"""
model_image: PIL.Image or numpy
garment_image: PIL.Image or numpy
prompt_extra: str - description tweaks
"""
if model_image is None or garment_image is None:
return None, "Envie as duas imagens (modelo e peça)."
# run_pipeline retorna (pil_image_result, debug_info_dict)
try:
result, info = run_pipeline(model_image, garment_image, prompt_extra)
return result, f"OK — steps: {info.get('steps')}, guidance: {info.get('guidance_scale')}"
except Exception as e:
return None, f"Erro durante a geração: {str(e)}"
with gr.Blocks(title="Fashion Editor (SD + ControlNet)") as demo:
gr.Markdown(DESCRIPTION)
with gr.Row():
with gr.Column():
model_input = gr.Image(label="Foto da Modelo", type="pil")
garment_input = gr.Image(label="Foto da Peça (Roupa)", type="pil")
prompt_extra = gr.Textbox(label="Prompt extra (opcional) — ex: 'leather biker jacket, black, shiny, realistic'", lines=2)
run_button = gr.Button("Gerar Edição")
status = gr.Textbox(label="Status / Informações", interactive=False)
with gr.Column():
output = gr.Image(label="Resultado (Final)")
run_button.click(fn=infer, inputs=[model_input, garment_input, prompt_extra], outputs=[output, status])
if __name__ == "__main__":
demo.launch()