Spaces:
Running
Running
traopia
commited on
Commit
·
a63daec
1
Parent(s):
58b25bf
updares app metadata similar images
Browse files
app.py
CHANGED
@@ -5,6 +5,27 @@ from search import search_images_by_text, get_similar_images
|
|
5 |
import requests
|
6 |
from io import BytesIO
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
import requests
|
9 |
from io import BytesIO
|
10 |
#@st.cache_data(show_spinner="Loading FashionDB...")
|
@@ -18,7 +39,7 @@ def load_data_hf():
|
|
18 |
response = requests.get(npy_url)
|
19 |
response.raise_for_status() # Raise error if download fails
|
20 |
embeddings = np.load(BytesIO(response.content))
|
21 |
-
|
22 |
return df, embeddings
|
23 |
|
24 |
|
@@ -96,7 +117,7 @@ with gr.Blocks() as demo:
|
|
96 |
max_year = int(df['year'].max())
|
97 |
|
98 |
start_year = gr.Slider(label="Start Year", minimum=min_year, maximum=max_year, value=2000, step=1)
|
99 |
-
end_year = gr.Slider(label="End Year", minimum=min_year, maximum=max_year, value=
|
100 |
|
101 |
query = gr.Textbox(label="Search", placeholder="e.g., pink dress")
|
102 |
search_button = gr.Button("Search")
|
@@ -129,14 +150,30 @@ with gr.Blocks() as demo:
|
|
129 |
outputs=[selected_idx, metadata_output]
|
130 |
)
|
131 |
|
|
|
|
|
132 |
def show_similar(idx, metadata):
|
133 |
-
|
|
|
134 |
|
|
|
|
|
135 |
show_similar_button = gr.Button("Show Similar Images")
|
136 |
show_similar_button.click(
|
137 |
show_similar,
|
138 |
inputs=[selected_idx, metadata_state],
|
139 |
-
outputs=[similar_gallery,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
)
|
141 |
|
142 |
demo.launch()
|
|
|
5 |
import requests
|
6 |
from io import BytesIO
|
7 |
|
8 |
+
def create_collection_url(row):
|
9 |
+
base_url = "https://www.vogue.com/fashion-shows/"
|
10 |
+
season = str(row["season"]).lower()
|
11 |
+
year = str(row["year"])
|
12 |
+
category = str(row["category"]).lower() if pd.notna(row["category"]) and row["category"] and str(row["category"]).lower() != "nan" else None
|
13 |
+
designer = str(row["designer"]).lower().replace(" ", "-")
|
14 |
+
|
15 |
+
# Add city if available
|
16 |
+
city = str(row["city"]).lower().replace(" ", "-") if pd.notna(row["city"]) and row["city"] and str(row["city"]).lower() != "nan" else None
|
17 |
+
|
18 |
+
if pd.isna(category) or category is None or category == "nan":
|
19 |
+
if city:
|
20 |
+
return f"{base_url}{city}-{season}-{year}/{designer}"
|
21 |
+
else:
|
22 |
+
return f"{base_url}{season}-{year}/{designer}"
|
23 |
+
else:
|
24 |
+
if city:
|
25 |
+
return f"{base_url}{city}-{season}-{year}-{category}/{designer}"
|
26 |
+
else:
|
27 |
+
return f"{base_url}{season}-{year}-{category}/{designer}"
|
28 |
+
|
29 |
import requests
|
30 |
from io import BytesIO
|
31 |
#@st.cache_data(show_spinner="Loading FashionDB...")
|
|
|
39 |
response = requests.get(npy_url)
|
40 |
response.raise_for_status() # Raise error if download fails
|
41 |
embeddings = np.load(BytesIO(response.content))
|
42 |
+
df['collection'] = df.apply(create_collection_url, axis=1)
|
43 |
return df, embeddings
|
44 |
|
45 |
|
|
|
117 |
max_year = int(df['year'].max())
|
118 |
|
119 |
start_year = gr.Slider(label="Start Year", minimum=min_year, maximum=max_year, value=2000, step=1)
|
120 |
+
end_year = gr.Slider(label="End Year", minimum=min_year, maximum=max_year, value=2024, step=1)
|
121 |
|
122 |
query = gr.Textbox(label="Search", placeholder="e.g., pink dress")
|
123 |
search_button = gr.Button("Search")
|
|
|
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,
|
164 |
inputs=[selected_idx, metadata_state],
|
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()
|