MatanYehudaDataAnalyst commited on
Commit
2ce7d1f
·
verified ·
1 Parent(s): 156fd1b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -18
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import gradio as gr
3
  import pandas as pd
4
  import numpy as np
@@ -7,27 +6,33 @@ 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
 
@@ -40,24 +45,38 @@ def recommend(input_data, input_mode):
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()
 
 
1
  import gradio as gr
2
  import pandas as pd
3
  import numpy as np
 
6
  from sklearn.metrics.pairwise import cosine_similarity
7
  from PIL import Image
8
 
9
+ # 1. טעינת המשאבים (Startup)
10
  print("⏳ Loading Model and Data...")
11
  model = SentenceTransformer('clip-ViT-B-32')
12
+
13
+ # טעינת המטא-דאטה מהקובץ ששמרנו
14
  df = pd.read_parquet("ven_inventory.parquet")
15
  inventory_embeddings = np.stack(df['embedding'].values)
16
 
17
+ # טעינת התמונות מהדאטה-סט
18
  dataset = load_dataset("detection-datasets/fashionpedia", split='train')
19
  subset = dataset.select(range(5050))
20
 
21
+ # פונקציית ההמלצה המעודכנת - מקבלת את כל הקלטים
22
+ def recommend(text_query, image_query, input_mode):
23
  if input_mode == "Text":
24
+ if not text_query: return None
25
+ query_emb = model.encode([text_query])
26
  else:
27
+ if image_query is None: return None
28
+ # המרת התמונה ל-PIL אם היא מגיעה כמערך נומפי
29
+ img = Image.fromarray(image_query).convert("RGB")
30
  query_emb = model.encode([img])
31
 
32
+ # נורמליזציה
33
  query_emb = query_emb / np.linalg.norm(query_emb)
34
 
35
+ # חישוב דמיון קוסינוס
36
  scores = cosine_similarity(query_emb, inventory_embeddings)[0]
37
  top_indices = np.argsort(scores)[::-1][:3]
38
 
 
45
  ))
46
  return results
47
 
48
+ # 2. בניית ממשק המשתמש (UI)
49
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
50
  gr.Markdown("# 🌿 Ven Community - Fashion Recommender")
51
  gr.Markdown("Search Ven's inventory by text or image.")
52
 
53
  with gr.Row():
54
  with gr.Column():
55
+ input_mode = gr.Radio(["Text", "Image"], label="Input Type", value="Text")
56
+
57
+ # יצירת שני רכיבי הקלט
58
+ text_input = gr.Textbox(label="Description", placeholder="e.g., White sneakers", visible=True)
59
+ image_input = gr.Image(label="Upload Image", visible=False)
60
+
61
+ search_btn = gr.Button("Find Similar Items", variant="primary")
62
 
63
  with gr.Column():
64
+ output_gallery = gr.Gallery(label="Results", columns=3)
65
+
66
+ # עדכון נראות הרכיבים לפי הבחירה ב-Radio
67
+ def update_visibility(mode):
68
+ if mode == "Text":
69
+ return gr.update(visible=True), gr.update(visible=False)
70
+ else:
71
+ return gr.update(visible=False), gr.update(visible=True)
72
 
73
+ input_mode.change(update_visibility, inputs=input_mode, outputs=[text_input, image_input])
 
74
 
75
+ # שליחת כל הרכיבים לפונקציה - זה התיקון הקריטי
76
+ search_btn.click(
77
+ fn=recommend,
78
+ inputs=[text_input, image_input, input_mode],
79
+ outputs=output_gallery
80
+ )
81
 
82
+ demo.launch()