Inspiration

Analog gauges are everywhere in plants, labs, and old infrastructure, and they are still read by eye. A wrong read taken confidently is worse than no read at all, so DialAgent is built to fail loudly instead of guessing.

What it does

Upload a gauge image. DialAgent detects the ArUco markers on the gauge plate, rectifies the face with a USAC homography, unwraps the dial with warpPolar, and extracts the needle angle. A second independent method (PCA on the needle pixels) reads the same needle, and the two reads must agree. The result is a value, a confidence, one outcome bucket (confident, uncertain, or failed), and a full step by step trace with per tool call latency. The same loop runs over HTTP, so a judge can run it live.

How we built it

OpenCV 5 does the vision work, and it is load bearing, not decorative: ArUco detection, USAC_MAGSAC homography, warpPerspective rectification, and warpPolar needle extraction are the product. The backend is FastAPI with a static frontend. Evaluation uses synthetic gauge images with exact ground truth, generated before evaluation, so error is measured, not claimed. All fixtures are labelled synthetic test data, never field measurements.

Challenges we ran into

Low contrast degrades marker corner localization past the homography quality gate, so that case fails loudly rather than reading uncertain. That is spec compliant, and the trace shows the reprojection error, but a pre homography contrast check is a known improvement for later.

Accomplishments that we're proud of

A frozen agent loop with a visible trace, dual method agreement, and measured zero error on clean synthetic cases, with honest failure behavior on every corrupted case.

What we learned

Exact ground truth from synthetic data is the difference between a demo and an evaluation. It also forces honesty: the corrupted cases are where the product earns trust, not the clean ones.

What's next for DialAgent

Endpoint kept alive through the Nov 9 judging window; next steps are a real photo demo and the COOL benchmark as a stretch.

Share this project:

Updates

Submission history