Dialed

Read any analog gauge from a phone photo.

Dialed finds the dial, straightens it, unrolls the scale and reads the needle with OpenCV 5. Then an agent decides what happens next: log the reading, ask for a better photo, or hold a work order until someone signs it off.

Reads
Pressure and temperature dials with 180° to 300° scales
Runs
OpenCV 5 on AWS Lambda, coaching on your phone with OpenCV.js
  1. 1Found the dial
  2. 2Straightened it
  3. 3Unrolled the scale
  4. 4Read the needle

245psi

  • 100% confidence
  • 36° camera tilt corrected
  • 13 scale numbers read
  • 1565 ms to read
READBoiler steam pressure, steamship Virginia V (1922)
A photo of a boiler pressure gauge taken at an angle is straightened, its scale unrolled into a ruler, and the needle read. Photo: Joe Mabel, CC BY-SA 4.0, via Wikimedia Commons. Derived images under the same licence.

DAILY ROUND SHEET High-lift pump house, 07:00 round

TagServiceNormalMonTueWedThuFri
PI-101Intake header1.2–2.4 bar1.81.91.81.71.8
PI-102P-1 discharge7.0–9.5 bar8.46.4 8.48.68.38.5
TI-201P-1 bearing30–70 °C4651556063
PI-104F-1 inlet5.5–8.0 bar7.17.27.17.2
PI-105F-1 outlet4.5–7.5 bar6.56.36.26.?5.9
PI-106Air receiver90–125 psi110115112108112

Checked: R.K.

The numbers were on the sheet. Nobody did the arithmetic.

This is how most plants still read their gauges: a clipboard, a pen and a walk. Look at TI-201. The bearing warmed seventeen degrees in five days, every reading written down, every one inside its band. It would have been noticed when the alarm went off.

  • Readings are copied twice, from dial to sheet and from sheet to spreadsheet, if at all.
  • Trends are invisible. A value can creep for a week without ever leaving the normal band.
  • A blank is silent. Wednesday's PI-104 was never read, and nothing says so.
  • Pairs go unchecked. The pressure drop across filter F-1 lives in two rows nobody subtracts.

Dialed reads the same dials from photos, keeps every reading with its evidence, and does the arithmetic on each one: band, drift, pairs.

Try it on a gauge

Drop a photo of any analog pressure or temperature gauge, or pick a sample. It's read live on AWS Lambda, and you can step through every stage of what OpenCV saw.

Or try a sample

Samples are real photos from Wikimedia Commons, read by eye for the known answer; credits appear with each result. Your own photo is read and discarded; nothing is stored.

How it reads a dial

Nine stages, all classical OpenCV 5 except the two small text models. Scroll through them on the photo from the top of the page; every drawing is the reader's own output.

Stage 1 of 9: Find the dial

