| import os | |
| import gradio as gr | |
| import numpy as np | |
| from PIL import Image | |
| from generate_shadow_main import Shadow_Diffusion | |
| shadow_diffuser = Shadow_Diffusion() | |
| shadow_prompt_dict = {"软阴影": "a product with soft natural shadow, white background", | |
| "硬阴影": "a product with hard natural shadow, white background", | |
| "悬浮阴影": "a product with floating natural shadow, white background",} | |
| def generate_shadow(image_rgba, shadow_type, padding_rate, denoise_strength, num_inference_steps, | |
| controlnet_conditioning_scale, cfg, seed): | |
| img_pil = Image.fromarray(image_rgba[..., :-1]) | |
| mask_pil = Image.fromarray(np.repeat(image_rgba[..., -1:], 3, -1)) | |
| shadow_prompt = shadow_prompt_dict[shadow_type] | |
| print(padding_rate, denoise_strength, num_inference_steps, controlnet_conditioning_scale, cfg, seed) | |
| _, _, _, shadow_result_pil = shadow_diffuser.generate_shadow(img_pil, | |
| mask_pil, | |
| shadow_prompt, | |
| padding_rate=float(padding_rate), | |
| denoise_strength=float(denoise_strength), | |
| num_inference_steps=int(num_inference_steps), | |
| controlnet_conditioning_scale=float(controlnet_conditioning_scale), | |
| cfg=float(cfg), | |
| seed=int(seed)) | |
| return np.array(shadow_result_pil) | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 💡基于Diffusion的白底阴影生成 \n" | |
| "请确保上传带有透明通道的RGBA图像作为输入") | |
| with gr.Row(): | |
| with gr.Column(): | |
| rgba = gr.Image(image_mode="RGBA", label="输入商品图(RGBA)") | |
| gr.Examples(label="示例图片", inputs=[rgba], | |
| examples=[os.path.join("./test_images", n) for n in os.listdir("./test_images")]) | |
| with gr.Column(): | |
| shadow_output = gr.Image(image_mode="RGB", label="阴影生成结果") | |
| with gr.Row(): | |
| shadow_type = gr.Radio(["软阴影", "硬阴影", "悬浮阴影"], value="硬阴影", label="阴影类型") | |
| generate_btn = gr.Button(value="生成阴影") | |
| with gr.Accordion(label="其他参数>>", open=False) as sku_accordion: | |
| padding_rate = gr.Slider(0, 0.99, value=0.4, step=0.1, label="白边填充比例") | |
| denoise_strength = gr.Slider(0, 0.99, value=1.0, step=0.01, label="去噪程度") | |
| num_inference_steps = gr.Slider(10, 50, value=20, step=1, label="推理步数") | |
| controlnet_conditioning_scale = gr.Slider(0, 1.0, value=0.5, step=0.01, label="控制强度(ControlNet)") | |
| step_num = gr.Slider(1, 50, value=20, step=1, label="推理步数") | |
| cfg = gr.Slider(0, 20, value=5, step=0.5, label="CFG") | |
| seed = gr.Slider(-1, 99999999999999, value=42, step=0.01, label="随机种子") | |
| generate_btn.click(generate_shadow, inputs=[rgba, shadow_type, padding_rate, denoise_strength, num_inference_steps, | |
| controlnet_conditioning_scale, cfg, seed], outputs=shadow_output) | |
| demo.queue().launch(server_name='[::]', share=True) | |