taesiri commited on
Commit
3fe488b
·
1 Parent(s): a55e212
Files changed (1) hide show
  1. app.py +29 -16
app.py CHANGED
@@ -151,7 +151,7 @@ def load_question_data(question_id):
151
 
152
  def load_post_image(post_id):
153
  if not post_id:
154
- return [None] * 21 # source image + 10 pairs of (image, text)
155
 
156
  idx = POST_ID_TO_ID_MAP[post_id]
157
  source_image = VALID_DATASET[idx]["image"]
@@ -165,21 +165,25 @@ def load_post_image(post_id):
165
  metadata = json.load(f)
166
 
167
  # Initialize response data
168
- responses = [(None, "")] * 10
169
 
170
  # Fill in existing responses
171
  for response in metadata["responses"]:
172
  idx = response["response_id"]
173
  if idx < 10: # Ensure we don't exceed our UI limit
174
  image_path = os.path.join(post_folder, response["image_path"])
175
- responses[idx] = (image_path, response["answer_text"])
 
 
 
 
176
 
177
  # Flatten responses for output
178
- flat_responses = [item for pair in responses for item in pair]
179
  return [source_image] + flat_responses
180
 
181
  # If no existing responses, return source image and empty responses
182
- return [source_image] + [None] * 20
183
 
184
 
185
  def generate_json_files(source_image, responses, post_id):
@@ -188,7 +192,7 @@ def generate_json_files(source_image, responses, post_id):
188
 
189
  Args:
190
  source_image: Path to the source image
191
- responses: List of (image, answer) tuples
192
  post_id: The post ID from the dataset
193
  """
194
  # Create parent data folder if it doesn't exist
@@ -210,7 +214,7 @@ def generate_json_files(source_image, responses, post_id):
210
 
211
  # Create responses data
212
  responses_data = []
213
- for idx, (response_image, answer_text) in enumerate(responses):
214
  if response_image and answer_text: # Only process if both image and text exist
215
  response_folder = os.path.join(post_folder, f"response_{idx}")
216
  os.makedirs(response_folder)
@@ -227,6 +231,7 @@ def generate_json_files(source_image, responses, post_id):
227
  {
228
  "response_id": idx,
229
  "answer_text": answer_text,
 
230
  "image_path": f"response_{idx}/response_image.png",
231
  }
232
  )
@@ -266,7 +271,8 @@ with gr.Blocks() as demo:
266
  with gr.Tab(f"Response {i+1}"):
267
  img = gr.Image(label=f"Response Image {i+1}", type="filepath")
268
  txt = gr.Textbox(label=f"Model Name {i+1}", lines=2)
269
- responses.append((img, txt))
 
270
 
271
  with gr.Row():
272
  submit_btn = gr.Button("Submit All Responses")
@@ -281,38 +287,45 @@ with gr.Blocks() as demo:
281
  gr.Warning("Please select a post ID first!")
282
  return
283
 
284
- # Convert flat response_data into pairs of (image, text)
285
- response_pairs = list(zip(response_data[::2], response_data[1::2]))
 
 
286
 
287
- # Filter out empty responses
288
  valid_responses = [
289
- (img, txt) for img, txt in response_pairs if img is not None and txt
 
 
290
  ]
291
 
292
  if not valid_responses:
293
  gr.Warning("Please provide at least one response (image + text)!")
294
  return
295
 
 
296
  generate_json_files(source_img, valid_responses, post_id)
297
  gr.Info("Responses saved successfully! 🎉")
298
 
299
  def clear_form():
300
- outputs = [None] * (1 + 20) # 1 source image + 10 pairs of (image, text)
 
 
301
  return outputs
302
 
303
  # Connect components
304
  post_id_dropdown.change(
305
  fn=load_post_image,
306
  inputs=[post_id_dropdown],
307
- outputs=[source_image] + [comp for pair in responses for comp in pair],
308
  )
309
 
310
  submit_inputs = [source_image, post_id_dropdown] + [
311
- comp for pair in responses for comp in pair
312
  ]
313
  submit_btn.click(fn=submit_responses, inputs=submit_inputs)
314
 
315
- clear_outputs = [source_image] + [comp for pair in responses for comp in pair]
316
  clear_btn.click(fn=clear_form, outputs=clear_outputs)
317
 
318
 
 
151
 
152
  def load_post_image(post_id):
153
  if not post_id:
154
+ return [None] * 31 # source image + 10 triplets of (image, text, notes)
155
 
156
  idx = POST_ID_TO_ID_MAP[post_id]
157
  source_image = VALID_DATASET[idx]["image"]
 
165
  metadata = json.load(f)
166
 
167
  # Initialize response data
168
+ responses = [(None, "", "")] * 10 # Initialize with empty notes
169
 
170
  # Fill in existing responses
171
  for response in metadata["responses"]:
172
  idx = response["response_id"]
173
  if idx < 10: # Ensure we don't exceed our UI limit
174
  image_path = os.path.join(post_folder, response["image_path"])
175
+ responses[idx] = (
176
+ image_path,
177
+ response["answer_text"],
178
+ response.get("notes", ""), # Get notes with empty string as default
179
+ )
180
 
181
  # Flatten responses for output
182
+ flat_responses = [item for triplet in responses for item in triplet]
183
  return [source_image] + flat_responses
184
 
185
  # If no existing responses, return source image and empty responses
186
+ return [source_image] + [None] * 30
187
 
188
 
189
  def generate_json_files(source_image, responses, post_id):
 
192
 
193
  Args:
194
  source_image: Path to the source image
195
+ responses: List of (image, answer, notes) tuples
196
  post_id: The post ID from the dataset
197
  """
