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) |