byASB Ankiit Singh Book a scoping week
98% ▲2026

Foreign-object detection, EV wireless charging

An EV wireless-charging hardware startup
Most CV engineers can train a model. Fewer can watch one fail in the field, at night, and see the problem is the decision architecture, not the weights.
HardwareRaspberry Pi · Camera Module 3 NoIR (IMX708)
StackPython · OpenCV · Picamera2 · OpenVINO
EngagementRemote diagnostic + detector redesign
TurnaroundDeployable the same night
RetrainingNone required
The constraint

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.

What I built

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.

Under the surface
decision logicOR → AND (size ∧ peak ∧ ¬glare ∧ persistence)
min blob7–10 px → persistence-gated
auto-exposurelock @1s → deterministic lock
normalisationper-frame min-max → fixed reference
tier 1log-ratio vs reference · model-free · ≤2 frames
tier 2anomaly model · small FOD only
resultfalse-alarm detection efficiency 98% · misses eliminated by design
exposure: night · IR 850nm · specular pad
Outcome
  • False-alarm detection efficiency raised to 98%.
  • Deployable the same night — no retraining cycle.
  • Hardware and runtime diagnosed from screenshot evidence before any code was written.
PythonOpenCVPicamera2OpenVINORaspberry PiIMX708 NoIR