Menu

Optical character recognition

What the in-house recognition engine has read from the project's scans, and what those readings are worth.

Demonstration project - no figure here describes a real facilityChanges are not saved
Why

Throughput and confidence are computed from the readings the project actually holds. No external recognition service has been called.

Writes are validated against the engineering rules and then refused, because no database has been configured for this environment.

No commercial OCR service has been activated

Every figure here is the in-house eds-stroke-ocr engine’s. Azure AI Document Intelligence, the approved production candidate, has never been called; nor has Google Cloud Document AI. Nothing on this page is a claim about either.

Scanned documents

3

Pages read by OCR

2

Characters recognised

39

Readings from a scan

8

Refused as unreadable

1

Per reading method

The mean and the lowest, because a mean on its own hides the one bad reading - and that is the only one that matters.

Throughput by reading method
MethodEngineReadingsMean confidenceLowestCeiling
native_textpdf-native 0.1.07075%Unverified40%Unverified80%
ocreds-stroke-ocr 0.1.0858%Unverified40%Unverified60%
bothpdf-native+eds-stroke-ocr 0.1.0868%Unverified50%Unverified70%
structuredxlsx-reader 0.1.04594%Unverified50%Unverified100%
nonenothing reads this0no readings——

Scan quality

Measured from the page image, not declared. A refusal states what is wrong with the file.

Scan quality per document
DocumentTitleQualityOutcome
ZRF-PID-1101P&ID - Inlet Separation (scanned)72%UnverifiedRead
ZRF-PID-3101P&ID - Cooling Water Circulation (mixed)81%UnverifiedRead
ZRF-PID-9001P&ID - Flare Header (unreadable scan)11%Unverified
RefusedA scan too faint to read. Processing refuses it and states why; nothing is extracted.

The engine

  • Identifiereds-stroke-ocr
  • StatusExperimental
  • Alphabet39 characters
  • Reject distance0.260
  • Confidence ceiling60%

No dependency, no model download, no network call.

It refuses rather than guesses

A character further than the reject distance from every template is returned as a refusal, not as the nearest match. That lowers the recognition rate and is the reason the output is usable at all: a confident misreading of a tag reaches a register and is believed, and a gap does not.

What the accuracy figures mean

The engine’s measured accuracy is on synthetic lettering rendered from its own stroke alphabet. That is a regression result: it says the engine still works. It says nothing about a real drawing office stencil, a faded dyeline, or a sheet somebody photographed on a phone - and no claim about those can be made until a real corpus exists.

The slashed zero

An unslashed zero is read as a capital O almost every time, which is why the engine’s primary glyph is the slashed zero an engineering drawing uses. A plain ellipse is reported as O with 0 named as the alternative, rather than being guessed either way.