Skip to content

Release: perception lane part 2 (change localize, icon classify, element proposal) v218-v220#450

Merged
JE-Chen merged 6 commits into
mainfrom
dev
Jun 26, 2026
Merged

Release: perception lane part 2 (change localize, icon classify, element proposal) v218-v220#450
JE-Chen merged 6 commits into
mainfrom
dev

Conversation

@JE-Chen

@JE-Chen JE-Chen commented Jun 26, 2026

Copy link
Copy Markdown
Member

Release — ROUND-15 perception lane (part 2, lane COMPLETE)

Three new headless features completing the perception lane (7/7). Each has a pure / injectable-seam core, full 5-layer wiring, headless tests, and EN/Zh docs; all merged to dev CI-green first try.

Perception lane now COMPLETE: cvd_simulate, marks_layout, contrast_map, theme_normalize, change_localize, icon_classify, element_proposal. Package stays Qt-free; all logic tested without a screen via pure cores + per-function importorskip for the cv2 paths.

JE-Chen added 6 commits June 26, 2026 09:49
…hat changed

Existing diffs return raw pixel regions or a11y-element diffs; the gap is
'given a frame diff and a list of element boxes, which of those changed?'.
localize_changes diffs reference vs current and scores each element box by
its mean per-pixel change; rank_changes is the pure ranker (changed when
score >= threshold, sorted most-changed first). cv2/numpy lazy.
…ize-batch

Add change_localize: attribute a screen change to the element boxes that changed
Set-of-Marks/element proposers return boxes but not what each box is;
form_fields.checkbox_state reads a box already known to be a checkbox.
box_features extracts {aspect, fill, edge_density, circularity};
classify_widget is the pure heuristic classifier (round->radio,
wide-rounded->toggle, square-sparse->checkbox, wide-hollow->text_field,
wide-filled->button, else icon); classify_icon composes them. cv2 lazy.
…y-batch

Add icon_classify: classify a widget from its pixel shape
Set-of-Marks/observation/grounding assume you already have element boxes,
but a game/custom-drawn app/remote desktop has no accessibility tree.
propose_elements builds the top-of-funnel list from pixels: widget blobs
(Canny+morphology+connected_boxes) + text regions, fused via element_parse
(ocr>icon priority is the drop-widget-that-is-really-text cross-check),
reading-ordered and tagged text/widget. tag_kinds is the pure labeller.
…osal-batch

Add element_proposal: propose a clean element list from raw pixels
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 89 complexity · 0 duplication

Metric Results
Complexity 89
Duplication 0

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@JE-Chen JE-Chen merged commit dea0f83 into main Jun 26, 2026
31 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant