theoracle's picture
πŸ› Fix: ensure DeepFashion2 model is downloaded before loading
efb991e
raw
history blame
5.58 kB
import os
MODEL_URL = "https://huggingface.co/Bingsu/adetailer/resolve/main/deepfashion2_yolov8s-seg.pt"
MODEL_PATH = "deepfashion2_yolov8s-seg.pt"
# ─── Download DeepFashion2 model if not already present ───
if not os.path.exists(MODEL_PATH):
import urllib.request
print("[INFO] Downloading DeepFashion2 YOLOv8 model...")
urllib.request.urlretrieve(MODEL_URL, MODEL_PATH)
print("[INFO] Model downloaded.")
else:
print("[INFO] DeepFashion2 model already exists.")
import traceback
from datetime import datetime
import torch, gc
from PIL import Image
import gradio as gr
from inference import generate_with_lora
from background_edit import run_background_removal_and_inpaint
from background_edit import run_clothing_inpaint
# ───────────────────── Helpers ─────────────────────
def _print_trace():
traceback.print_exc()
def unload_models():
torch.cuda.empty_cache()
gc.collect()
def safe_generate_and_inpaint(
image,
prompt_1, neg_1, strength_1, guidance_1,
prompt_2, neg_2, guidance_2
):
try:
if image is None:
raise gr.Error("Please upload an image first.")
# Step 1: Headshot Refinement
print("[INFO] Step 1: Refining headshot...", flush=True)
refined = generate_with_lora(
image=image,
prompt=prompt_1,
negative_prompt=neg_1,
strength=strength_1,
guidance_scale=guidance_1,
)
# Save intermediate result to disk
os.makedirs("./outputs", exist_ok=True)
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
path = f"./outputs/step1_result_{ts}.png"
refined.save(path)
# Step 2: Background Inpainting
print("[INFO] Step 2: Inpainting background...", flush=True)
unload_models()
result = run_background_removal_and_inpaint(
image_path=path,
prompt=prompt_2,
negative_prompt=neg_2,
guidance_scale=guidance_2
)
return refined, result, ""
except gr.Error as e:
return None, None, f"πŸ›‘ {str(e)}"
except Exception as e:
_print_trace()
return None, None, f"❌ Unexpected Error: {type(e).__name__}: {str(e)}"
def guarded_clothing(image, prompt, neg, guidance):
try:
result, err = run_clothing_inpaint(image, prompt, neg, guidance)
return result, err
except Exception as e:
import traceback
traceback.print_exc()
return None, f"❌ Unexpected Error: {type(e).__name__}: {str(e)}"
# ───────────────────── Gradio UI ─────────────────────
with gr.Blocks() as demo:
gr.Markdown("## 🧠 Headshot + Background Generator (Full Prompt Control)")
with gr.Row():
input_image = gr.Image(type="pil", label="Upload Headshot")
gr.Markdown("### Step 1: Headshot Refinement (LoRA)")
with gr.Row():
prompt_1 = gr.Textbox(label="Headshot Prompt", value="a professional headshot of a confident woman in her 30s with blonde hair")
neg_1 = gr.Textbox(label="Headshot Negative Prompt", value="deformed, cartoon, anime, sketch, blurry, low quality")
with gr.Row():
strength_1 = gr.Slider(0.1, 1.0, value=0.2, step=0.05, label="Refinement Strength")
guidance_1 = gr.Slider(1, 20, value=17, step=0.5, label="Guidance Scale (Headshot)")
gr.Markdown("### Step 2: Background Inpainting (SDXL)")
with gr.Row():
prompt_2 = gr.Textbox(label="Background Prompt", value="modern hospital background, clean, soft lighting")
neg_2 = gr.Textbox(label="Background Negative Prompt", value="fantasy, cartoon, cluttered, sketch")
with gr.Row():
guidance_2 = gr.Slider(1, 20, value=10, step=0.5, label="Guidance Scale (Background)")
go_btn = gr.Button("✨ Generate Refined Headshot + Background")
with gr.Row():
output_refined = gr.Image(type="pil", label="Step 1: Refined Headshot")
output_final = gr.Image(type="pil", label="Step 2: Final Image with Background")
error_box = gr.Markdown(label="Error", value="", visible=True)
go_btn.click(
fn=safe_generate_and_inpaint,
inputs=[
input_image, prompt_1, neg_1, strength_1, guidance_1,
prompt_2, neg_2, guidance_2
],
outputs=[output_refined, output_final, error_box]
)
gr.Markdown("### πŸ‘— Step 3: Clothing Replacement")
with gr.Row():
clothing_prompt = gr.Textbox(
label="Clothing Prompt",
value="white female CEO professional blazer, clean look"
)
clothing_negative = gr.Textbox(
label="Clothing Negative Prompt",
value="hoodie, casual wear, fantasy, cartoon, jeans, distorted, blurry"
)
with gr.Row():
clothing_guidance = gr.Slider(1, 20, value=17.0, step=0.5, label="Clothing Guidance Scale")
with gr.Row():
clothing_btn = gr.Button("🧡 Inpaint Clothing")
clothing_output = gr.Image(type="pil", label="Step 3: Final Image with New Clothing")
clothing_error = gr.Markdown(label="Clothing Error", value="", visible=True)
clothing_btn.click(
fn=guarded_clothing,
inputs=[output_final, clothing_prompt, clothing_negative, clothing_guidance],
outputs=[clothing_output, clothing_error],
preprocess=False
)
demo.launch(debug=True)