Spaces:
Sleeping
Sleeping
traopia
commited on
Commit
·
7411cee
1
Parent(s):
a63daec
home botton and recursive similarity search
Browse files
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 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
|
65 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
157 |
-
|
|
|
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 |
-
|
|
|
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()
|