traopia commited on
Commit
7411cee
·
1 Parent(s): a63daec

home botton and recursive similarity search

Browse files
Files changed (1) hide show
  1. app.py +63 -24
app.py CHANGED
@@ -43,26 +43,26 @@ def load_data_hf():
43
  return df, embeddings
44
 
45
 
46
- from huggingface_hub import hf_hub_download
47
- def load_data1():
48
- # Login using e.g. `huggingface-cli login` to access this dataset
49
- path = hf_hub_download(
50
- repo_id="traopia/fashion_show_data_all_embeddings",
51
- filename="fashion_show_data_all_embeddings.json"
52
- )
53
- df = pd.read_json(path, lines = True)
54
-
55
- #df = pd.read_json("hf://datasets/traopia/fashion_show_data_all_embeddings.json/fashion_show_data_all_embeddings.json", lines=True)
56
- df["fashion_clip_image"] = df["fashion_clip_image"].apply(lambda x: x[0] if isinstance(x, list) else x)
57
- df["image_urls"] = df["image_urls"].apply(lambda x: x[0] if x is not None else None)
58
- df = df.rename(columns={"fashion_house":"designer", "image_urls":"url", "URL":"collection"})
59
 
60
- df = df.dropna(subset="fashion_clip_image")
61
- df = df.reset_index(drop=True)
62
- df["key"] = df.index
63
- embeddings = np.vstack(df["fashion_clip_image"].values)
64
 
65
- return df, embeddings
66
 
67
  df, embeddings = load_data_hf()
68
 
@@ -99,10 +99,14 @@ def show_metadata(idx, metadata):
99
  return out
100
 
101
  def find_similar(idx, metadata):
 
 
102
  key = metadata[idx]["key"]
103
  similar_df = get_similar_images(df, key, embeddings, top_k=5)
104
  return similar_df["url"].tolist(), similar_df.to_dict(orient="records")
105
 
 
 
106
  # Gradio UI
107
  with gr.Blocks() as demo:
108
  gr.Markdown("# 👗 FashionDB Explorer")
@@ -124,6 +128,7 @@ with gr.Blocks() as demo:
124
 
125
  result_gallery = gr.Gallery(label="Search Results", columns=5, height="auto")
126
  metadata_output = gr.Markdown()
 
127
  similar_gallery = gr.Gallery(label="Similar Images", columns = 5, height="auto")
128
 
129
  metadata_state = gr.State([])
@@ -139,25 +144,38 @@ with gr.Blocks() as demo:
139
  outputs=[result_gallery, metadata_state, metadata_output, similar_gallery]
140
  )
141
 
 
 
 
 
142
  def handle_click(evt: gr.SelectData, metadata):
143
  idx = evt.index
144
  md = show_metadata(idx, metadata)
145
- return idx, md
 
 
 
 
 
 
 
146
 
147
  result_gallery.select(
148
  handle_click,
149
  inputs=[metadata_state],
150
- outputs=[selected_idx, metadata_output]
151
  )
152
 
153
  # def show_similar(idx, metadata):
154
  # return find_similar(int(idx), metadata)
155
  def show_similar(idx, metadata):
156
- similar_images, similar_metadata = find_similar(int(idx), metadata)
157
- return similar_images, similar_metadata
 
158
 
159
  similar_metadata_state = gr.State()
160
  similar_metadata_output = gr.Markdown()
 
161
  show_similar_button = gr.Button("Show Similar Images")
162
  show_similar_button.click(
163
  show_similar,
@@ -165,15 +183,36 @@ with gr.Blocks() as demo:
165
  outputs=[similar_gallery, similar_metadata_state]
166
  )
167
 
 
 
 
 
 
168
  def handle_similar_click(evt: gr.SelectData, metadata):
169
  idx = evt.index
170
  md = show_metadata(idx, metadata)
171
- return idx, md
 
172
 
 
 
 
 
 
173
  similar_gallery.select(
174
  handle_similar_click,
175
  inputs=[similar_metadata_state],
176
- outputs=[selected_idx, similar_metadata_output]
 
 
 
 
 
 
 
 
 
 
177
  )
178
 
179
  demo.launch()
 
43
  return df, embeddings
44
 
45
 
