MarcoParola's picture
develop a preliminary version of experiment1
2c80634
raw
history blame
8.05 kB
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()