Spaces:
Runtime error
Runtime error
File size: 4,656 Bytes
0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 70f4a27 0b99f61 70f4a27 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 e4ba163 9a98f07 0b99f61 e4ba163 9a98f07 0b99f61 e4ba163 0b99f61 e4ba163 0b99f61 9a98f07 |
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 |
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) |