File size: 4,002 Bytes
7206ed3
 
 
50ce3c9
d62a8dc
 
7206ed3
 
50ce3c9
 
 
 
 
 
d62a8dc
 
 
 
50ce3c9
734addc
d62a8dc
 
 
 
50ce3c9
d62a8dc
 
 
 
7206ed3
d62a8dc
 
50ce3c9
d62a8dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
734addc
 
 
 
 
 
e189412
 
 
 
 
734addc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d62a8dc
 
 
50ce3c9
d62a8dc
 
 
 
 
 
 
 
 
 
e189412
d62a8dc
 
 
7206ed3
d62a8dc
e189412
 
 
 
 
 
 
 
 
d62a8dc
7206ed3
 
e189412
d62a8dc
e189412
 
 
 
d62a8dc
7206ed3
734addc
e189412
734addc
 
7206ed3
d62a8dc
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import gradio as gr


def gradio_inputs_for_MD_DLC(backends_list, md_models_list, dlc_models_list):
    # Input image
    gr_image_input = gr.Image(type="pil", label="Input Image")

    # Models
    gr_backend_input = gr.Radio(
        choices=backends_list,
        value=backends_list[0],
        label="Select backend",
    )

    gr_mega_model_input = gr.Dropdown(
        choices=md_models_list,
        value="md_v5a",
        type="value",
        label="Select Detector model (TensorFlow legacy only)",
        visible=gr_backend_input.value != "PyTorch",
    )

    gr_dlc_model_input = gr.Dropdown(
        choices=dlc_models_list,
        value="superanimal_quadruped",
        type="value",
        label="Select DeepLabCut model",
    )

    # Other inputs
    gr_dlc_only_checkbox = gr.Checkbox(
        value=False,
        label="Run DeepLabCut only, directly on input image?",
    )

    # Gradio Slider signature is (minimum, maximum, value, step, ...)
    gr_slider_conf_bboxes = gr.Slider(
        minimum=0,
        maximum=1,
        value=0.2,
        step=0.05,
        label="Set confidence threshold for animal detections",
    )

    gr_slider_conf_keypoints = gr.Slider(
        minimum=0,
        maximum=1,
        value=0.4,
        step=0.05,
        label="Set confidence threshold for keypoints",
    )

    # Data viz
    with gr.Accordion("Display options", open=False):
        gr_str_labels_checkbox = gr.Checkbox(
            value=True,
            label="Show bodypart labels?",
        )

        gr_color_by_confidence_checkbox = gr.Checkbox(
            value=True,
            label="Color keypoints by confidence? (otherwise by bodypart)",
        )

        gr_keypt_color = gr.ColorPicker(
            value="#862db7",
            label="Choose color for keypoint label",
        )

        gr_labels_font_style = gr.Dropdown(
            choices=["amiko", "animals", "nature", "painter", "zen"],
            value="amiko",
            type="value",
            label="Select keypoint label font",
        )

        gr_slider_font_size = gr.Slider(
            minimum=5,
            maximum=30,
            value=8,
            step=1,
            label="Set font size",
        )

        gr_slider_marker_size = gr.Slider(
            minimum=1,
            maximum=20,
            value=9,
            step=1,
            label="Set marker size",
        )

    return [
        gr_image_input,
        gr_backend_input,
        gr_mega_model_input,
        gr_dlc_model_input,
        gr_dlc_only_checkbox,
        gr_str_labels_checkbox,
        gr_slider_conf_bboxes,
        gr_slider_conf_keypoints,
        gr_labels_font_style,
        gr_slider_font_size,
        gr_keypt_color,
        gr_slider_marker_size,
        gr_color_by_confidence_checkbox,
    ]


def gradio_outputs_for_MD_DLC():
    gr_image_output = gr.Image(type="pil", label="Output Image")
    with gr.Row():
        gr_file_download = gr.File(label="Download JSON file")
        gr_image_download = gr.File(label="Download annotated image")
    gr_confidence_table = gr.Dataframe(
        headers=["animal", "bodypart", "confidence"],
        label="Keypoint confidence (lowest first)",
        interactive=False,
    )
    return [gr_image_output, gr_file_download, gr_image_download, gr_confidence_table]


def gradio_description_and_examples():
    title = "DeepLabCut Model Zoo: SuperAnimals"
    description = (
        "Estimate animal poses with the SuperAnimal models from the "
        "[DeepLabCut Model Zoo](http://www.mackenziemathislab.org/dlc-modelzoo) "
        "([paper](https://arxiv.org/abs/2203.07436)). "
        "Upload an image or pick an example below; to run on videos, see the Model Zoo page."
    )

    examples = [
        [image, "PyTorch", "md_v5a", "superanimal_quadruped", False, True, 0.5, 0.4, "amiko", 10, "#ff0000", 5, True]
        for image in ("examples/dog.jpeg", "examples/cat.jpg")
    ]

    return [title, description, examples]