import spaces import gradio as gr from stablepy import Preprocessor PREPROCESSOR_TASKS_LIST = [ "Canny", "Openpose", "DPT", "Midas", "ZoeDepth", "DepthAnything", "HED", "PidiNet", "TEED", "Lineart", "LineartAnime", "Anyline", "Lineart standard", "SegFormer", "UPerNet", "ContentShuffle", "Recolor", "Blur", "MLSD", "NormalBae", ] preprocessor = Preprocessor() def process_inputs( image, name, resolution, precessor_resolution, low_threshold, high_threshold, value_threshod, distance_threshold, recolor_mode, recolor_gamma_correction, blur_k_size, pre_openpose_extra, hed_scribble, pre_pidinet_safe, pre_lineart_coarse, use_cuda, ): if not image: raise ValueError("To use this, simply upload an image.") preprocessor.load(name, False) params = dict( image_resolution=resolution, detect_resolution=precessor_resolution, low_threshold=low_threshold, high_threshold=high_threshold, thr_v=value_threshod, thr_d=distance_threshold, mode=recolor_mode, gamma_correction=recolor_gamma_correction, blur_sigma=blur_k_size, hand_and_face=pre_openpose_extra, scribble=hed_scribble, safe=pre_pidinet_safe, coarse=pre_lineart_coarse, ) if use_cuda: @spaces.GPU(duration=15) def wrapped_func(): preprocessor.to("cuda") return preprocessor(image, **params) return wrapped_func() return preprocessor(image, **params) def preprocessor_tab(): with gr.Row(): with gr.Column(): pre_image = gr.Image(label="Image", type="pil", sources=["upload"]) pre_options = gr.Dropdown(label="Preprocessor", choices=PREPROCESSOR_TASKS_LIST, value=PREPROCESSOR_TASKS_LIST[0]) pre_img_resolution = gr.Slider( minimum=64, maximum=4096, step=64, value=1024, label="Image Resolution", info="The maximum proportional size of the generated image based on the uploaded image." ) pre_start = gr.Button(value="PROCESS IMAGE", variant="primary") with gr.Accordion("Advanced Settings", open=False): with gr.Column(): pre_processor_resolution = gr.Slider(minimum=64, maximum=2048, step=64, value=512, label="Preprocessor Resolution") pre_low_threshold = gr.Slider(minimum=1, maximum=255, step=1, value=100, label="'CANNY' low threshold") pre_high_threshold = gr.Slider(minimum=1, maximum=255, step=1, value=200, label="'CANNY' high threshold") pre_value_threshold = gr.Slider(minimum=1, maximum=2.0, step=0.01, value=0.1, label="'MLSD' Hough value threshold") pre_distance_threshold = gr.Slider(minimum=1, maximum=20.0, step=0.01, value=0.1, label="'MLSD' Hough distance threshold") pre_recolor_mode = gr.Dropdown(label="'RECOLOR' mode", choices=["luminance", "intensity"], value="luminance") pre_recolor_gamma_correction = gr.Number(minimum=0., maximum=25., value=1., step=0.001, label="'RECOLOR' gamma correction") pre_blur_k_size = gr.Number(minimum=0, maximum=100, value=9, step=1, label="'BLUR' sigma") pre_openpose_extra = gr.Checkbox(value=True, label="'OPENPOSE' face and hand") pre_hed_scribble = gr.Checkbox(value=False, label="'HED' scribble") pre_pidinet_safe = gr.Checkbox(value=False, label="'PIDINET' safe") pre_lineart_coarse = gr.Checkbox(value=False, label="'LINEART' coarse") pre_use_cuda = gr.Checkbox(value=False, label="Use CUDA") with gr.Column(): pre_result = gr.Image(label="Result", type="pil", interactive=False, format="png") pre_start.click( fn=process_inputs, inputs=[ pre_image, pre_options, pre_img_resolution, pre_processor_resolution, pre_low_threshold, pre_high_threshold, pre_value_threshold, pre_distance_threshold, pre_recolor_mode, pre_recolor_gamma_correction, pre_blur_k_size, pre_openpose_extra, pre_hed_scribble, pre_pidinet_safe, pre_lineart_coarse, pre_use_cuda, ], outputs=[pre_result], )