Spaces:
Runtime error
Runtime error
import os | |
import gradio as gr | |
import rembg | |
import spaces | |
import torch | |
from diffusers import DiffusionPipeline | |
from instantMesh.src.utils.infer_util import ( | |
remove_background, resize_foreground) | |
pipe = DiffusionPipeline.from_pretrained( | |
"playgroundai/playground-v2.5-1024px-aesthetic", | |
torch_dtype=torch.float16, | |
variant="fp16" | |
).to("cuda") | |
def generate_prompt(subject, style, color_scheme, angle, lighting_type, additional_details): | |
return f"A 3D cartoon render of {subject}, featuring the entire body and shape, on a transparent background. The style should be {style}, with {color_scheme} colors, emphasizing the essential features and lines. The pose should clearly showcase the full form of the {subject} from a {angle} perspective. Lighting is {lighting_type}, highlighting the volume and depth of the subject. {additional_details}. Output as a high-resolution PNG with no background." | |
def generate_image(subject, style, color_scheme, angle, lighting_type, additional_details): | |
prompt = generate_prompt(subject, style, color_scheme, | |
angle, lighting_type, additional_details) | |
results = pipe(prompt, num_inference_steps=25, guidance_scale=7.5) | |
return results.images[0] | |
def check_input_image(input_image): | |
if input_image is None: | |
raise gr.Error("No image selected!") | |
def preprocess(input_image): | |
rembg_session = rembg.new_session() | |
input_image = remove_background(input_image, rembg_session) | |
input_image = resize_foreground(input_image, 0.85) | |
return input_image | |
def image_generation_ui(): | |
with gr.Row(): | |
subject = gr.Textbox(label='Subject', scale=2) | |
style = gr.Dropdown( | |
label='Style', | |
choices=['Pixar-like', 'Disney-esque', 'Anime-inspired'], | |
value='Pixar-like', | |
multiselect=False, | |
scale=2 | |
) | |
color_scheme = gr.Dropdown( | |
label='Color Scheme', | |
choices=['Vibrant', 'Pastel', 'Monochromatic', 'Black and White'], | |
value='Vibrant', | |
multiselect=False, | |
scale=2 | |
) | |
angle = gr.Dropdown( | |
label='Angle', | |
choices=['Front', 'Side', 'Three-quarter'], | |
value='Front', | |
multiselect=False, | |
scale=2 | |
) | |
lighting_type = gr.Dropdown( | |
label='Lighting Type', | |
choices=['Bright and Even', 'Dramatic Shadows', 'Soft and Warm'], | |
value='Bright and Even', | |
multiselect=False, | |
scale=2 | |
) | |
additional_details = gr.Textbox(label='Additional Details', scale=2) | |
submit_prompt = gr.Button('Generate Image', scale=1, variant='primary') | |
with gr.Row(variant="panel"): | |
with gr.Column(): | |
with gr.Row(): | |
input_image = gr.Image( | |
label="Input Image", | |
image_mode="RGBA", | |
sources="upload", | |
type="pil", | |
elem_id="content_image", | |
) | |
processed_image = gr.Image( | |
label="Processed Image", | |
image_mode="RGBA", | |
type="pil", | |
interactive=False | |
) | |
with gr.Row(): | |
submit_process = gr.Button( | |
"Remove Background", elem_id="process", variant="primary") | |
with gr.Row(variant="panel"): | |
gr.Examples( | |
examples=[os.path.join("examples/images", img_name) | |
for img_name in sorted(os.listdir("examples/images"))], | |
inputs=[input_image], | |
label="Examples", | |
cache_examples=False, | |
examples_per_page=16 | |
) | |
submit_prompt.click(fn=generate_image, inputs=[subject, style, color_scheme, angle, lighting_type, additional_details], outputs=input_image).success( | |
fn=preprocess, inputs=[input_image], outputs=[processed_image] | |
) | |
submit_process.click(fn=check_input_image, inputs=[input_image]).success( | |
fn=preprocess, inputs=[input_image], outputs=[processed_image], | |
) | |
return input_image, processed_image | |