46
+ # from huggingface_hub import hf_hub_download
47
+ # def load_data1():
48
+ # # Login using e.g. `huggingface-cli login` to access this dataset
49
+ # path = hf_hub_download(
50
+ # repo_id="traopia/fashion_show_data_all_embeddings",
51
+ # filename="fashion_show_data_all_embeddings.json"
52
+ # )
53
+ # df = pd.read_json(path, lines = True)
54
+
55
+ # #df = pd.read_json("hf://datasets/traopia/fashion_show_data_all_embeddings.json/fashion_show_data_all_embeddings.json", lines=True)
56
+ # df["fashion_clip_image"] = df["fashion_clip_image"].apply(lambda x: x[0] if isinstance(x, list) else x)
57
+ # df["image_urls"] = df["image_urls"].apply(lambda x: x[0] if x is not None else None)
58
+ # df = df.rename(columns={"fashion_house":"designer", "image_urls":"url", "URL":"collection"})
59
 
60
+ # df = df.dropna(subset="fashion_clip_image")
61
+ # df = df.reset_index(drop=True)
62
+ # df["key"] = df.index
63
+ # embeddings = np.vstack(df["fashion_clip_image"].values)
64
 
65
+ # return df, embeddings
66
 
67
  df, embeddings = load_data_hf()
68
 
 
99
  return out
100
 
101
  def find_similar(idx, metadata):
102
+ if not isinstance(idx, int) or idx >= len(metadata) or idx < 0:
103
+ return [] # or gr.update(visible=False)
104
  key = metadata[idx]["key"]
105
  similar_df = get_similar_images(df, key, embeddings, top_k=5)
106
  return similar_df["url"].tolist(), similar_df.to_dict(orient="records")
107
 
108
+
109
+
110
  # Gradio UI
111
  with gr.Blocks() as demo:
112
  gr.Markdown("# 👗 FashionDB Explorer")
 
128
 
129
  result_gallery = gr.Gallery(label="Search Results", columns=5, height="auto")
130
  metadata_output = gr.Markdown()
131
+ reference_image = gr.Image(label="Reference Image", interactive=False)
132
  similar_gallery = gr.Gallery(label="Similar Images", columns = 5, height="auto")
133
 
134
  metadata_state = gr.State([])
 
144
  outputs=[result_gallery, metadata_state, metadata_output, similar_gallery]
145
  )
146
 
147
+ # def handle_click(evt: gr.SelectData, metadata):
148
+ # idx = evt.index
149
+ # md = show_metadata(idx, metadata)
150
+ # return idx, md
151
  def handle_click(evt: gr.SelectData, metadata):
152
  idx = evt.index
153
  md = show_metadata(idx, metadata)
154
+ img_path = metadata[idx]["url"]
155
+ return idx, md, img_path
156
+
157
+ # result_gallery.select(
158
+ # handle_click,
159
+ # inputs=[metadata_state],
160
+ # outputs=[selected_idx, metadata_output]
161
+ # )
162
 
163
  result_gallery.select(
164
  handle_click,
165
  inputs=[metadata_state],
166
+ outputs=[selected_idx, metadata_output, reference_image]
167
  )
168
 
169
  # def show_similar(idx, metadata):
170
  # return find_similar(int(idx), metadata)
171
  def show_similar(idx, metadata):
172
+ if idx is None or not str(idx).isdigit():
173
+ return [],[] # safe fallback
174
+ return find_similar(int(idx), metadata)
175
 
176
  similar_metadata_state = gr.State()
177
  similar_metadata_output = gr.Markdown()
178
+
179
  show_similar_button = gr.Button("Show Similar Images")
180
  show_similar_button.click(
181
  show_similar,
 
183
  outputs=[similar_gallery, similar_metadata_state]
184
  )
185
 
186
+ # def handle_similar_click(evt: gr.SelectData, metadata):
187
+ # idx = evt.index
188
+ # md = show_metadata(idx, metadata)
189
+ # return idx, md
190
+
191
  def handle_similar_click(evt: gr.SelectData, metadata):
192
  idx = evt.index
193
  md = show_metadata(idx, metadata)
194
+ img_path = metadata[idx]["url"]
195
+ return idx, md, img_path
196
 
197
+ # similar_gallery.select(
198
+ # handle_similar_click,
199
+ # inputs=[similar_metadata_state],
200
+ # outputs=[selected_idx, similar_metadata_output]
201
+ # )
202
  similar_gallery.select(
203
  handle_similar_click,
204
  inputs=[similar_metadata_state],
205
+ outputs=[selected_idx, similar_metadata_output, reference_image]
206
+ )
207
+
208
+ back_button = gr.Button("Back to Home")
209
+
210
+ def back_to_home():
211
+ return [], "", None # clear similar_gallery, metadata_output, reference image
212
+
213
+ back_button.click(
214
+ back_to_home,
215
+ outputs=[similar_gallery, similar_metadata_output, reference_image]
216
  )
217
 
218
  demo.launch()