以邊緣 / 輪廓定位 UI 元素(免模板)
目前所有定位器都需要一個*尋找對象*:match_template 與 feature_match 需要參考影像、find_color_region
需要顏色、locate_text 需要文字。它們都無法回答結構性問題「這個畫面上可點擊的方框在哪裡?」。find_shapes
與 find_rectangles 執行 Canny 邊緣偵測加輪廓擷取,回傳各個形狀的邊界框——讓腳本能在從未見過的畫面上列舉
卡片、按鈕或輸入框,並對第 N 個操作,完全不需提供樣本。
兩者都在可注入的 haystack 影像(ndarray / 路徑 / PIL)上執行,因此可在無真實螢幕下對合成陣列做單元測試。
OpenCV + NumPy 透過 je_open_cv 引入。不匯入 PySide6。
無頭 API
from je_auto_control import find_shapes, find_rectangles
# 每個獨立形狀,由大到小。
for shape in find_shapes(min_area=500):
print(shape["x"], shape["y"], shape["width"], shape["height"])
# 只取寬的按鈕形矩形,點擊第一個。
buttons = find_rectangles(min_area=800, aspect_range=(1.5, 8.0))
if buttons:
click(*buttons[0]["center"])
find_shapes 為每個輪廓回傳 {x, y, width, height, area, center, aspect}``(``area 為邊界框面積),由大到小;
min_area / max_area 去除雜點與整框邊界。find_rectangles 只保留近似凸四邊形的輪廓(epsilon 是
approxPolyDP 以周長比例表示的容差),並加上選用的 aspect_range``(min, max)寬高比過濾——``(1.5, 8) 取寬
按鈕、(0.8, 1.2) 取方形圖示。
執行器命令
AC_find_shapes``(``region / min_area / max_area → {count, shapes})與 AC_find_rectangles
(另有 aspect_range / epsilon → {count, rectangles})。它們以 MCP 工具 ac_find_shapes /
ac_find_rectangles 以及 Script Builder 中 Image 分類下的命令提供。