Spaces:
Running on Zero
Running on Zero
| import spaces | |
| import gradio as gr | |
| from PIL import Image | |
| import io | |
| import os | |
| # Importa a função melhorada do seu módulo (que já está ajustado ) | |
| from faceless_processing import build_faceless_embroidery_assets | |
| def process_faceless(input_image, prompt="", negative_prompt=""): | |
| if input_image is None: | |
| return None, None | |
| # NÃO REDIMENSIONAMOS A IMAGEM – a função interna ( embroidery_processing.py) já lida com tamanhos variados. | |
| # Gera lineart e cutout usando a função otimizada | |
| try: | |
| lineart, cutout = build_faceless_embroidery_assets( | |
| input_image, | |
| use_huggingface=False, # Desativa Hugging Face (pode ativar se tiver token) | |
| prompt=prompt or None, | |
| negative_prompt=negative_prompt or None, | |
| ) | |
| return lineart, cutout | |
| except Exception as e: | |
| print(f"[ERRO] process_faceless: {e}") | |
| # Fallback: retorna a imagem original e uma mensagem de erro | |
| return input_image, None | |
| # Interface Gradio | |
| demo = gr.Interface( | |
| fn=process_faceless, | |
| inputs=[ | |
| gr.Image(type="pil", label="Imagem de Entrada"), | |
| gr.Textbox(label="Prompt (Opcional)", value=""), | |
| gr.Textbox(label="Prompt Negativo (Opcional)", value="") | |
| ], | |
| outputs=[ | |
| gr.Image(label="Lineart Final (Transparente)"), | |
| gr.Image(label="Recorte do Rosto (Sem Fundo)") | |
| ], | |
| title="Faceless Embroidery Studio Generator", | |
| description="Gera contornos e linearts minimalistas (Faceless) para bordados a partir de retratos.\n\n**Nota:** O rosto é completamente apagado e apenas a silhueta externa é desenhada." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() |