import gradio as gr import pandas as pd from PIL import Image from io import BytesIO import requests from sentence_transformers import SentenceTransformer, util import torch # Load the dataset (מכיל מוצרים עם שם ותיאור) df = pd.read_parquet("train-00000-of-00002-6cff4c59f91661c3.parquet") # נניח שהעמודות החשובות הן אלה — אם צריך עדכון, שימי לב לשמות העמודות df = df[["productDisplayName", "gender", "usage", "masterCategory", "subCategory"]].dropna() # Create a full-text field to encode df["full_text"] = df["productDisplayName"] + " | " + df["gender"] + " | " + df["usage"] + " | " + df["masterCategory"] + " > " + df["subCategory"] # Load model model = SentenceTransformer("all-MiniLM-L6-v2") embeddings = model.encode(df["full_text"].tolist(), convert_to_tensor=True, show_progress_bar=True) # Recommendation logic def recommend_products(user_input, top_k=5): if not user_input.strip(): return "⚠️ Please enter a product description.", [] user_vector = model.encode(user_input, convert_to_tensor=True) similarities = util.cos_sim(user_vector, embeddings)[0] top_indices = similarities.argsort(descending=True)[:top_k] results = [] for idx in top_indices: row = df.iloc[idx] title = row["productDisplayName"] description = f"{row['gender']} - {row['usage']} - {row['masterCategory']} > {row['subCategory']}" # Placeholder image – אין תמונות מקוריות בדאטה image_url = "https://via.placeholder.com/300x400.png?text=No+Image" try: response = requests.get(image_url) img = Image.open(BytesIO(response.content)).convert("RGB") except: img = Image.new("RGB", (300, 400), color=(200, 200, 200)) results.append((img, f"**{title}**\n{description}")) return "", results # Custom CSS custom_css = """ """ # Example inputs examples = [ "red summer dress", "black leather boots", "formal white shirt", "cotton trousers for men", "sports t-shirt" ] # Build the interface with gr.Blocks(title="Fashion Product Recommender") as demo: gr.HTML(custom_css) gr.Markdown(""" ## 🛍️ Fashion Product Recommender Type in a product you're looking for, and get AI-based recommendations from our fashion dataset. Use keywords like *'summer dress'* or *'men sports shoes'* to begin. """) with gr.Row(): with gr.Column(scale=1): user_input = gr.Textbox( label="🔎 What are you looking for?", placeholder="e.g. red formal shirt, denim jacket, kids shoes...", lines=2 ) submit_btn = gr.Button("✨ Recommend Products") quick_ex = gr.Examples(examples=examples, inputs=user_input, label="💡 Try these examples") error_box = gr.Textbox(visible=False, interactive=False, show_label=False) with gr.Column(scale=2): output_gallery = gr.Gallery( label="🎯 Top Matching Products", show_label=True, columns=2, rows=4, height=600, object_fit="cover" ) submit_btn.click(fn=recommend_products, inputs=user_input, outputs=[error_box, output_gallery]) demo.launch()