|
import gradio as gr |
|
import sys |
|
import logging |
|
from inference import main, load_index, load_metadata |
|
from PIL import Image |
|
|
|
def run_pipeline(prompt, image): |
|
""" |
|
Gradio interface function to run the inference pipeline |
|
""" |
|
try: |
|
logging.info("Loading required data...") |
|
index = load_index() |
|
metadata_df = load_metadata() |
|
|
|
logging.info("Starting inference pipeline...") |
|
results = main(prompt, image, index, metadata_df) |
|
|
|
|
|
image_path = results['generated_image_path'] |
|
similar_products = results['similar_products'] |
|
|
|
image_output = Image.open(image_path) |
|
|
|
|
|
product_urls = [] |
|
for i, product in enumerate(similar_products, 1): |
|
similarity = 1 / (1 + product['distance']) |
|
product_urls.append(f"{i}. Similarity: {similarity:.2f}\nProduct: {product['product_url']}\n") |
|
|
|
formatted_urls = "\n".join(product_urls) |
|
return image_output, formatted_urls |
|
|
|
except Exception as e: |
|
logging.error(f"Error in pipeline: {str(e)}") |
|
return None, None |
|
|
|
|
|
iface = gr.Interface( |
|
fn=run_pipeline, |
|
inputs=[ |
|
gr.Textbox(label="Enter your prompt", placeholder="e.g., modern living room with minimalist furniture"), |
|
gr.Image(label="Upload control image", type="filepath") |
|
], |
|
outputs=[ |
|
gr.Image(label="Generated Image"), |
|
gr.Textbox(label="Similar IKEA Products", lines=15) |
|
], |
|
title="Interior Design Image Generator", |
|
description="Upload an image and provide a prompt to generate interior design variations and find similar IKEA products.", |
|
theme="default", |
|
flagging_mode="never" |
|
) |
|
|
|
if __name__ == "__main__": |
|
iface.launch(share=True) |