import gradio as gr import yaml from src.utils import load_words, save_results, load_global_variable, load_saliencies from src.style import css import random random_images = [ "https://picsum.photos/200", "https://picsum.photos/201", "https://picsum.photos/202", "https://picsum.photos/203", "https://picsum.photos/204", "https://picsum.photos/205", "https://picsum.photos/206", "https://picsum.photos/207", "https://picsum.photos/208", "https://picsum.photos/209", "https://picsum.photos/210", "https://picsum.photos/211", "https://picsum.photos/212", "https://picsum.photos/213", "https://picsum.photos/214", ] def update_img_count(state): count = state print('oooooooo', count) return gr.State(count + 1) def main(): config = yaml.safe_load(open("config/config.yaml")) global_var = load_global_variable() #images = load_images(global_var) #saliency = load_saliencies(global_var) words = ['grad-cam', 'lime', 'sidu', 'rise'] options = ['1', '2', '3', '4'] with gr.Blocks(theme=gr.themes.Glass(), css=css) as demo: # Main App Components title = gr.Markdown("# Saliency evaluation - experiment 1") user_state = gr.State(0) print('user_state', user_state) #user_counter = gr.Textbox(str(global_var), visible=False) #img_counter = gr.Textbox(str(0), visible=False) with gr.Row(): gr.Markdown("### Target image") gr.Markdown("### Grad-cam") gr.Markdown("### Lime") gr.Markdown("### Sidu") gr.Markdown("### Rise") with gr.Row(): # generate random integer value target_img = gr.Image(random_images[random.randint(0, 5)]) saliency_gradcam = gr.Image(random_images[random.randint(0, 5)]) saliency_lime = gr.Image(random_images[random.randint(0, 5)]) saliency_rise = gr.Image(random_images[random.randint(0, 5)]) saliency_sidu = gr.Image(random_images[random.randint(0, 5)]) with gr.Row(): dropdown1 = gr.Dropdown(choices=options, label="grad-cam") dropdown2 = gr.Dropdown(choices=options, label="lime") dropdown3 = gr.Dropdown(choices=options, label="sidu") dropdown4 = gr.Dropdown(choices=options, label="rise") gr.Markdown("### Image examples of the same class") with gr.Row(): # generate random integer value img1 = gr.Image(random_images[random.randint(0, 5)]) img2 = gr.Image(random_images[random.randint(0, 5)]) img3 = gr.Image(random_images[random.randint(0, 5)]) img4 = gr.Image(random_images[random.randint(0, 5)]) img5 = gr.Image(random_images[random.randint(0, 5)]) img6 = gr.Image(random_images[random.randint(0, 5)]) img7 = gr.Image(random_images[random.randint(0, 5)]) img8 = gr.Image(random_images[random.randint(0, 5)]) img9 = gr.Image(random_images[random.randint(0, 5)]) img10 = gr.Image(random_images[random.randint(0, 5)]) img11 = gr.Image(random_images[random.randint(0, 5)]) img12 = gr.Image(random_images[random.randint(0, 5)]) img13 = gr.Image(random_images[random.randint(0, 5)]) img14 = gr.Image(random_images[random.randint(0, 5)]) img15 = gr.Image(random_images[random.randint(0, 5)]) img16 = gr.Image(random_images[random.randint(0, 5)]) img17 = gr.Image(random_images[random.randint(0, 5)]) img18 = gr.Image(random_images[random.randint(0, 5)]) submit_button = gr.Button("Submit") finish_button = gr.Button("Finish", visible=False) def update_images(dropdown1, dropdown2, dropdown3, dropdown4, user_state): #print('dropdowns', dropdowns) #str_dropdowns = str(dropdowns) # remove the curly braces #dropdowns = str_dropdowns[1:-1] #dropdowns = [r.split(":")[1].strip().replace("'", "") for r in dropdowns.split(",")] print('dropdowns', dropdown1, dropdown2, dropdown3, dropdown4) rank = [dropdown1,dropdown2,dropdown3,dropdown4] print('rank', rank) # image target and saliency images target_img = gr.Image(random_images[random.randint(0, 5)]) saliency_gradcam = gr.Image(random_images[random.randint(0, 5)]) saliency_lime = gr.Image(random_images[random.randint(0, 5)]) saliency_rise = gr.Image(random_images[random.randint(0, 5)]) saliency_sidu = gr.Image(random_images[random.randint(0, 5)]) # image examples img1 = gr.Image(random_images[random.randint(0, 5)]) img2 = gr.Image(random_images[random.randint(0, 5)]) img3 = gr.Image(random_images[random.randint(0, 5)]) img4 = gr.Image(random_images[random.randint(0, 5)]) img5 = gr.Image(random_images[random.randint(0, 5)]) img6 = gr.Image(random_images[random.randint(0, 5)]) img7 = gr.Image(random_images[random.randint(0, 5)]) img8 = gr.Image(random_images[random.randint(0, 5)]) img9 = gr.Image(random_images[random.randint(0, 5)]) img10 = gr.Image(random_images[random.randint(0, 5)]) img11 = gr.Image(random_images[random.randint(0, 5)]) img12 = gr.Image(random_images[random.randint(0, 5)]) img13 = gr.Image(random_images[random.randint(0, 5)]) img14 = gr.Image(random_images[random.randint(0, 5)]) img15 = gr.Image(random_images[random.randint(0, 5)]) img16 = gr.Image(random_images[random.randint(0, 5)]) img17 = gr.Image(random_images[random.randint(0, 5)]) img18 = gr.Image(random_images[random.randint(0, 5)]) if not isinstance(user_state, int): if user_state.value == 5: finish_button.visible = True submit_button.visible = False else: finish_button.visible = False submit_button.visible = True return target_img, saliency_gradcam, saliency_lime, saliency_rise, saliency_sidu, img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11, img12, img13, img14, img15, img16, img17, img18 def update_state(state): count = state if isinstance(state, int) else state.value print('\n\ncount', count) return gr.State(count + 1) def update_buttons(state): count = state if isinstance(state, int) else state.value finish_button, submit_button = None, None if count == 5: finish_button = gr.Button("Finish", visible=True) submit_button = gr.Button("Submit", visible=False) else: finish_button = gr.Button("Finish", visible=False) submit_button = gr.Button("Submit", visible=True) return submit_button, finish_button submit_button.click( update_state, inputs=user_state, outputs=user_state ).then( update_buttons, inputs=user_state, outputs={submit_button, finish_button} ).then( update_images, inputs=[dropdown1, dropdown2, dropdown3, dropdown4, user_state], outputs={target_img, saliency_gradcam, saliency_lime, saliency_rise, saliency_sidu, img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11, img12, img13, img14, img15, img16, img17, img18}, ) def redirect(): pass finish_button.click(redirect, js="window.location = 'https://marcoparola.github.io/saliency-evaluation-app/end'") demo.load() demo.launch() if __name__ == "__main__": main()