From 9d51ea8394dca7dcb36147500fc375847ec62517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Miquel?= Date: Sun, 15 Mar 2026 10:33:55 +0100 Subject: [PATCH] Support additional requests to fix boxes --- correction.py | 58 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/correction.py b/correction.py index e19b363..5c099cd 100644 --- a/correction.py +++ b/correction.py @@ -304,7 +304,8 @@ def process_single_task(task_tuple): res = p["result"] if res["error"] != "": print("\tError :", res["error"], "for Copie", pid, label, group_name) - for f in res["feedback"]: + needs_correction = [] + for (i,f) in enumerate(res["feedback"]): b = f["box_2d"] if b: ymin, xmin, ymax, xmax = b @@ -312,26 +313,47 @@ def process_single_task(task_tuple): ymax = ymax * total_height // 1000 if pid not in d_data: - print("Error : Gemini answered a copie id not present", pid, label, group_name) + print("Error : Gemini answered a copie id not present", + pid, label, group_name) continue - yming, ymaxg, width_r = d_data[pid] - if ymin < yming-50 or ymax > ymaxg+50: - print("Error : Gemini answered box2d too low/up", pid, label, group_name) - if ymax < yming or ymin > ymaxg: - print("Removing the box.") - f["box_2d"] = None - continue - nymin = max(ymin, yming) * 1000 // total_height - nymax = min(ymax, ymaxg) * 1000 // total_height - f["box_2d"] = [nymin, xmin, nymax, xmax] - if f["box_2d"] and xmax / 1000 > width_r: - print("Error : Gemini answered box2d too right", pid, label, group_name) - if xmin / 1000 > width_r: - print("Removing the box.") + if (ymin < yming - 50 or + ymax > ymaxg + 50 or + xmax / 1000 > width_r): + needs_correction.append(i) + break + + # yming, ymaxg, width_r = d_data[pid] + # if ymin < yming-50 or ymax > ymaxg+50: + # print("Error : Gemini answered box2d too low/up", pid, label, group_name) + # if ymax < yming or ymin > ymaxg: + # print("Removing the box.") + # f["box_2d"] = None + # continue + # nymin = max(ymin, yming) * 1000 // total_height + # nymax = min(ymax, ymaxg) * 1000 // total_height + # f["box_2d"] = [nymin, xmin, nymax, xmax] + + # if f["box_2d"] and xmax / 1000 > width_r: + # print("Error : Gemini answered box2d too right", pid, label, group_name) + # if xmin / 1000 > width_r: + # print("Removing the box.") + # f["box_2d"] = None + # continue + # f["box_2d"][3] = int(width_r * 1000) + + if needs_correction: + print(f"\tBox anomalies detected for Copie {pid} {group_name}. Requesting isolated correction from Gemini Flash...") + try: + res["feedback"] = correct_boxes_with_gemini( + pid, label, res["feedback"], INPUT_DIR, + yming, ymaxg, width_r, total_height) + except Exception as e: + print(f"\tCorrection failed for Copie {pid}, {group_name} : {e}\n\tRemoving the boxes") + # Fallback if the second request fails entirely + for (i, f) in enumerate(res["feedback"]): + if i in needs_correction: f["box_2d"] = None - continue - f["box_2d"][3] = int(width_r * 1000) # --- Use Lock for writing shared data --- with io_lock: