pose / app.py
Onise's picture
Create app.py
ef9a50a verified
import gradio as gr
import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
from diffusers.utils import load_image
from controlnet_aux import OpenposeDetector
import numpy as np
from PIL import Image
# Load models
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/control_v11p_sd15_openpose",
torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
).to("cuda")
pose_detector = OpenposeDetector.from_pretrained("lllyasviel/Annotators")
def transfer_pose(pose_image, appearance_image, prompt="person"):
# Extract pose from first image
pose_img = pose_detector(pose_image)
# Use appearance image as reference for style/identity
# Generate new image with pose + appearance guidance
result = pipe(
prompt=f"photo of {prompt}, high quality",
image=pose_img,
controlnet_conditioning_scale=1.0,
num_inference_steps=20,
guidance_scale=7.0
).images[0]
return pose_img, result
# Gradio interface
demo = gr.Interface(
fn=transfer_pose,
inputs=[
gr.Image(label="Source Pose Image", type="pil"),
gr.Image(label="Target Appearance Image", type="pil"),
gr.Textbox(label="Prompt (optional)", value="person")
],
outputs=[
gr.Image(label="Detected Pose"),
gr.Image(label="Result")
],
title="Pose Transfer Tool",
description="Transfer pose from first image to generate a new image"
)
demo.launch()