"""Backward-compatible thin wrapper over the new recognizer. The old API exposed `Recognition` (slot_id, value, score) and `recognize()` returning slabs only. Existing CLI code (`__main__.py`) and tests use that surface, so we keep it working by delegating to recognizer.py. New code should call `recognizer.recognize_image()` / `recognize_file()` directly for richer (kind, rotation, artifact) results. """ from __future__ import annotations from dataclasses import dataclass from typing import List, Optional, Tuple from .recognizer import recognize_file @dataclass class Recognition: slot_id: str value: Optional[str] # slab value, or None if empty/unknown/artifact score: float # NCC score in [-1, 1]; higher = better def recognize( screenshot_path: str, bbox: Tuple[int, int, int, int], slot_num: int = 34, empty_threshold: float = 35.0, # ignored; kept for arg-compat ) -> List[Recognition]: """Recognize slabs in the inventory area of a screenshot (slabs only).""" cells = recognize_file(screenshot_path, bbox, slot_num=slot_num) out: List[Recognition] = [] for c in cells: v = c.value if c.kind == "slab" else None out.append(Recognition(c.slot_id, v, c.score)) return out def recognized_values(recognitions: List[Recognition]) -> List[str]: return [r.value for r in recognitions if r.value is not None]