Spaces:
Runtime error
Runtime error
Catherine ZHOU
commited on
Commit
·
854a39c
1
Parent(s):
6e36199
add time logging feature
Browse files- app.py +44 -26
- flagged/log.csv +0 -6
- image_relevance/Selected Image/tmp1csn8eba.png +0 -0
- image_relevance/Selected Image/tmp34eovxb2.png +0 -0
- flagged/Selected Image/tmpor4tmvfk.png → image_relevance/Selected Image/tmp4sr36s7y.png +0 -0
- image_relevance/Selected Image/tmp8x2qj6kj.png +0 -0
- image_relevance/Selected Image/tmp9tyfvman.png +0 -0
- image_relevance/Selected Image/tmpahlshicv.png +0 -0
- image_relevance/Selected Image/tmpaz8war0u.png +0 -0
- image_relevance/Selected Image/tmpb1wtsdv6.png +0 -0
- image_relevance/Selected Image/tmpe6z9gfa8.png +0 -0
- image_relevance/Selected Image/tmpfyjhtayn.png +0 -0
- flagged/Selected Image/tmpt52dvzm3.png → image_relevance/Selected Image/tmpia246dpe.png +0 -0
- image_relevance/Selected Image/tmpje79qsl1.png +0 -0
- image_relevance/Selected Image/tmpjjbcya65.png +0 -0
- image_relevance/Selected Image/tmpjzce8bre.png +0 -0
- image_relevance/Selected Image/tmpl2y1u925.png +0 -0
- image_relevance/Selected Image/tmpocg26u3b.png +0 -0
- flagged/Selected Image/tmpbs578cha.png → image_relevance/Selected Image/tmpq0r079qb.png +0 -0
- flagged/Selected Image/tmpzsbu_wpf.png → image_relevance/Selected Image/tmps1en1_rb.png +0 -0
- image_relevance/Selected Image/tmpur68by9h.png +0 -0
- image_relevance/Selected Image/tmpym9gznv3.png +0 -0
- image_relevance/Selected Image/tmpysc13_0s.png +0 -0
- flagged/Selected Image/tmpsyidqwtr.png → image_relevance/Selected Image/tmpzbq06fsk.png +0 -0
- image_relevance/relevance_log.csv +24 -0
- time/log.csv +2 -0
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import gradio as gr
|
2 |
-
from gradio.flagging import FlaggingCallback
|
3 |
from gradio.components import IOComponent
|
4 |
from gradio_client import utils as client_utils
|
5 |
from transformers import CLIPProcessor, CLIPModel, CLIPTokenizer
|
@@ -10,6 +10,7 @@ import os
|
|
10 |
import logging
|
11 |
import csv
|
12 |
import datetime
|
|
|
13 |
from pathlib import Path
|
14 |
from typing import List, Any
|
15 |
|
@@ -55,7 +56,7 @@ class SaveRelevanceCallback(FlaggingCallback):
|
|
55 |
"""
|
56 |
logging.info("[SaveRelevance]: Flagging data...")
|
57 |
flagging_dir = self.flagging_dir
|
58 |
-
log_filepath = Path(flagging_dir) / "
|
59 |
is_new = not Path(log_filepath).exists()
|
60 |
headers = ["query", "selected image", "relevance", "username", "timestamp"]
|
61 |
|
@@ -122,6 +123,7 @@ def search_text(query, top_k=1):
|
|
122 |
[list]: list of images with captions that are related to the query.
|
123 |
[list]: list of images that are related to the query.
|
124 |
[list]: list of captions with the images that are related to the query.
|
|
|
125 |
"""
|
126 |
logging.info(f"[SearchText]: Searching for {query} with top_k={top_k}...")
|
127 |
|
@@ -145,25 +147,29 @@ def search_text(query, top_k=1):
|
|
145 |
image_caption.append((object, caption))
|
146 |
images.append(object)
|
147 |
captions.append(caption)
|
148 |
-
# selected_image_embs.append(img_emb[hit['corpus_id']])
|
149 |
-
#print(f'array length is: {len(image)}')
|
150 |
-
logging.info(f"[SearchText]: Found {len(image_caption)} images.")
|
151 |
-
return image_caption, images, captions
|
152 |
|
153 |
-
|
154 |
-
|
|
|
|
|
155 |
|
156 |
-
|
157 |
-
|
158 |
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
|
|
|
|
|
|
164 |
|
165 |
|
166 |
callback = SaveRelevanceCallback()
|
|
|
167 |
with gr.Blocks() as demo:
|
168 |
# create display
|
169 |
gr.Markdown(
|
@@ -177,12 +183,15 @@ with gr.Blocks() as demo:
|
|
177 |
- To use it, simply write which image you are looking for. See the examples section below for more details.
|
178 |
- After you submit your query, you will see a gallery of images that are related to your query.
|
179 |
- You can select the relevance of each image by using the dropdown menu.
|
|
|
|
|
180 |
|
181 |
---
|
182 |
|
183 |
To-do:
|
184 |
-
-
|
185 |
-
-
|
|
|
186 |
"""
|
187 |
)
|
188 |
with gr.Row():
|
@@ -207,8 +216,10 @@ with gr.Blocks() as demo:
|
|
207 |
], multiselect=False,
|
208 |
label="How relevent is this image?"
|
209 |
)
|
210 |
-
|
211 |
-
|
|
|
|
|
212 |
|
213 |
i = gr.Image(interactive=False, label="Selected Image", visible=False)
|
214 |
|
@@ -218,21 +229,28 @@ with gr.Blocks() as demo:
|
|
218 |
# states for passing images and texts to other blocks
|
219 |
images = gr.State()
|
220 |
texts = gr.State()
|
|
|
|
|
221 |
# when user input query and top_k
|
222 |
-
submit_btn.click(search_text, [query, top_k], [gallery, images, texts])
|
223 |
|
224 |
-
#
|
225 |
-
def display(images, texts, event_data: gr.SelectData):
|
226 |
-
return images[event_data.index], texts[event_data.index]
|
227 |
-
|
228 |
-
selected = gr.State()
|
229 |
gallery.select(display, [images, texts], [i, t])
|
230 |
|
231 |
# when user click save button
|
232 |
# we will flag the current query, selected image, relevance, and username
|
233 |
-
callback.setup([query, i, relevance, username], "
|
|
|
234 |
save_btn.click(lambda *args: callback.flag(args),
|
235 |
[query, i, relevance, username], preprocess=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
|
237 |
gr.Markdown(
|
238 |
"""
|
|
|
1 |
import gradio as gr
|
2 |
+
from gradio.flagging import FlaggingCallback, SimpleCSVLogger
|
3 |
from gradio.components import IOComponent
|
4 |
from gradio_client import utils as client_utils
|
5 |
from transformers import CLIPProcessor, CLIPModel, CLIPTokenizer
|
|
|
10 |
import logging
|
11 |
import csv
|
12 |
import datetime
|
13 |
+
import time
|
14 |
from pathlib import Path
|
15 |
from typing import List, Any
|
16 |
|
|
|
56 |
"""
|
57 |
logging.info("[SaveRelevance]: Flagging data...")
|
58 |
flagging_dir = self.flagging_dir
|
59 |
+
log_filepath = Path(flagging_dir) / "relevance_log.csv"
|
60 |
is_new = not Path(log_filepath).exists()
|
61 |
headers = ["query", "selected image", "relevance", "username", "timestamp"]
|
62 |
|
|
|
123 |
[list]: list of images with captions that are related to the query.
|
124 |
[list]: list of images that are related to the query.
|
125 |
[list]: list of captions with the images that are related to the query.
|
126 |
+
[time]: start time of marking relevance of the images.
|
127 |
"""
|
128 |
logging.info(f"[SearchText]: Searching for {query} with top_k={top_k}...")
|
129 |
|
|
|
147 |
image_caption.append((object, caption))
|
148 |
images.append(object)
|
149 |
captions.append(caption)
|
|
|
|
|
|
|
|
|
150 |
|
151 |
+
curr_time = time.time()
|
152 |
+
logging.info(f"[SearchText]: Found {len(image_caption)} images at "
|
153 |
+
f"{time.ctime(curr_time)}.")
|
154 |
+
return image_caption, images, captions, curr_time
|
155 |
|
156 |
+
def display(images, texts, event_data: gr.SelectData):
|
157 |
+
""" Display the selected image and its caption.
|
158 |
|
159 |
+
Args:
|
160 |
+
images ([list]): list of images
|
161 |
+
texts ([list]): list of captions
|
162 |
+
event_data (gr.SelectData): data from the select event
|
163 |
+
|
164 |
+
Returns:
|
165 |
+
[object]: image
|
166 |
+
[string]: caption
|
167 |
+
"""
|
168 |
+
return images[event_data.index], texts[event_data.index]
|
169 |
|
170 |
|
171 |
callback = SaveRelevanceCallback()
|
172 |
+
time_record = SimpleCSVLogger()
|
173 |
with gr.Blocks() as demo:
|
174 |
# create display
|
175 |
gr.Markdown(
|
|
|
183 |
- To use it, simply write which image you are looking for. See the examples section below for more details.
|
184 |
- After you submit your query, you will see a gallery of images that are related to your query.
|
185 |
- You can select the relevance of each image by using the dropdown menu.
|
186 |
+
- Click save buttom to save the image and its relevance to [a csv file](./image_relevance/relevance_log.csv).
|
187 |
+
- After you are done with all the images, click the `I'm Done!` buttom. We will save the time you spent to mark all images.
|
188 |
|
189 |
---
|
190 |
|
191 |
To-do:
|
192 |
+
- Add a way to save multiple image-relevance pairs at once.
|
193 |
+
- Improve image identification in the csv file. ✅
|
194 |
+
- Record time spent to mark all images. ✅
|
195 |
"""
|
196 |
)
|
197 |
with gr.Row():
|
|
|
216 |
], multiselect=False,
|
217 |
label="How relevent is this image?"
|
218 |
)
|
219 |
+
with gr.Column():
|
220 |
+
save_btn = gr.Button(
|
221 |
+
"Save after you select the relevance of each image")
|
222 |
+
save_all_btn = gr.Button("I'm finished!")
|
223 |
|
224 |
i = gr.Image(interactive=False, label="Selected Image", visible=False)
|
225 |
|
|
|
229 |
# states for passing images and texts to other blocks
|
230 |
images = gr.State()
|
231 |
texts = gr.State()
|
232 |
+
start_time = gr.Number(visible=False)
|
233 |
+
time_spent = gr.Number(visible=False)
|
234 |
# when user input query and top_k
|
235 |
+
submit_btn.click(search_text, [query, top_k], [gallery, images, texts, start_time])
|
236 |
|
237 |
+
# selected = gr.State()
|
|
|
|
|
|
|
|
|
238 |
gallery.select(display, [images, texts], [i, t])
|
239 |
|
240 |
# when user click save button
|
241 |
# we will flag the current query, selected image, relevance, and username
|
242 |
+
callback.setup([query, i, relevance, username], "image_relevance")
|
243 |
+
time_record.setup([query, username, start_time, time_spent], "time")
|
244 |
save_btn.click(lambda *args: callback.flag(args),
|
245 |
[query, i, relevance, username], preprocess=False)
|
246 |
+
|
247 |
+
def log_time(query, username, start_time):
|
248 |
+
logging.info(f"[SaveAll]: Saving time for {query} by {username} from {time.ctime(start_time)}.")
|
249 |
+
time_record.flag([query, username,
|
250 |
+
str(datetime.datetime.fromtimestamp(time.time())),
|
251 |
+
round(time.time() - start_time, 3)])
|
252 |
+
|
253 |
+
save_all_btn.click(log_time, [query, username, start_time], preprocess=False)
|
254 |
|
255 |
gr.Markdown(
|
256 |
"""
|
flagged/log.csv
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
query,selected image,relevance,username,timestamp
|
2 |
-
A cute kangaroo,tmpzsbu_wpf.png,3: Highly relevant,ghost,2023-04-11 09:34:45.422185
|
3 |
-
A cute kangaroo,tmpor4tmvfk.png,1: Related but not relevant,ghost,2023-04-11 09:34:51.574117
|
4 |
-
A cute kangaroo,tmpt52dvzm3.png,1: Related but not relevant,ghost,2023-04-11 09:34:55.734014
|
5 |
-
A cute kangaroo,tmpbs578cha.png,2: Somehow relevant,ghost,2023-04-11 09:35:02.914171
|
6 |
-
A cute kangaroo,tmpsyidqwtr.png,2: Somehow relevant,ghost,2023-04-11 09:35:05.194639
|
|
|
|
|
|
|
|
|
|
|
|
|
|
image_relevance/Selected Image/tmp1csn8eba.png
ADDED
![]() |
image_relevance/Selected Image/tmp34eovxb2.png
ADDED
![]() |
flagged/Selected Image/tmpor4tmvfk.png → image_relevance/Selected Image/tmp4sr36s7y.png
RENAMED
File without changes
|
image_relevance/Selected Image/tmp8x2qj6kj.png
ADDED
![]() |
image_relevance/Selected Image/tmp9tyfvman.png
ADDED
![]() |
image_relevance/Selected Image/tmpahlshicv.png
ADDED
![]() |
image_relevance/Selected Image/tmpaz8war0u.png
ADDED
![]() |
image_relevance/Selected Image/tmpb1wtsdv6.png
ADDED
![]() |
image_relevance/Selected Image/tmpe6z9gfa8.png
ADDED
![]() |
image_relevance/Selected Image/tmpfyjhtayn.png
ADDED
![]() |
flagged/Selected Image/tmpt52dvzm3.png → image_relevance/Selected Image/tmpia246dpe.png
RENAMED
File without changes
|
image_relevance/Selected Image/tmpje79qsl1.png
ADDED
![]() |
image_relevance/Selected Image/tmpjjbcya65.png
ADDED
![]() |
image_relevance/Selected Image/tmpjzce8bre.png
ADDED
![]() |
image_relevance/Selected Image/tmpl2y1u925.png
ADDED
![]() |
image_relevance/Selected Image/tmpocg26u3b.png
ADDED
![]() |
flagged/Selected Image/tmpbs578cha.png → image_relevance/Selected Image/tmpq0r079qb.png
RENAMED
File without changes
|
flagged/Selected Image/tmpzsbu_wpf.png → image_relevance/Selected Image/tmps1en1_rb.png
RENAMED
File without changes
|
image_relevance/Selected Image/tmpur68by9h.png
ADDED
![]() |
image_relevance/Selected Image/tmpym9gznv3.png
ADDED
![]() |
image_relevance/Selected Image/tmpysc13_0s.png
ADDED
![]() |
flagged/Selected Image/tmpsyidqwtr.png → image_relevance/Selected Image/tmpzbq06fsk.png
RENAMED
File without changes
|
image_relevance/relevance_log.csv
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
query,selected image,relevance,username,timestamp
|
2 |
+
Dog in the beach,tmpje79qsl1.png,3: Highly relevant,ghost,2023-04-13 21:32:37.271831
|
3 |
+
Dog in the beach,tmp1csn8eba.png,3: Highly relevant,ghost,2023-04-13 21:32:41.795481
|
4 |
+
Dog in the beach,,3: Highly relevant,ghost,2023-04-13 21:34:03.706180
|
5 |
+
Dog in the beach,tmp9tyfvman.png,3: Highly relevant,ghost,2023-04-13 21:34:10.290067
|
6 |
+
Dog in the beach,tmpb1wtsdv6.png,3: Highly relevant,ghost,2023-04-13 21:34:11.977960
|
7 |
+
Dog in the beach,tmp34eovxb2.png,3: Highly relevant,ghost,2023-04-13 21:40:36.600789
|
8 |
+
Dog in the beach,tmpur68by9h.png,3: Highly relevant,ghost,2023-04-13 21:40:42.447356
|
9 |
+
Dog in the beach,tmp8x2qj6kj.png,3: Highly relevant,ghost,2023-04-13 21:42:18.007103
|
10 |
+
Dog in the beach,tmpl2y1u925.png,3: Highly relevant,ghost,2023-04-13 21:42:20.047097
|
11 |
+
Dog in the beach,tmpysc13_0s.png,3: Highly relevant,ghost,2023-04-13 21:49:40.801899
|
12 |
+
Dog in the beach,tmpocg26u3b.png,3: Highly relevant,ghost,2023-04-13 21:49:48.951778
|
13 |
+
Dog in the beach,tmpahlshicv.png,3: Highly relevant,ghost,2023-04-13 21:49:50.739336
|
14 |
+
Dog in the beach,tmpe6z9gfa8.png,3: Highly relevant,ghost,2023-04-13 21:51:47.713334
|
15 |
+
Dog in the beach,tmpjjbcya65.png,3: Highly relevant,ghost,2023-04-13 21:51:49.356331
|
16 |
+
A cute kangaroo,tmps1en1_rb.png,3: Highly relevant,ghost,2023-04-13 21:57:34.666483
|
17 |
+
A cute kangaroo,tmp4sr36s7y.png,1: Related but not relevant,ghost,2023-04-13 21:57:38.472087
|
18 |
+
A cute kangaroo,tmpia246dpe.png,1: Related but not relevant,ghost,2023-04-13 21:57:40.077043
|
19 |
+
A cute kangaroo,tmpq0r079qb.png,1: Related but not relevant,ghost,2023-04-13 21:57:42.090842
|
20 |
+
A cute kangaroo,tmpzbq06fsk.png,2: Somehow relevant,ghost,2023-04-13 21:57:44.586175
|
21 |
+
Dog in the beach,tmpaz8war0u.png,3: Highly relevant,ghost,2023-04-13 22:02:05.191249
|
22 |
+
Dog in the beach,tmpjzce8bre.png,3: Highly relevant,ghost,2023-04-13 22:02:07.483166
|
23 |
+
Dois cachorros,tmpym9gznv3.png,3: Highly relevant,ghost,2023-04-13 22:02:18.203364
|
24 |
+
Dois cachorros,tmpfyjhtayn.png,2: Somehow relevant,ghost,2023-04-13 22:02:21.240419
|
time/log.csv
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
Dog in the beach,ghost,2023-04-13 22:02:08.108766,6.154
|
2 |
+
Dois cachorros,ghost,2023-04-13 22:02:22.012144,9.622
|