Support additional requests to fix boxes
parent
0a60c81eb6
commit
9d51ea8394
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue