Catherine ZHOU commited on
Commit
854a39c
·
1 Parent(s): 6e36199

add time logging feature

Browse files
Files changed (26) hide show
  1. app.py +44 -26
  2. flagged/log.csv +0 -6
  3. image_relevance/Selected Image/tmp1csn8eba.png +0 -0
  4. image_relevance/Selected Image/tmp34eovxb2.png +0 -0
  5. flagged/Selected Image/tmpor4tmvfk.png → image_relevance/Selected Image/tmp4sr36s7y.png +0 -0
  6. image_relevance/Selected Image/tmp8x2qj6kj.png +0 -0
  7. image_relevance/Selected Image/tmp9tyfvman.png +0 -0
  8. image_relevance/Selected Image/tmpahlshicv.png +0 -0
  9. image_relevance/Selected Image/tmpaz8war0u.png +0 -0
  10. image_relevance/Selected Image/tmpb1wtsdv6.png +0 -0
  11. image_relevance/Selected Image/tmpe6z9gfa8.png +0 -0
  12. image_relevance/Selected Image/tmpfyjhtayn.png +0 -0
  13. flagged/Selected Image/tmpt52dvzm3.png → image_relevance/Selected Image/tmpia246dpe.png +0 -0
  14. image_relevance/Selected Image/tmpje79qsl1.png +0 -0
  15. image_relevance/Selected Image/tmpjjbcya65.png +0 -0
  16. image_relevance/Selected Image/tmpjzce8bre.png +0 -0
  17. image_relevance/Selected Image/tmpl2y1u925.png +0 -0
  18. image_relevance/Selected Image/tmpocg26u3b.png +0 -0
  19. flagged/Selected Image/tmpbs578cha.png → image_relevance/Selected Image/tmpq0r079qb.png +0 -0
  20. flagged/Selected Image/tmpzsbu_wpf.png → image_relevance/Selected Image/tmps1en1_rb.png +0 -0
  21. image_relevance/Selected Image/tmpur68by9h.png +0 -0
  22. image_relevance/Selected Image/tmpym9gznv3.png +0 -0
  23. image_relevance/Selected Image/tmpysc13_0s.png +0 -0
  24. flagged/Selected Image/tmpsyidqwtr.png → image_relevance/Selected Image/tmpzbq06fsk.png +0 -0
  25. image_relevance/relevance_log.csv +24 -0
  26. 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) / "log.csv"
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
- # def select_image(evt: gr.SelectData):
154
- # """ Returns the index of the selected image
 
 
155
 
156
- # Argrs:
157
- # evt (SelectData): the event we are listening to
158
 
159
- # Returns:
160
- # int: index of the selected image
161
- # """
162
- # logging.info(f"[SelectImage]: Selected image {evt.index}.")
163
- # return evt.index
 
 
 
 
 
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
- - [ ] Add a way to save multiple image-relevance pairs at once.
185
- - [ ] Improve image identification in the csv file.
 
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
- save_btn = gr.Button(
211
- "Save after you select the relevance of each image")
 
 
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
- # Selected event
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], "flagged")
 
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