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) | |