MatanYehudaDataAnalyst commited on
Commit
5092729
·
verified ·
1 Parent(s): 11967d4

Upload 3 files

Browse files
Files changed (3) hide show
  1. app (1).py +63 -0
  2. requirements (1).txt +10 -0
  3. ven_inventory.parquet +3 -0
app (1).py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import gradio as gr
3
+ import pandas as pd
4
+ import numpy as np
5
+ from sentence_transformers import SentenceTransformer
6
+ from datasets import load_dataset
7
+ from sklearn.metrics.pairwise import cosine_similarity
8
+ from PIL import Image
9
+
10
+ # טעינת המודל והנתונים
11
+ print("⏳ Loading Model and Data...")
12
+ model = SentenceTransformer('clip-ViT-B-32')
13
+ df = pd.read_parquet("ven_inventory.parquet")
14
+ inventory_embeddings = np.stack(df['embedding'].values)
15
+
16
+ # טעינת התמונות (דורש חיבור אינטרנט ב-Space)
17
+ dataset = load_dataset("detection-datasets/fashionpedia", split='train')
18
+ subset = dataset.select(range(5050))
19
+
20
+ def recommend(input_data, input_mode):
21
+ # המרת קלט לוקטור
22
+ if input_mode == "Text":
23
+ query_emb = model.encode([input_data])
24
+ else:
25
+ img = Image.fromarray(input_data).convert("RGB")
26
+ query_emb = model.encode([img])
27
+
28
+ query_emb = query_emb / np.linalg.norm(query_emb)
29
+
30
+ # חישוב דמיון
31
+ scores = cosine_similarity(query_emb, inventory_embeddings)[0]
32
+ top_indices = np.argsort(scores)[::-1][:3]
33
+
34
+ results = []
35
+ for idx in top_indices:
36
+ actual_idx = int(idx)
37
+ results.append((
38
+ subset[actual_idx]['image'],
39
+ f"Match Score: {scores[actual_idx]:.2%} | Cluster: {df.iloc[actual_idx]['cluster']}"
40
+ ))
41
+ return results
42
+
43
+ # ממשק Gradio
44
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
45
+ gr.Markdown("# 🌿 Ven Community - Fashion Recommender")
46
+ gr.Markdown("Search Ven's inventory by text or image.")
47
+
48
+ with gr.Row():
49
+ with gr.Column():
50
+ mode = gr.Radio(["Text", "Image"], label="Input Type", value="Text")
51
+ txt = gr.Textbox(label="Description", visible=True)
52
+ img = gr.Image(label="Upload Image", visible=False)
53
+ btn = gr.Button("Find Similar Items", variant="primary")
54
+
55
+ with gr.Column():
56
+ gallery = gr.Gallery(label="Results", columns=3)
57
+
58
+ mode.change(lambda m: (gr.update(visible=m=="Text"), gr.update(visible=m=="Image")),
59
+ inputs=mode, outputs=[txt, img])
60
+
61
+ btn.click(fn=recommend, inputs=[txt if mode.value=="Text" else img, mode], outputs=gallery)
62
+
63
+ demo.launch()
requirements (1).txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ gradio
3
+ pandas
4
+ numpy
5
+ torch
6
+ sentence-transformers
7
+ pillow
8
+ pyarrow
9
+ datasets
10
+ scikit-learn
ven_inventory.parquet ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ab570a31e9f2d9ad4241487009b95b5c07d971737788ca065bc0647e3298ba1
3
+ size 11001565