Spaces:
Running
Running
File size: 9,347 Bytes
9b0a8c5 3bc3503 9b0a8c5 |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import gradio as gr
from functools import partial
from gradio_modal import Modal
from data.lang2eng_map import lang2eng_mapping
from data.words_map import words_mapping
import datetime
def build_main_page(concepts_dict, metadata_dict, local_storage):
try:
country, lang, _, _ = local_storage.value
if not country and not lang:
country, lang = "USA", "English"
except (TypeError, ValueError):
country, lang = "USA", "English"
with gr.Column(visible=False, elem_id="main_page") as main_ui_placeholder:
# Read the markdown file
with open(metadata_dict["USA"]["English"]["Task"], "r", encoding="utf-8") as f:
TASK_TEXT = f.read()
with open(metadata_dict["USA"]["English"]["Instructions"], "r", encoding="utf-8") as f:
INST_TEXT = f.read()
intro_text_inp = gr.Markdown(TASK_TEXT)
# gr.Markdown("## Data Collection")
with gr.Row(equal_height=True):
country_inp = gr.Textbox(label="Country", elem_id="country_inp", interactive=False)
language_inp = gr.Textbox(label="Language", elem_id="language_inp", interactive=False)
username_inp = gr.Textbox(label="email (optional)", type="email", elem_id="username_inp", interactive=False)
password_inp = gr.Textbox(label="password (optional)", type="password", elem_id="password_inp", interactive=False)
exit_btn = gr.Button("β¬
οΈ Change Language", elem_id="exit_btn", elem_classes=["compact-btn"])
with gr.Row(equal_height=True, ):
with gr.Column():
# Main category and concept row - SINGLE SELECTION
with gr.Row():
categories = concepts_dict["USA"]["English"]
category_btn = gr.Dropdown(choices=categories.keys(), interactive=True, label="Main Category",
allow_custom_value=False, elem_id="category_btn", multiselect=False, value=None)
concept_btn = gr.Dropdown(choices=[], interactive=True, label="Main Concept",
allow_custom_value=True, elem_id="concept_btn", multiselect=False)
image_inp = gr.Image(label="Image", elem_id="image_inp", format="png", height=512, width=768)
with gr.Row():
hide_all_faces_btn = gr.Button("π€ Hide All Faces", elem_id="hide_all_faces_btn")
hide_faces_btn = gr.Button("π€ Hide Specific Faces", elem_id="hide_faces_btn")
unhide_faces_btn = gr.Button("π Unhide Faces", elem_id="unhide_faces_btn")
image_url_inp = gr.Textbox(label="Image URL (Optional, if not uploading an image)", type="text", elem_id="image_url_inp")
with gr.Column():
# short_caption_inp = gr.Textbox(lines=2, label="Short Description", elem_id="short_caption_inp")
long_caption_inp = gr.Textbox(lines=6, label="Description", elem_id="long_caption_inp")
categories_list = sorted(list(concepts_dict["USA"]["English"].keys()))[:5]
def create_category_dropdown(category, index):
original_category = category
if lang in words_mapping:
display_category = words_mapping[lang].get(original_category, original_category)
else:
display_category = original_category
category_choices = concepts_dict[country][lang2eng_mapping.get(lang, lang)][original_category]
sorted_choices = sorted(category_choices)
dropdown = gr.Dropdown(
choices=sorted_choices,
interactive=True,
label=display_category,
allow_custom_value=True,
elem_id=f"category_{index+1}_concepts_btn",
multiselect=True,
value=None
)
return dropdown
category_concept_dropdowns = []
# First row - categories 1 and 2
with gr.Row():
dropdown1 = create_category_dropdown(categories_list[0], 0)
category_concept_dropdowns.append(dropdown1)
dropdown2 = create_category_dropdown(categories_list[1], 1)
category_concept_dropdowns.append(dropdown2)
# Second row - categories 3 and 4
# with gr.Row():
dropdown3 = create_category_dropdown(categories_list[2], 2)
category_concept_dropdowns.append(dropdown3)
dropdown4 = create_category_dropdown(categories_list[3], 3)
category_concept_dropdowns.append(dropdown4)
dropdown5 = create_category_dropdown(categories_list[4], 4)
category_concept_dropdowns.append(dropdown5)
# Third row - category 5 and instructions button
with gr.Row(equal_height=True):
# dropdown5 = create_category_dropdown(categories_list[4], 4)
# category_concept_dropdowns.append(dropdown5)
instruct_btn = gr.Button("π Show Instructions")
with Modal(visible=False) as modal:
intro_text_inst_inp = gr.Markdown(INST_TEXT)
with gr.Column():
# with gr.Row():
# instruct_btn = gr.Button("π Show Instructions")
# with Modal(visible=False) as modal:
# intro_text_inst_inp = gr.Markdown(INST_TEXT)
with gr.Row(equal_height=True):
clear_btn = gr.Button("Clear", variant="huggingface", elem_id="clear_btn")
with Modal(visible=False, allow_user_close=False) as modal_saving:
modal_saving_text = gr.Markdown("β³ Please wait while your submission is being saved.")
with Modal(visible=False) as modal_data_saved:
modal_data_saved_text = gr.Markdown("Your data has been saved successfully. The data in the table below will be updated shortly. You can now close this window.")
submit_btn = gr.Button("Submit", variant="primary", interactive=False, elem_id="submit_btn")
with Modal(visible=False) as modal_exclude_confirm:
gr.Markdown("## Are you sure you want to exclude this example?")
gr.Markdown("This action will permanently delete the example.")
with gr.Row():
cancel_exclude_btn = gr.Button("Cancel")
confirm_exclude_btn = gr.Button("Yes, delete", variant="stop")
exclude_btn = gr.Button("Exclude Selected Example", variant="stop", visible=True)
with gr.Column():
timestamp_btn = gr.Textbox(datetime.datetime.now(), label="Timestamp", visible=False, elem_id="timestamp_btn", interactive=False) # FIXME visible=False)
exampleid_btn = gr.Textbox(label="ID", visible=False, elem_id="example_id", interactive=False) # FIXME visible=False)
output_dict = {
"main_ui_placeholder": main_ui_placeholder,
"country_inp": country_inp,
"language_inp": language_inp,
"username_inp": username_inp,
"password_inp": password_inp,
"image_inp": image_inp,
"image_url_inp": image_url_inp,
"long_caption_inp": long_caption_inp,
"category_btn": category_btn,
"concept_btn": concept_btn,
"category_concept_dropdowns": category_concept_dropdowns,
"category_1_concepts": category_concept_dropdowns[0],
"category_2_concepts": category_concept_dropdowns[1],
"category_3_concepts": category_concept_dropdowns[2],
"category_4_concepts": category_concept_dropdowns[3],
"category_5_concepts": category_concept_dropdowns[4],
"instruct_btn": instruct_btn,
"clear_btn": clear_btn,
"submit_btn": submit_btn,
"modal": modal,
"modal_saving": modal_saving,
"modal_data_saved": modal_data_saved,
"timestamp_btn": timestamp_btn,
"exampleid_btn": exampleid_btn,
"exit_btn": exit_btn,
"intro_text_inp": intro_text_inp,
"intro_text_inst_inp": intro_text_inst_inp,
"modal_saving_text": modal_saving_text,
"modal_data_saved_text": modal_data_saved_text,
"hide_faces_btn": hide_faces_btn,
"hide_all_faces_btn": hide_all_faces_btn,
"unhide_faces_btn": unhide_faces_btn,
"exclude_btn": exclude_btn,
"modal_exclude_confirm": modal_exclude_confirm,
"cancel_exclude_btn": cancel_exclude_btn,
"confirm_exclude_btn": confirm_exclude_btn,
}
return output_dict
|