File size: 3,243 Bytes
a660631
aef3692
a660631
f61605f
d93e95e
 
f61605f
 
e45a496
f61605f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e45a496
d93e95e
f61605f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import gradio as gr
from preprocessor import Preprocessor

# Initialize Preprocessor
preprocessor = Preprocessor()

# Define processing function with extended options
def process_image(image, preprocessor_name, preprocess_resolution=None, mlsd_value_threshold=None, mlsd_distance_threshold=None, canny_low_threshold=None, canny_high_threshold=None):
    preprocessor.load(preprocessor_name)
    kwargs = {}
    
    if preprocess_resolution:
        kwargs['preprocess_resolution'] = preprocess_resolution
    if mlsd_value_threshold and preprocessor_name == "MLSD":
        kwargs['mlsd_value_threshold'] = mlsd_value_threshold
    if mlsd_distance_threshold and preprocessor_name == "MLSD":
        kwargs['mlsd_distance_threshold'] = mlsd_distance_threshold
    if canny_low_threshold and preprocessor_name == "Canny":
        kwargs['canny_low_threshold'] = canny_low_threshold
    if canny_high_threshold and preprocessor_name == "Canny":
        kwargs['canny_high_threshold'] = canny_high_threshold

    return preprocessor(image, **kwargs)

# UI creation with segmentation options
def create_ui():
    with gr.Blocks() as demo:
        with gr.Row():
            image_input = gr.Image(type="pil")
            preprocessor_dropdown = gr.Dropdown(choices=["ContentShuffle", "Openpose", "Midas", "MLSD", "Canny", "Lineart", "DPT", "UPerNet", "HED", "PidiNet"], label="Preprocessor")
            preprocess_resolution = gr.Slider(128, 512, step=1, label="Preprocess Resolution", visible=False)
            # Additional options for MLSD and Canny
            mlsd_value_threshold = gr.Slider(0.01, 2.0, step=0.01, label="MLSD Value Threshold", visible=False)
            mlsd_distance_threshold = gr.Slider(0.01, 20.0, step=0.01, label="MLSD Distance Threshold", visible=False)
            canny_low_threshold = gr.Slider(1, 255, step=1, label="Canny Low Threshold", visible=False)
            canny_high_threshold = gr.Slider(1, 255, step=1, label="Canny High Threshold", visible=False)
            submit_button = gr.Button("Process")
            result_image = gr.Image(label="Processed Image")

        def update_options(preprocessor_name):
            # Update visibility based on preprocessor choice
            options_visibility = {
                'preprocess_resolution': preprocessor_name in ["Openpose", "Midas", "MLSD", "Lineart", "DPT", "UPerNet", "HED", "PidiNet"],
                'mlsd_value_threshold': preprocessor_name == "MLSD",
                'mlsd_distance_threshold': preprocessor_name == "MLSD",
                'canny_low_threshold': preprocessor_name == "Canny",
                'canny_high_threshold': preprocessor_name == "Canny",
            }
            return list(options_visibility.values())

        preprocessor_dropdown.change(fn=update_options, inputs=[preprocessor_dropdown], outputs=[preprocess_resolution, mlsd_value_threshold, mlsd_distance_threshold, canny_low_threshold, canny_high_threshold])
        submit_button.click(fn=process_image, inputs=[image_input, preprocessor_dropdown, preprocess_resolution, mlsd_value_threshold, mlsd_distance_threshold, canny_low_threshold, canny_high_threshold], outputs=[result_image])

    return demo

if __name__ == "__main__":
    create_ui().launch()