Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import pandas as pd | |
| from utils.search_functions import run_search | |
| if __name__ == "__main__": | |
| # Define the Gradio interface | |
| with gr.Blocks() as demo: | |
| gr.Markdown("### Search Demo with Side-by-Side Comparison") | |
| with gr.Row(): | |
| with gr.Column(): | |
| search_instructions = """ | |
| **Choose the Type of Search** | |
| Decide how you'd like to search: | |
| - **Text**: Type in a description of the fashion item you're looking for. | |
| - **Image**: Upload an image of a fashion item you want to find similar results for. | |
| """ | |
| embedding_instructions = """ | |
| **Select How to Match Results** | |
| Pick the type of comparison you'd like: | |
| - **Text-based**: Find items based on the descriptions provided to the model. | |
| - **Image-based**: Find items based on the images provided to the model. | |
| - **Both (Balanced)**: Search using a combination of both text and image. This balances between the two equally. | |
| - **Both (Image-focused)**: Emphasize the image more than the text in the search for closer matches. | |
| """ | |
| gr.Markdown(search_instructions) | |
| with gr.Column(): | |
| gr.Markdown(embedding_instructions) | |
| with gr.Row(): | |
| query_type = gr.Radio(["text", "image"], label="Query Type", value="text") | |
| embedding_type = gr.Radio(["text", "image", "average", "weighted average"], label="Embedding Type") | |
| # Input fields | |
| query_input_text = gr.Textbox(label="Text Query", placeholder="Enter text query here", visible=True) | |
| query_input_image = gr.Image(label="Upload Image", type="filepath", visible=False) | |
| search_button = gr.Button("Search") | |
| viewing_instructions = """ | |
| **Viewing Your Results** | |
| The results are displayed in a scrollable gallery for each model. To explore each image more closely: | |
| - Scroll down to browse through the images. | |
| - Click on any image to open it in full view. | |
| - Once opened, you can flip through the images using the arrows or swipe gestures. | |
| Each image in the gallery contains the following information: | |
| - Similarity Score: Shows how closely the item matches your search (higher is better). | |
| - Metadata: Additional information about each item, such as category, brand, and material, is displayed beneath each image. | |
| """ | |
| with gr.Row(): | |
| gr.Markdown(viewing_instructions) | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("#### FashionCLIP Results") | |
| # Set the gallery to display 4 images per row (scrollable) | |
| fclip_output_images = gr.Gallery(label="FashionCLIP Images", columns=5) | |
| fclip_output_results = gr.Dataframe(label="FashionCLIP Search Results") | |
| with gr.Column(): | |
| gr.Markdown("#### FashionSigLip Results") | |
| # Set the gallery to display 4 images per row (scrollable) | |
| siglip_output_images = gr.Gallery(label="FashionSigLIP Images", columns=5) | |
| siglip_output_results = gr.Dataframe(label="FashionSigLIP Search Results") | |
| # Update input fields based on query type | |
| def update_query_input(query_type): | |
| if query_type == "text": | |
| return gr.update(visible=True), gr.update(visible=False) | |
| else: | |
| return gr.update(visible=False), gr.update(visible=True) | |
| query_type.change(update_query_input, inputs=query_type, outputs=[query_input_text, query_input_image]) | |
| # Error handling function | |
| def validate_and_search(query_type, embedding_type, query_input_text, query_input_image): | |
| if query_type == "text" and not query_input_text: | |
| return gr.Error("Please enter a text query"), None, None, None | |
| elif query_type == "image" and not query_input_image: | |
| return gr.Error("Please upload an image"), None, None, None | |
| else: | |
| return run_search(query_type, embedding_type, query_input_text, query_input_image) | |
| # Search button to trigger both searches with validation | |
| search_button.click( | |
| validate_and_search, | |
| inputs=[query_type, embedding_type, query_input_text, query_input_image], | |
| outputs=[fclip_output_images, fclip_output_results, siglip_output_images, siglip_output_results] | |
| ) | |
| # Launch the Gradio app | |
| demo.launch(share=True) |