Inspiration

Coating inspection cannot treat every RGB frame as enough evidence for PASS or REJECT. Soft focus, glare, missing modalities, and detector silence without validated sensitivity are real failure modes. I wanted OpenCV 5 to change the next action, not decorate a detector score.

What it does

SecureCoating-Vision is a fail-closed agentic inspector for battery-electrode coating frames:

  1. Run a pinned YOLO/ONNX detector on public CoatingVision optical frames.
  2. Map boxes with an explicit trust policy: positive detections vs unreliable empty negatives (HOLD, not invented PASS).
  3. Measure acquisition with OpenCV 5 (focus, contrast, glare, salience). Those metrics select CLAHE, Telea glare fill, morphology, noop, or a human request.
  4. Merge tool output with the original gate result. Telea fill cannot authorize PASS (INPAINTED_REGION_UNOBSERVED). CLAHE is local contrast, not deblur.
  5. Publish redacted evidence on an AWS-shaped S3/SQS bus (local default; live inspection cycle recorded).

Dispositions: PASS only with adequate evidence; HOLD for blur, unobserved inpaint, empty/unreliable detector, contracts, or publish failure; REJECT when the gate and morphology support it.

How I built it

Solo entry (Trinh Hoang Tu). Rule-based single-step planner — not an LLM. CPU judge path: requirements-competition-cpu.txt + scripts/install_competition_weights.py. Live UI: scripts/run_agentic_demo_app.py → http://127.0.0.1:8502. Architecture: docs/opencv_ai_competition_2026/04_architecture.md.

This OpenCV 2026 project extends a participant-owned fail-closed inspection baseline. That history is provenance, not an OpenCV award.

Challenges

Classification labels are not YOLO boxes. Empty-box “VIS-normal” mapping used to invent PASS — closed by the trust policy. Acquisition HOLD must stay separate from score uncertainty. CUDA eval latency is not the CPU judge path. Overlay drawing must not contaminate analytical metrics.

Evaluation (honest bounds)

  • P0 (p0_fixed_eval.json): all-zero 6/6 HOLD, surface_crack 6/6 HOLD, unsafe PASS 0/6. Fail-closed unreliable negatives — not defect accuracy.
  • Current glare policy (inpaint_safety_eval_v2.json): glare + gate PASS → agent HOLD.
  • Historical value_claim_eval.json (pre-inpaint-HOLD): n=2 twins; do not treat as current glare policy.
  • AWS proof: insp-e549e6ee7e in aws_live_inspection_publish.public.json.
  • Demo video: live Streamlit, 104.4 s (not a slideshow).

No industrial classification accuracy. No factory validation. clear_* filenames are not clean labels.

What I learned

Agentic vision is useful when the system knows when not to decide.

What's next

A domain-adapted detector with box ground truth if crack REJECT on classification imagery is required. No factory claim without plant metrology.

Built With

Share this project:

Updates

Submission history