import gradio as gr from src.storage.state import state as State from src.modules.logger import logger as Logger from src.scenarios.interrogation import image_describe, image_test from src.repositories.images import images as ImagesRepo TITLE = """

CLIP Interrogator

""" def select_image(selection: gr.SelectData): Logger.info("Image selected") State.set_current_image(selection.value['image']['path']) def selected_image_describe(): Logger.info("Selected image describe") image_path = State.get_current_image() if not image_path: Logger.tmp_debug(image_path) print(image_path) gr.Warning("No image selected!") return None return image_describe(image_path) def selected_image_test(): Logger.info("Selected image test") image_path = State.get_current_image() if not image_path: gr.Warning("No image selected!") return None result = image_test(image_path, [ "Is it a photo? Answer only \"Yes\" or \"No\".", "Is it a human? Answer only \"Yes\" or \"No\".", "Is it alone? Answer only \"Yes\" or \"No\".", "Is it a woman? Answer only \"Yes\" or \"No\".", "Is it happy? Answer only \"Yes\" or \"No\"." ]) return result def build(): State.end() # Reset state on hot reload def analyze_tab(): with gr.Row(): with gr.Column(): gallery = gr.Gallery( label="Pickup any image", preview=True, value=ImagesRepo.get_images(), show_label=False, elem_id="gallery", columns=[2], rows=[2], object_fit="contain", height=800, allow_preview=False, selected_index=None, ) gallery.select(select_image, inputs=None, outputs=None) with gr.Column(): output_text = gr.Textbox(label="Description", elem_id="output-txt") describe_button = gr.Button("Describe") is_photo = gr.Checkbox(label="Is a photo?") is_human = gr.Checkbox(label="Is a human?") is_alone = gr.Checkbox(label="Alone?") is_woman = gr.Checkbox(label="Is it a woman?") is_happy = gr.Checkbox(label="Is it happy?") test_button = gr.Button("Test") describe_button.click(selected_image_describe, inputs=[], outputs=[output_text]) test_button.click(selected_image_test(), inputs=[], outputs=[is_photo, is_human, is_alone, is_woman, is_happy]) with gr.Blocks() as block: with gr.Column(elem_id="col-container"): gr.HTML(TITLE) with gr.Tab("Analyze"): analyze_tab() return block