The Quiet LoopContact us

Independent OCR engines in disagreement

A single extraction engine can misread a figure by an order of magnitude and report no uncertainty. Why verification has to be independent of the system being verified.

Sector
Document processing
Context
Automated reading of photographed receipts, at volume
Control introduced
Dual-engine verification with arithmetic validation

A single extraction engine can misread a figure by an order of magnitude and report no uncertainty whatsoever. This engagement illustrates why verification has to be independent of the system being verified.

The situation

Amounts were being read from photographed receipts automatically and at volume. The extraction worked, and the figures it produced looked entirely reasonable. One of them was wrong by a factor of ten.

The pattern

A decimal point on a creased receipt, photographed at an angle in poor light, occupies a few pixels. One OCR engine read the amount as tens of dollars; a second engine, given the identical image, read it as single dollars.

The significant fact is not that an engine made a mistake — that is expected and unavoidable. It is that the engine reported no difficulty. There was no low-confidence score and no warning; the incorrect figure was returned exactly as matter-of-factly as the thousands of correct ones, and it entered the totals unchallenged. A reviewer scanning the output had no reason to stop on that row rather than any other.

Running a second, independent engine over the same image does not establish which reading is correct. It establishes something more useful: that a question exists. Engines agree the overwhelming majority of the time, so the resulting exception list remains short enough to review in full.

exception record · illustrative
receipt_0847.jpg

engine A → $84.10   ·   engine B → $8.41

status: DISAGREEMENT → routed to review
arithmetic: subtotal + tax = 8.41 ✓ (supports engine B)

Arithmetic provides a third, independent check. Where a receipt states a subtotal, a tax amount and a total, the three figures constrain each other; a misread digit usually breaks the sum, and the break points directly at the misread field.

Engineering takeaway — Extraction that returns only answers conceals its errors. A dependable system also returns the list of items it could not resolve with confidence — and is judged on the honesty of that list. A single engine with a confidence score is not equivalent: model self-confidence is poorly calibrated, and it is precisely the confidently-wrong cases it fails to flag.

Further reading

Insights · all case studies

Discuss a similar problem