45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from core.models import Bounds, SceneElement
|
|
from perception.scene_builder import bbox_iou, build_scene
|
|
|
|
|
|
def test_scene_builder_merges_overlapping_ocr_into_ui_element() -> None:
|
|
ui_button = SceneElement(
|
|
id="ui-button",
|
|
type="button",
|
|
text=None,
|
|
bounds=Bounds(10, 10, 100, 40),
|
|
confidence=1.0,
|
|
source="ui",
|
|
)
|
|
ocr_label = SceneElement(
|
|
id="ocr-label",
|
|
type="text",
|
|
text="Search",
|
|
bounds=Bounds(12, 12, 96, 36),
|
|
confidence=0.92,
|
|
source="ocr",
|
|
)
|
|
ocr_only = SceneElement(
|
|
id="ocr-only",
|
|
type="text",
|
|
text="Footer",
|
|
bounds=Bounds(0, 100, 40, 20),
|
|
confidence=0.8,
|
|
source="ocr",
|
|
)
|
|
|
|
scene = build_scene(
|
|
screen_width=120,
|
|
screen_height=140,
|
|
ui_elements=[ui_button],
|
|
ocr_elements=[ocr_label, ocr_only],
|
|
)
|
|
|
|
assert len(scene.elements) == 2
|
|
assert scene.elements[0].type == "button"
|
|
assert scene.elements[0].text == "Search"
|
|
assert scene.elements[1].text == "Footer"
|
|
assert bbox_iou(ui_button.bounds, ocr_label.bounds) > 0.5
|