← all posts
// ocr · ocr-models

OCR models for technical documents and labels: choosing an OCR-capable model

A part number stamped into curved, scratched aluminum, half of it lost in glare, sits next to a decimal that could be a decimal or could be a scratch.

That's the normal input for technical documents and labels: manuals, schematics, equipment plates, drawings, maintenance records. You need part numbers, warnings, measurements, callouts, and their spatial relationships, not a paragraph.

Deterministic first, generative only when it earns its keep

The pages fight you the same few ways:

  • engraving and curved surfaces
  • tiny fonts and rotated callouts
  • low contrast and line art
  • two part numbers that differ by one character

Match the recognizer to the job before touching a model card: script, layout, handwriting, resolution, output, deployment constraints. Start with high-resolution region OCR and dictionaries that check format without rewriting identity. Bring in a generative model only where it earns a measured advantage: bad handwriting, irregular layout, a label tied to a distant value. It shouldn't replace a working deterministic stage. Score exact-string accuracy, unit preservation, region association, and warning recall over character error rate, which treats a missing comma the same as a wrong account number.

Wrong answers that look right are the expensive kind

The costly failure isn't garbled text, it's a part number or unit turned into something more familiar and wrong. A language model completes plausible patterns for a living, so a smudged digit resolves to a normal-looking string, and the page looks clean. Picking a general vision-language model for its benchmark score is the trap: it never measured exact transcription.

Build a path for the model to say it doesn't know: glare, clipped pages, bad handwriting, contradictory totals should raise an exception, not a guess. Confidence scores alone won't carry this: model-specific, often miscalibrated. Pair them with image-quality checks, format validators, disagreement between passes.

Then make review fast. Store the bounding box for each field that matters, show the crop beside the value, and a reviewer settles a digit in seconds instead of hunting the page.

What the model is allowed to decide

A capable VLM can explain why two totals disagree, or stitch a table split across a fold. Useful, but keep it on the observation side: raw read here, interpretation there, and any database write goes through schema validation outside the model. Text on the page is data, not an instruction, never permission to change how it gets processed.

Across pages, split deterministically, keep identifiers attached, and don't trust the model to keep sections separate.

Local deployment keeps documents in-house and gets cheaper as volume climbs, once you count storage, accelerator time, review staff. Hosted APIs buy elasticity and a higher ceiling for weird cases, at the cost of upload time, residency, per-page pricing. I don't have a clean answer for what happens once the exception queue grows faster than reviewers can clear it, and that's the real bottleneck, not the model.

#ocr-models#document-ai#vision