Spaces:
Sleeping
Sleeping
import os | |
import sys | |
import cv2 | |
import gradio as gr | |
from ldivider.ld_convertor import cv2pil, pil2cv | |
from ldivider.ld_processor_fast import get_base, get_composite_layer, get_normal_layer | |
from ldivider.ld_utils import save_psd | |
from pytoshop.enums import BlendMode | |
path = os.getcwd() | |
output_dir = f"{path}/output" | |
input_dir = f"{path}/input" | |
model_dir = f"{path}/segment_model" | |
class webui: | |
def __init__(self): | |
self.demo = gr.Blocks() | |
def color_base_divide( | |
self, input_image, loops, init_cluster, ciede_threshold, blur_size, layer_mode | |
): | |
image = pil2cv(input_image) | |
self.input_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA) | |
base_image, label = get_base( | |
self.input_image, loops, init_cluster, ciede_threshold, blur_size | |
) | |
image = cv2pil(image) | |
if layer_mode == "composite": | |
( | |
base_layer_list, | |
shadow_layer_list, | |
bright_layer_list, | |
addition_layer_list, | |
subtract_layer_list, | |
) = get_composite_layer(self.input_image, base_image, label) | |
filename = save_psd( | |
self.input_image, | |
[ | |
base_layer_list, | |
bright_layer_list, | |
shadow_layer_list, | |
subtract_layer_list, | |
addition_layer_list, | |
], | |
["base", "screen", "multiply", "subtract", "addition"], | |
[ | |
BlendMode.normal, | |
BlendMode.screen, | |
BlendMode.multiply, | |
BlendMode.subtract, | |
BlendMode.linear_dodge, | |
], | |
output_dir, | |
layer_mode, | |
) | |
base_layer_list = [cv2pil(layer) for layer in base_layer_list] | |
return ( | |
[image, base_image], | |
base_layer_list, | |
bright_layer_list, | |
shadow_layer_list, | |
filename, | |
) | |
elif layer_mode == "normal": | |
base_layer_list, bright_layer_list, shadow_layer_list = get_normal_layer( | |
self.input_image, base_image, label | |
) | |
filename = save_psd( | |
self.input_image, | |
[base_layer_list, bright_layer_list, shadow_layer_list], | |
["base", "bright", "shadow"], | |
[BlendMode.normal, BlendMode.normal, BlendMode.normal], | |
output_dir, | |
layer_mode, | |
) | |
return ( | |
[image, base_image], | |
base_layer_list, | |
bright_layer_list, | |
shadow_layer_list, | |
filename, | |
) | |
else: | |
return None | |
def launch(self, share): | |
with self.demo: | |
with gr.Row(): | |
with gr.Column(): | |
input_image = gr.Image(type="pil") | |
with gr.Accordion("ColorBase Settings", open=True): | |
loops = gr.Slider( | |
1, 20, value=1, step=1, label="loops", show_label=True | |
) | |
init_cluster = gr.Slider( | |
1, | |
50, | |
value=10, | |
step=1, | |
label="init_cluster", | |
show_label=True, | |
) | |
ciede_threshold = gr.Slider( | |
1, | |
50, | |
value=5, | |
step=1, | |
label="ciede_threshold", | |
show_label=True, | |
) | |
blur_size = gr.Slider( | |
1, 20, value=5, label="blur_size", show_label=True | |
) | |
layer_mode = gr.Dropdown( | |
["normal", "composite"], | |
value="normal", | |
label="output_layer_mode", | |
show_label=True, | |
) | |
submit = gr.Button(value="Create PSD") | |
with gr.Row(): | |
with gr.Column(): | |
with gr.Tab("output"): | |
output_0 = gr.Gallery() | |
with gr.Tab("base"): | |
output_1 = gr.Gallery() | |
with gr.Tab("bright"): | |
output_2 = gr.Gallery() | |
with gr.Tab("shadow"): | |
output_3 = gr.Gallery() | |
output_file = gr.File() | |
submit.click( | |
self.color_base_divide, | |
inputs=[ | |
input_image, | |
loops, | |
init_cluster, | |
ciede_threshold, | |
blur_size, | |
layer_mode, | |
], | |
outputs=[output_0, output_1, output_2, output_3, output_file], | |
) | |
self.demo.queue() | |
self.demo.launch(share=share) | |
if __name__ == "__main__": | |
ui = webui() | |
if len(sys.argv) > 1: | |
if sys.argv[1] == "share": | |
ui.launch(share=True) | |
else: | |
ui.launch(share=False) | |
else: | |
ui.launch(share=False) | |