What it is
VIGIL-5 is not a fixed detector with a UI. It runs a closed loop — SEE → REASON → ACT → VERIFY — and spends compute only when the current view is not good enough: a resolution ladder, ROI zoom, forensic re-scan, rollback when verification fails, and human escalation after persistent ambiguity. Every frame emits one Pydantic-validated JSON record.
On the same 288-frame clip, a static 320 px detector runs at 216 FPS and catches 0% of the scripted events. VIGIL-5 runs at 24.8 FPS and catches 100%, with identity accuracy 0.999–1.000 and 36 ms CPU p50 per frame on four pinned x86 cores. That trade is the whole point: throughput is not the product metric.
Inspiration
Every face-pipeline demo looks perfect because it never shows the failure: the subject walks behind a pillar, the face is 40 px wide, the match is ambiguous — and the system silently returns a confident wrong answer. We had OpenCV 5, a synthetic concourse with occlusion, distance changes and one unknown visitor, and one question: what does a vision agent look like if "I am not sure" is a legal output?
What it does
Per frame, the agent emits detections, identity matches, quality metrics, the decision taken and the reason for it.
- SEE — YuNet detection at the base resolution, Farneback motion ROI, face quality and a liveness proxy.
- REASON — reason codes, not scores:
low_resolution,low_quality,low_confidence,spoof_suspect,motion_anomaly,no_face_with_motion,unknown_identity, plus a CPU-budget check. - ACT — exactly one reversible action: step the resolution ladder (320→768), zoom an ROI, run a forensic scan (lower threshold + upscale + flip-TTA), or escalate to a human.
- VERIFY — compare confidence, detection count, IoU and forensic consistency. If the action did not improve the frame, roll it back.
- EMIT — validated telemetry and an annotated frame; incident records carry a digest, never a raw embedding.
Frame 166 is the clearest trace: motion reports z = 40.27 while YuNet returns zero faces at 640 px. Those two perception results select a forensic recovery scan, then an ROI zoom. Verification rejects the zoom (0 new detections), so the agent rolls back instead of hallucinating a face.
Built With
- and
- arm64/x86-dockerfiles
- cloudformation
- ecs-fargate-task-definitions
- interleaved-and-repeated-(9+-reps/operator
- terraform