A charging pad had to detect foreign objects before and during charging. A missed detection is a safety incident; a false alarm is a session that never starts. It was failing in both directions at once: at night, headlight and torch reflections on the glossy pad fired constant alerts. In daylight, a hand covering a third of the pad scored 0.303 — below threshold — while a small dark bolt scored 0.921.
The team's proposed fix was to lower the threshold. That trades a safety miss for a flood of false alarms. The real causes were architectural: OR-based decision logic with a 7–10px minimum blob, auto-exposure locking after one second, no spatial persistence, per-frame heatmap normalisation, CLAHE washing out the brightness cue, and an anomaly model that had learned large soft bright shapes as normal — because the glossy pad mirrored car undersides and ceiling lights throughout dataset collection.
The fix was a two-tier detector. Tier one is model-free — a log-ratio comparison against a reference frame that catches large objects within two frames regardless of model confidence. Tier two keeps the anomaly model with AND-logic across size, peak, not-glare, and persistence, reserved for small FOD where the model is genuinely strong.
Camera hardware and runtime were identified from screenshot evidence alone — the magenta IR cast, the OpenCV window chrome, and a ~1.5 FPS loop — before touching a line of code.