從像素形狀分類控制項

Set-of-Marks 與元素提案器回傳*方框*,卻不告訴你*每個方框是什麼*。form_fields.checkbox_state 已能讀取一個已知是核取方塊的方框;缺少的是它之前的分類步驟——這個方框是核取方塊、單選鈕、按鈕、 文字欄位還是切換開關?``icon_classify`` 從低成本的幾何特徵(無需模型)回答此問題。

  • box_features() ——擷取方框區域的 ``{aspect, fill, edge_density, circularity}``(客觀量測)。

  • classify_widget() ——純函式:以記載的啟發式規則把特徵字典映射為控制項型別。

  • classify_icon() ——組合兩者:把一個方框轉為 {type, features}

classify_widget 為純函式且可完整測試;``box_features`` 延遲匯入 cv2 / numpy(模組無需它們即可匯入), 並重用 visual_match._to_gray()。不匯入 PySide6

無頭 API

from je_auto_control import classify_icon, classify_widget

# 從截圖 + 方框:
classify_icon("dialog.png", [120, 80, 16, 16])
# {'type': 'checkbox', 'features': {'aspect': 1.0, 'fill': 0.12, ...}}

# 從你已有的特徵:
classify_widget({"aspect": 1.0, "circularity": 0.9, "fill": 0.4})  # 'radio'

啟發式規則:圓形方框(aspect ≈ 1、高 circularity)為 radio;寬且圓潤為 toggle; 近正方且稀疏為 checkbox;寬且空心為 text_field;寬且填滿為 button;其餘為 icon。 在預設誤判處,可讀取 features 套用你自己的規則微調——量測值才是耐用的部分。

執行器指令

AC_classify_widget``(``features JSON 物件 → {type},純函式)與 AC_classify_icon``(``source 影像 + box [x, y, w, h]{type, features})。 皆以對應的唯讀 ac_* MCP 工具及 Script Builder 指令(位於 Image 分類下)形式提供。