checker_api / tools /test_marker_v31.py
felixkky's picture
Upload 33 files
d4b4554 verified
Raw
History Blame Contribute Delete
1.41 kB
from __future__ import annotations
import importlib.util
import json
import sys
from pathlib import Path
import cv2
ROOT = Path(__file__).resolve().parents[1]
spec = importlib.util.spec_from_file_location('dse_omr_v31_app', ROOT / 'app.py')
if spec is None or spec.loader is None:
raise RuntimeError('Cannot load app.py')
app = importlib.util.module_from_spec(spec)
sys.modules['dse_omr_v31_app'] = app
spec.loader.exec_module(app)
config = json.loads((ROOT / 'marker_config.json').read_text(encoding='utf-8'))
tests = [
('strict_clean', ROOT / 'samples/sample_phone_perspective.jpg', 'strict_pass'),
('shadow_rescue', ROOT / 'samples/sample_phone_shadow_rescue.jpg', 'rescue_pass'),
('missing_tl', ROOT / 'samples/sample_phone_missing_tl.jpg', 'reject'),
]
failed = False
for name, path, expected in tests:
image = cv2.imread(str(path))
if image is None:
print(f'{name}: FAIL cannot read {path}')
failed = True
continue
try:
_, _, rescue_used = app._detect_large_corner_markers(image, config)
actual = 'rescue_pass' if rescue_used else 'strict_pass'
except app.MarkerDetectionError:
actual = 'reject'
ok = actual == expected
print(f'{name}: {"PASS" if ok else "FAIL"} expected={expected} actual={actual}')
failed = failed or not ok
if failed:
raise SystemExit(1)
print('V3.1 FUNCTIONAL MARKER TESTS PASSED')