Skip to content
cd ../blog

Why I chose my OCR engine by measuring

To read the screen of a production machine with no data output, I compared three OCR options on accuracy, latency, and cost. The winner wasn't the most "powerful" one — it was the one that fit the field best.

2 min read

The problem: the data only lives on the screen

During my internship at Samsun Teknopark, the machines I worked with showed their production counters only on the operator screen. There was no PLC output, database, or report file; nobody knew how many minutes of downtime had occurred by the end of a shift.

The idea was simple: capture the screen, read the relevant fields with OCR, and turn the readings into events. The real decision was which OCR engine would run reliably in the field.

Three candidates

  • Mistral OCR — cloud-based.
  • PaddleOCR — open source, runs locally.
  • RapidOCR — runs the same models as PaddleOCR on top of ONNX Runtime.

Why the cloud was ruled out

Cloud OCR was ruled out for three reasons: latency, cost, and data privacy. For a system doing several readings per second, sending every frame to the cloud is both slow and expensive — and a factory screen is data that shouldn't leave the premises.

PaddleOCR or RapidOCR?

Since both use the same model, I didn't expect a difference in accuracy. The difference showed up in installation: the field device is a Raspberry Pi 5, which means ARM. RapidOCR (ONNX) installed cleanly on ARM, and that decided it.

I also measured model size: the small model matched the medium model's accuracy and was 3.7× faster. A bigger model bought nothing here.

The right engine isn't enough: validation

No OCR reads every frame correctly. So I cross-checked the readings against each other: the quality rate shown on the screen is recomputed from the good/total unit counts and compared with the value that was read. Readings that don't match are rejected. Recording a wrong reading is worse than recording none at all.

Results

ValidatedResult
Reading 6 fields6/6 correct, 99%+ confidence score
Stoppage detectionactual 90 s → measured 88 s
Outage resilience38 pending readings restored from disk

The lesson: there is no such thing as "the best model" — only the best model for this particular environment, and the only way to find it is to measure.