Spaces:
Sleeping
Sleeping
import gradio as gr | |
import requests | |
API_URL = "http://localhost:8000/extract" | |
def get_product_data_from_url(url): | |
""" | |
Retrieve product data (images, measurements, materials) from the API. | |
Args: | |
url: Product URL to extract data from | |
Returns: | |
Tuple of (image_list, measurements_str, materials_str) | |
""" | |
try: | |
payload = { | |
"url": url, | |
"download_images": False | |
} | |
response = requests.post(API_URL, json=payload) | |
response.raise_for_status() | |
data = response.json() | |
# Extract images | |
images = [img["url"] for img in data.get("images", {}).values()] | |
# Format measurements into markdown | |
measurements = data.get("measurements", {}) | |
if measurements: | |
measurements_str = "\n".join([f"- **{k.title()}**: {v}" for k, v in measurements.items()]) | |
else: | |
measurements_str = "No measurements found." | |
# Format materials into markdown | |
materials = data.get("materials", {}) | |
if materials: | |
materials_str = "\n".join([f"- **{k.title()}**: {v}" for k, v in materials.items()]) | |
else: | |
materials_str = "No materials information found." | |
return images, measurements_str, materials_str | |
except Exception as e: | |
error_message = f"Error: {str(e)}" | |
return [], error_message, error_message | |
def create_interface(): | |
"""Create and configure the Gradio interface""" | |
with gr.Blocks(title="IKEA Product Image + Measurement Extractor") as demo: | |
gr.Markdown("## IKEA Product Image + Measurement Extractor") | |
gr.Markdown("Enter an IKEA product URL to extract images, measurements, and materials information.") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
# Input section | |
url_input = gr.Textbox( | |
label="Product URL", | |
placeholder="https://www.ikea.com/product/...", | |
info="Paste IKEA product URL here" | |
) | |
submit_btn = gr.Button("Extract Product Data", variant="primary") | |
# Results section - Measurements and Materials | |
with gr.Accordion("Product Information", open=True): | |
measurements_display = gr.Markdown(label="Measurements") | |
materials_display = gr.Markdown(label="Materials") | |
with gr.Column(scale=2): | |
# Gallery component for displaying images | |
image_gallery = gr.Gallery( | |
label="Product Images", | |
show_label=True, | |
columns=2, | |
height=500, | |
object_fit="contain" | |
) | |
# Set up the click event | |
submit_btn.click( | |
fn=get_product_data_from_url, | |
inputs=url_input, | |
outputs=[image_gallery, measurements_display, materials_display] | |
) | |
return demo | |
if __name__ == "__main__": | |
demo = create_interface() | |
demo.launch(share=False) |