198
  # Create parent data folder if it doesn't exist
 
214
 
215
  # Create responses data
216
  responses_data = []
217
+ for idx, (response_image, answer_text, notes) in enumerate(responses):
218
  if response_image and answer_text: # Only process if both image and text exist
219
  response_folder = os.path.join(post_folder, f"response_{idx}")
220
  os.makedirs(response_folder)
 
231
  {
232
  "response_id": idx,
233
  "answer_text": answer_text,
234
+ "notes": notes,
235
  "image_path": f"response_{idx}/response_image.png",
236
  }
237
  )
 
271
  with gr.Tab(f"Response {i+1}"):
272
  img = gr.Image(label=f"Response Image {i+1}", type="filepath")
273
  txt = gr.Textbox(label=f"Model Name {i+1}", lines=2)
274
+ notes = gr.Textbox(label=f"Miscellaneous Notes {i+1}", lines=3)
275
+ responses.append((img, txt, notes))
276
 
277
  with gr.Row():
278
  submit_btn = gr.Button("Submit All Responses")
 
287
  gr.Warning("Please select a post ID first!")
288
  return
289
 
290
+ # Convert flat response_data into triplets of (image, text, notes)
291
+ response_triplets = list(
292
+ zip(response_data[::3], response_data[1::3], response_data[2::3])
293
+ )
294
 
295
+ # Filter out empty responses (only checking image and model name, notes are optional)
296
  valid_responses = [
297
+ (img, txt, notes)
298
+ for img, txt, notes in response_triplets
299
+ if img is not None and txt
300
  ]
301
 
302
  if not valid_responses:
303
  gr.Warning("Please provide at least one response (image + text)!")
304
  return
305
 
306
+ # Modify generate_json_files call to handle notes
307
  generate_json_files(source_img, valid_responses, post_id)
308
  gr.Info("Responses saved successfully! 🎉")
309
 
310
  def clear_form():
311
+ outputs = [None] * (
312
+ 1 + 30
313
+ ) # 1 source image + 10 triplets of (image, text, notes)
314
  return outputs
315
 
316
  # Connect components
317
  post_id_dropdown.change(
318
  fn=load_post_image,
319
  inputs=[post_id_dropdown],
320
+ outputs=[source_image] + [comp for triplet in responses for comp in triplet],
321
  )
322
 
323
  submit_inputs = [source_image, post_id_dropdown] + [
324
+ comp for triplet in responses for comp in triplet
325
  ]
326
  submit_btn.click(fn=submit_responses, inputs=submit_inputs)
327
 
328
+ clear_outputs = [source_image] + [comp for triplet in responses for comp in triplet]
329
  clear_btn.click(fn=clear_form, outputs=clear_outputs)
330
 
331