The photo as uploaded
  1. 01

    Find the dial

    Canny, findContours, fitEllipse

    8 ellipses fitted to edge contours and bright or dark regions. Each is scored by how much of its outline lies on real edges, its size and its roundness; the red one won.

  2. 02

    Edges

    Sobel, Canny

    Canny edges with thresholds taken from the gradient itself, so pale and dark scenes both work. The dial's rim is the longest closed curve.

  3. 03

    Straighten

    warpAffine

    The ellipse becomes a circle: one affine warp undoes about 36° of camera tilt. Upright text stays upright.

  4. 04

    True centre

    connectedComponents, HoughLinesP, HoughCircles

    The needle is a straight line through the pivot, and its hub was found on that line: that fixes the centre 15 px from the rim's centre (grey cross). The longer run from the pivot is the pointer, the shorter one its counterweight. Every angle is measured from here.

  5. 05

    Strokes only

    morphologyEx black-hat / top-hat

    Black-hat (or top-hat on dark faces) keeps only strokes thinner than about a tenth of the radius: needle, ticks, numbers. Glare, shading and the face colour drop out, so the needle stands alone.

  6. 06

    Unroll

    warpPolar

    The ring between the numbers and the rim is unwrapped into a straight strip around the true centre. The needle becomes one vertical line on a ruler, at 245 psi.

  7. 07

    Read the numbers

    dnn TextDetectionModel_DB, CRNN

    24 text regions found by PP-OCRv3 (OpenCV 5's new DNN engine) and read by CRNN (classic engine), each in its own orientation, from a sharper straightened copy of the photo. 13 printed numbers agreed on one scale and were used; the rest were units, brand names or misreads.

  8. 08

    Fit the scale

    RANSAC, interpolation

    Each number's angle and value. Each ring of numbers is fitted on its own (some dials print two scales); RANSAC throws out misreads and tries lost decimal points, then the value is interpolated between neighbouring numbers, which absorbs leftover perspective error.

  9. 09

    Find the needle

    polar ink profile

    For every quarter degree, how much ink runs the whole inner band. The needle is the one angle where a stroke reaches from the hub to the ticks.

The agent's logic sheet

A model picks the next step from six tools. Guards written in code decide whether each step is allowed. What the camera measured changes every decision after it.

Photo

phone or upload

OpenCV 5 reader

AWS Lambda

Measurements

value, confidence, issues, unit, range

Model

Amazon Nova Micro on Bedrock; rule engine if it doesn't answer

Guards

confidence, breach, figures, tag

LOGGEDvalue in the round logRE-SHOOTmeasured reason to the operatorHOLDwork order waits for a personfind, straighten, centre, unwrap, read, fittools: read_gauge, compare_history

Its latest decisions on the sample round

The camera coaches the shot

Most bad readings start as bad photos. Before you press anything, OpenCV.js 5 runs in the phone's browser on every frame: it fits the dial's outline, measures how far you're standing off-axis, outlines reflections, checks focus and whether the phone is still.

  • Tilt meter. An analog gauge of the camera's own angle, from the dial ellipse's axis ratio.
  • Glare outlines. Blown-out highlights inside the dial are boxed in red, so you can step until they move off the needle.
  • The shutter waits. It only lights up once all six checks have passed for half a second. You can still take it anyway.
  • Nothing leaves the phone until you take the photo.
Try the camera guide

A round through a pump house

The sample plant is a water-works pump house: two high-lift pumps, a sand filter, an air receiver and eight gauges on one route. Every bubble is a gauge; filled bubbles were read today. Each gauge has a demo photo, so you can walk it from your desk.

Loading the live round…

Walk the round

A week on a round chart

Before data loggers, plants clipped paper discs into chart recorders that turned once a week. Each gauge in Dialed gets the same chart, drawn from its photographed readings.

This is TI-201, the P-1 bearing from the clipboard. The pen climbs the whole week without crossing the dashed alarm ring. The agent didn't wait for that: the trend passed 2 °C a day, so it held a work order with the evidence and the arithmetic attached.

Open TI-201's sheet

Accuracy, measured

Scored on 340 gauges the confidence model never saw: 200 rendered ordinary photos, 100 rendered bad ones (up to 50° off-axis, heavy glare and blur), and 40 photos of real gauges from Wikimedia Commons, read by eye. Real photos are harder: the Evidence page keeps the development photos apart from the blind ones, and lists every failure.

Accepted readings within 2% of the scale
98.7% of 231
Accepted readings off by more than 5%
1
Ordinary photos accepted first time
89%
Development photos of real gauges read within 2%
19 of 37
1720.0480.561.021.512.002.503.013.504.004.5error as % of the scale span (accepted readings)
Errors of every accepted reading, as a share of the scale. The confidence threshold is 90%; below it the agent asks for another photo instead of guessing. 3 of 231 accepted readings were off by 2% or more.
See every chart, the failures and the method

Built with OpenCV 5 on AWS

OpenCV runs twice: in the browser to coach the shot, and in the cloud to read it. Everything else is ordinary serverless AWS.

Phone browserOpenCV.js 5 (WASM)live dial fit, tilt,glare, focus checksCloudFrontsite from S3/api to LambdaAWS Lambda (arm64)OpenCV 5.0 readercv.dnn text modelsagent tools and guardsFunction URLAmazon BedrockAmazon Nova MicroS3photos, dials, tracesDynamoDBgauges, readings, ordersDesksupervisor

What it won't do

  • It won't guess. Below 90% confidence there is no number, only a request for a better photo and the reason.
  • It won't act alone on equipment. The agent can hold a work order; releasing it takes a person.
  • It doesn't read digital displays, sight glasses or two-needle dials reliably yet, and vacuum scales with minus-sign labels need the gauge's registered range to be caught.
  • It isn't a safety system. Alarms and trips stay where they are; Dialed replaces the clipboard, not the interlock.