sk-uma's picture
init
eb106c6
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)