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% · large-object path independent of model score
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
Evaluation detail

Read the repair and its limits.

The full computer vision teardown now includes an evaluation checklist and clarifies that the reported 98% label has no published denominator. It is not a claim of overall accuracy or safety certification. The large-object path addresses dependence on the anomaly model score; the complete pipeline still needs field validation.