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:
- Run a pinned YOLO/ONNX detector on public CoatingVision optical frames.
- Map boxes with an explicit trust policy: positive detections vs unreliable empty negatives (
HOLD, not inventedPASS). - Measure acquisition with OpenCV 5 (focus, contrast, glare, salience). Those metrics select CLAHE, Telea glare fill, morphology, noop, or a human request.
- Merge tool output with the original gate result. Telea fill cannot authorize
PASS(INPAINTED_REGION_UNOBSERVED). CLAHE is local contrast, not deblur. - Publish redacted evidence on an AWS-shaped S3/SQS bus (
localdefault; 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-e549e6ee7einaws_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
- amazon-web-services
- numpy
- onnx
- opencv
- python
- s3
- sqs
- streamlit
- yolo
Log in or sign up for Devpost to join the conversation.