融合並排序螢幕元素框

set_of_marks.mark_elements 為單一、已乾淨的元素清單編號——但沒有任何功能*產生*那份清單。真實的畫面解析會 產出三個彼此重疊的來源(OCR 文字框、圖示 / 形狀框、無障礙樹框),有大量重複且無一致順序。本模組是定位器 (locate_textfind_shapes、a11y 樹)與 set_of_marks 之間缺少的連接組織:依重疊去重、聯集各來源並 保留最可信的框、再排成閱讀順序並給予穩定索引。

每個框都是帶 x, y, width, height 的純 dict``(可附帶 ``text / source / score 等鍵),因此整個模組 皆為純標準函式庫且完全可單元測試。不匯入 PySide6

無頭 API

from je_auto_control import iou, merge_boxes, fuse_elements, reading_order

iou(box_a, box_b)                          # 兩框的重疊度,0..1
deduped = merge_boxes(raw_boxes, iou_threshold=0.9)

# 聯集三個偵測器輸出;重疊時 a11y 框勝出,其次 OCR,再其次 icon。
elements = fuse_elements(ocr_boxes=ocr, icon_boxes=icons, a11y_boxes=tree)

# 由上到下、由左到右排序並為每個元素加上 "index"。
for el in reading_order(elements):
    print(el["index"], el.get("text"), el["x"], el["y"])

iou 回傳兩框的交集除以聯集。merge_boxes 在任一群重疊超過 iou_threshold 時保留最大者。fuse_elements 為每個輸入標記 source,再依 source_priority``(預設 ``a11y > ocr > icon,其後較大面積)丟棄跨來源 重疊。reading_order 將相距 row_tol 像素內的元素歸為同列、列內依 x 排序,並回傳帶有遞增 index 的新字典。

執行器命令

AC_fuse_elements``(``ocr / icon / a11y JSON 陣列 + iou_threshold{count, elements})與 AC_reading_order``(``elements + row_tol{count, elements})。它們以 MCP 工具 ac_fuse_elements / ac_reading_order 以及 Script Builder 中 Image 分類下的命令提供。