File size: 3,834 Bytes
9b896f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7abe579
9b896f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7abe579
9b896f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from visualization_gary import*

# 定义模式选择操作,加载不同的界面
def choose_mode(selected_mode):
    if selected_mode == "get interpretable Result ":
        return gr.update(visible=True), gr.update(visible=False), gr.update(visible=False), "in Mode 1"
    elif selected_mode == "To give Feedbacks":
        return gr.update(visible=False), gr.update(visible=True), gr.update(visible=False), "in Mode 2"
    else:
        return gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), "please choose a mode"

# clear if reupload
def reset_state_mod1():
    return None, None, "State has been reset."

def reset_state_mod2():
    return None, None,None,gr.update(interactive=True),gr.update(interactive=True),gr.update(interactive=True),gr.update(interactive=True),gr.update(interactive=True)

# 主界面,包含模式选择和每种模式的界面
with gr.Blocks() as demo:
    gr.Markdown("# please choose a mode")

    # 模式选择器
    mode_selector = gr.Radio(["get interpretable Result ", "To give Feedbacks"], label="Mode Selection")

    # 模式1界面
    with gr.Column(visible=False) as mode1_ui:
        gr.Markdown("###  Please keep the object in the center of your image, click the Button to get interpretebale Result")
        mode1_button = gr.Button("get interpretable Classification")
        mode1_input_img=gr.Image()
        mode1_output_img= gr.Image()
        mode1_output_txt=gr.Markdown()

        #clear if reupload
        mode1_state = gr.State()
        mode1_input_img.upload(fn=reset_state_mod1, outputs=[mode1_output_img, mode1_state, mode1_output_txt])
        #clear if reupload


        mode1_button.click(fn=direct_inference,inputs=mode1_input_img, outputs=[mode1_output_img,mode1_output_txt])

    # 模式2界面
    with gr.Column(visible=False) as mode2_ui:
        gr.Markdown("### Please keep the object in the center of your image, click the Button 'Get some interpretable Features' to get options")
        image_input=gr.Image()
        gallery_output = gr.Gallery(label="Initial Label")
        text_output=gr.Markdown()
        but_generate=gr.Button("Get some interpretable Features")
        but_feedback_A=gr.Button("A")
        but_feedback_B=gr.Button("B")
        but_feedback_C=gr.Button("C")
        but_feedback_D=gr.Button("D")

        key_op = gr.State()
        A= gr.State("A")
        B= gr.State("B")
        C= gr.State("C")
        D= gr.State("D")
        
        #clear if reupload
        image_input.upload(
            fn=reset_state_mod2, 
            outputs=[gallery_output, key_op, text_output,but_generate,but_feedback_A,but_feedback_B,but_feedback_C,but_feedback_D]
        )

        #clear if reupload



        but_generate.click(fn=get_features_on_interface, inputs=image_input, outputs=[gallery_output,key_op,text_output,but_generate])

        but_feedback_A.click(fn=post_next_image, inputs=[A,key_op], outputs=[text_output,but_feedback_A,but_feedback_B,but_feedback_C,but_feedback_D])
        but_feedback_B.click(fn=post_next_image, inputs=[B,key_op], outputs=[text_output,but_feedback_A,but_feedback_B,but_feedback_C,but_feedback_D])
        but_feedback_C.click(fn=post_next_image, inputs=[C,key_op], outputs=[text_output,but_feedback_A,but_feedback_B,but_feedback_C,but_feedback_D])
        but_feedback_D.click(fn=post_next_image, inputs=[D,key_op], outputs=[text_output,but_feedback_A,but_feedback_B,but_feedback_C,but_feedback_D])
        # but_feedback_B.click(fn=post_next_image, inputs=image_list, outputs=[image_list,image_output,text_output])



    # 状态输出
    status_output = gr.Textbox(label="Status")

    # 选择器点击事件绑定
    mode_selector.change(choose_mode, inputs=mode_selector, outputs=[mode1_ui, mode2_ui, status_output])

demo.launch()