Codesota · OCR · Vol. IIChoose tools for your documentsReview: October 7, 2026 · historical registry
§ 00 · Opening

Choose OCR for your documents

Pick the document output you need: raw text, layout regions, tables, invoice fields, handwriting, or question answering. Each output maps to a different benchmark and model family.

183 models on 17 benchmarks, 317 recorded results. Check the source and evaluation protocol, then try representative documents before choosing a tool.

From a task to a tool you can try

Use these guides to narrow your options, check the evidence, and test your own workload.

  1. Define the task

    Text, tables, or fields? Start with the output you need.

    Choose an OCR workflow
  2. Build a shortlist

    Find candidates that fit your Python pipeline and document type.

    OCR options for Python
  3. Compare tradeoffs

    Check setup, speed, and deployment before choosing a library.

    PaddleOCR vs Tesseract
  4. Inspect the evidence

    Use the benchmark that matches your document output.

    OCR benchmark evidence
  5. Try your documents

    Run a parsing workflow on representative PDFs and inspect the output.

    Docling implementation guide
Traffic path · CodeSOTA search intent → Hardparse product

Looking for OCR? Try the parser, then inspect the layout.

CodeSOTA attracts people comparing OCR models. Hardparse turns that intent into a working document parser: upload one file here, get Markdown plus layout boxes from the same Hardparse API.

Open hardparse.comFree OCR service · no CodeSOTA-side upload limit

For teams that want OCR backed by current SOTA models, API access, private documents, or volume parsing.

Hardparse response
Sample layout
Sample boxes shown before a document is uploaded.
Page 1 · 4 layout regionsboxes + reading order
§ 00½ · Find the OCR answer

One OCR page cannot answer every query.

Library comparison

PaddleOCR vs EasyOCR

Speed, setup, accuracy, and when to use each Python OCR library.

Classic baseline

PaddleOCR vs Tesseract

CPU baseline vs modern OCR pipeline, with practical deployment tradeoffs.

Use case

Best handwriting OCR

GPT, Claude, Gemini, TrOCR, DTrOCR, and Azure Read for handwriting OCR.

Leaderboard

OCR benchmark pages

Task-specific OCR benchmark pages for documents, tables, handwriting, and VLM OCR.

§ 00¾ · SOTA answer engine

Start with the output contract.

Public SOTA is useful only when the benchmark contract matches the document workflow you are shipping.

What are you trying to do?
Document type
invoicebookscantablepassport
Language
EnglishPolishChineseArabicmulti
Output
textMarkdownJSONCSVboxesanswers
Deployment
APIself-hostededgeoffline
Budget
cheapestbalancedbest quality
Latency
batchinteractiverealtime
§ 01 · Benchmark surface

Open-weight OCR, by benchmark.

Models with downloadable weights and OCR/document scores in the registry. This table is filtered to OCR and document-AI benchmarks only; generic vision, medical, RL and code rows are excluded from this page.


Models
71
Benchmarks
OmniDoc · OCRBench · olmOCR
Source
benchmarks.json

Separate benchmark and metric tables. A result date belongs to the source observation; the import date only records collection. An imported or missing protocol is not an independently reproduced ranking or a claim of current coverage.

OmniDoc · composite · 20 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
DeepSeek-OCR
Version: not recorded · Protocol: not recorded
86.46not recorded2026-04-20imported; unverified
Source
DeepSeek-OCR-2
Version: not recorded · Protocol: not recorded
91.092026-01-282026-05-15imported registry
Source
dots.ocr 3B
Version: not recorded · Protocol: not recorded
88.41not recorded2026-04-20imported; unverified
Source
Falcon-OCR
Version: not recorded · Protocol: not recorded
88.642026-03-282026-05-15imported registry
Source
FireRed-OCR-2B
Version: not recorded · Protocol: not recorded
92.942026-03-022026-05-15imported registry
Source
Kimi K2.5
Version: not recorded · Protocol: not recorded
88.802026-02-022026-05-15imported registry
Source
MinerU 2.5
Version: not recorded · Protocol: not recorded
90.672025-09-262026-05-15imported registry
Source
MonkeyOCR-3B
Version: not recorded · Protocol: not recorded
87.132025-06-052026-05-15imported registry
Source
MonkeyOCR-pro-1.2B
Version: not recorded · Protocol: not recorded
86.962025-06-052026-05-15imported registry
Source
MonkeyOCR-pro-3B
Version: not recorded · Protocol: not recorded
88.852025-06-052026-05-15imported registry
Source
OCRVerse 4B
Version: not recorded · Protocol: not recorded
88.56not recorded2026-04-20imported; unverified
Source
olmOCR
Version: not recorded · Protocol: not recorded
81.792025-02-252026-05-15imported registry
Source
PaddleOCR-VL
Version: not recorded · Protocol: not recorded
92.86not recorded2026-04-20imported; unverified
Source
PaddleOCR-VL
Version: not recorded · Protocol: not recorded
92.562025-10-162026-05-15imported registry
Source
PaddleOCR-VL 0.9B
Version: not recorded · Protocol: not recorded
92.56not recorded2026-04-20imported; unverified
Source
PP-StructureV3
Version: not recorded · Protocol: not recorded
86.73not recorded2026-04-20imported; unverified
Source
Qianfan-OCR
Version: not recorded · Protocol: not recorded
93.122026-03-112026-05-15imported registry
Source
Qwen2.5-VL
Version: not recorded · Protocol: not recorded
87.02not recorded2026-04-20imported; unverified
Source
Qwen3-VL-235B
Version: not recorded · Protocol: not recorded
89.15not recorded2026-04-20imported; unverified
Source
Qwen3.5-397B-A17B
Version: not recorded · Protocol: not recorded
90.802026-02-162026-05-18imported registry
Source

OCRBench · score · 29 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
dots.mocr
Version: not recorded · Protocol: not recorded
8602026-03-132026-05-18imported registry
Source
HunyuanOCR (1B)
Version: not recorded · Protocol: not recorded
8602025-11-242026-05-18imported registry
Source
Infinity-Parser2-Pro
Version: not recorded · Protocol: not recorded
8622026-05-112026-05-18imported registry
Source
InternVL3-78B
Version: not recorded · Protocol: not recorded
9062025-04-142026-05-14imported registry
Source
Kimi K2.5
Version: not recorded · Protocol: not recorded
9232026-02-022026-05-13imported registry
Source
Kimi-VL-A3B-Instruct
Version: not recorded · Protocol: not recorded
8672025-04-102026-05-15imported registry
Source
Kimi-VL-A3B-Thinking-2506
Version: not recorded · Protocol: not recorded
8692025-04-102026-05-15imported registry
Source
MiniCPM-Llama3-V 2.5
Version: not recorded · Protocol: not recorded
7252024-08-032026-05-18imported registry
Source
MiniCPM-o 4.5-Instruct
Version: not recorded · Protocol: not recorded
8762026-04-302026-05-15imported registry
Source
MiniCPM-V 4.6-Thinking (16x)
Version: not recorded · Protocol: not recorded
8312026-05-132026-05-18imported registry
Source
MiniMax-VL-01
Version: not recorded · Protocol: not recorded
8652025-01-142026-05-15imported registry
Source
Ovis2.5-9B
Version: not recorded · Protocol: not recorded
8792025-08-152026-05-18imported registry
Source
Qianfan-OCR
Version: not recorded · Protocol: not recorded
8802026-03-112026-05-15imported registry
Source
Qwen2-VL-2B
Version: not recorded · Protocol: not recorded
8092024-09-182026-05-18imported registry
Source
Qwen2-VL-72B
Version: not recorded · Protocol: not recorded
8772024-09-182026-05-15imported registry
Source
Qwen2-VL-7B
Version: not recorded · Protocol: not recorded
8662024-09-182026-05-15imported registry
Source
Qwen2.5-VL-3B
Version: not recorded · Protocol: not recorded
7972025-02-192026-05-18imported registry
Source
Qwen2.5-VL-72B
Version: not recorded · Protocol: not recorded
8852025-02-192026-05-15imported registry
Source
Qwen2.5-VL-7B
Version: not recorded · Protocol: not recorded
8642025-02-192026-05-18imported registry
Source
Qwen3-VL-235B-A22B-Instruct
Version: not recorded · Protocol: not recorded
9202025-11-262026-05-14imported registry
Source
Qwen3-VL-235B-A22B-Thinking
Version: not recorded · Protocol: not recorded
8752025-11-262026-05-15imported registry
Source
Qwen3-VL-8B-Instruct
Version: not recorded · Protocol: not recorded
8962025-11-262026-05-14imported registry
Source
Qwen3.5-397B-A17B
Version: not recorded · Protocol: not recorded
9312026-02-162026-05-18imported registry
Source
Qwen3.6-27B
Version: not recorded · Protocol: not recorded
8942026-04-212026-05-18imported registry
Source
Qwen3.6-35B-A3B
Version: not recorded · Protocol: not recorded
9002026-04-212026-05-18imported registry
Source
SenseNova-U1-A3B-MoT
Version: not recorded · Protocol: not recorded
9192026-05-122026-05-18imported registry
Source
VideoLLaMA3 2B
Version: not recorded · Protocol: not recorded
7792025-01-222026-05-18imported registry
Source
VideoLLaMA3 7B
Version: not recorded · Protocol: not recorded
8282025-01-222026-05-18imported registry
Source
ZAYA1-VL-8B
Version: not recorded · Protocol: not recorded
7982026-05-082026-05-18imported registry
Source

OCRBench v2 EN · overall-en-private · 5 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
Intern-S1-Pro
Version: not recorded · Protocol: not recorded
60.102026-03-262026-05-18imported registry
Source
Nemotron Nano V2 VL
Version: not recorded · Protocol: not recorded
61.20not recorded2026-04-20imported; unverified
Source
Ovis2.5-9B
Version: not recorded · Protocol: not recorded
63.402025-08-152026-05-18imported registry
Source
Qianfan-OCR
Version: not recorded · Protocol: not recorded
56.00not recorded2026-04-20imported; unverified
Source
Qwen3-Omni-30B
Version: not recorded · Protocol: not recorded
61.30not recorded2026-04-20imported; unverified
Source

olmOCR · pass-rate · 23 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
Chandra
Version: not recorded · Protocol: not recorded
83.102025-10-212026-05-15imported registry
Source
Chandra 2
Version: not recorded · Protocol: not recorded
85.902026-03-162026-05-15imported registry
Source
Chandra v0.1.0
Version: not recorded · Protocol: not recorded
83.10not recorded2026-04-20imported; unverified
Source
DeepSeek OCR
Version: not recorded · Protocol: not recorded
75.70not recorded2026-04-20imported; unverified
Source
DeepSeek-OCR
Version: not recorded · Protocol: not recorded
75.702025-10-212026-05-15imported registry
Source
DeepSeek-OCR-2
Version: not recorded · Protocol: not recorded
76.302026-01-282026-05-15imported registry
Source
dots.mocr
Version: not recorded · Protocol: not recorded
83.902026-03-132026-05-15imported registry
Source
dots.ocr
Version: not recorded · Protocol: not recorded
79.102025-12-022026-05-15imported registry
Source
dots.ocr 3B
Version: not recorded · Protocol: not recorded
79.10not recorded2026-04-20imported; unverified
Source
Falcon-OCR
Version: not recorded · Protocol: not recorded
80.302026-03-282026-05-15imported registry
Source
FireRed-OCR
Version: not recorded · Protocol: not recorded
70.202026-03-022026-05-15imported registry
Source
Infinity-Parser 7B
Version: not recorded · Protocol: not recorded
82.502025-06-012026-05-15imported registry
Source
Infinity-Parser2-Pro
Version: not recorded · Protocol: not recorded
87.602026-05-112026-05-15imported registry
Source
LightOnOCR-2-1B
Version: not recorded · Protocol: not recorded
83.202026-01-202026-05-15imported registry
Source
Marker 1.10.0
Version: not recorded · Protocol: not recorded
76.50not recorded2026-04-20imported; unverified
Source
Marker 1.10.1
Version: not recorded · Protocol: not recorded
76.10not recorded2026-04-20imported; unverified
Source
MinerU 2.5
Version: not recorded · Protocol: not recorded
75.20not recorded2026-04-20imported; unverified
Source
MinerU 2.5
Version: not recorded · Protocol: not recorded
77.502025-09-262026-05-15imported registry
Source
MonkeyOCR-pro-3B
Version: not recorded · Protocol: not recorded
75.80not recorded2026-04-20imported; unverified
Source
olmOCR
Version: not recorded · Protocol: not recorded
75.502025-02-252026-05-15imported registry
Source
olmOCR v0.4.0
Version: not recorded · Protocol: not recorded
82.40not recorded2026-04-20imported; unverified
Source
PaddleOCR-VL
Version: not recorded · Protocol: not recorded
80.002025-10-162026-05-15imported registry
Source
Qianfan-OCR
Version: not recorded · Protocol: not recorded
79.802026-03-112026-05-15imported registry
Source
§ 02 · Vendor surface

APIs and closed endpoints, by benchmark.

Enterprises still pay for SLAs, compliance, audit logs, regional hosting and support. This table is intentionally separate from open weights; API endpoints, frontier VLMs and closed commercial OCR systems are not labeled open source.


List prices vary by region and volume. The fair cost formula is instance price per hour divided by pages per hour, plus storage, orchestration, retry rate and human review. For self-hosted comparisons see our economics essay.

Separate benchmark and metric tables. A result date belongs to the source observation; the import date only records collection. An imported or missing protocol is not an independently reproduced ranking or a claim of current coverage.

OmniDoc · composite · 3 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
clearOCR
Version: not recorded · Protocol: not recorded
31.70not recorded2026-04-20imported; unverified
Source
Gemini 2.5 Pro
Version: not recorded · Protocol: not recorded
88.03not recorded2026-04-20imported; unverified
Source
Mistral OCR 3
Version: not recorded · Protocol: not recorded
79.75not recorded2026-04-20imported; unverified
Source

OCRBench v2 EN · overall-en-private · 5 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
Claude Sonnet 4
Version: not recorded · Protocol: not recorded
42.40not recorded2026-04-20imported; unverified
Source
Gemini 2.5 Pro
Version: not recorded · Protocol: not recorded
59.30not recorded2026-04-20imported; unverified
Source
GPT-4o
Version: not recorded · Protocol: not recorded
55.50not recorded2026-04-20imported; unverified
Source
GPT-4o Mini
Version: not recorded · Protocol: not recorded
44.10not recorded2026-04-20imported; unverified
Source
Seed1.6-vision
Version: not recorded · Protocol: not recorded
62.20not recorded2026-04-20imported; unverified
Source

olmOCR · pass-rate · 5 observations

Alphabetical within this metric; no cross-benchmark ranking.

Model / checkpointReported scoreResult dateImportedEvidence
Gemini Flash 2
Version: not recorded · Protocol: not recorded
63.80not recorded2026-04-20imported; unverified
Source
GPT-4o (Anchored)
Version: not recorded · Protocol: not recorded
69.90not recorded2026-04-20imported; unverified
Source
Mistral OCR 2
Version: not recorded · Protocol: not recorded
72.00not recorded2026-04-20imported; unverified
Source
Mistral OCR 3
Version: not recorded · Protocol: not recorded
78.00not recorded2026-04-20imported; unverified
Source
Nanonets OCR2 3B
Version: not recorded · Protocol: not recorded
69.50not recorded2026-04-20imported; unverified
Source
§ 03 · Evidence coverage

Cross-benchmark coverage

These models have observations in at least two registry benchmark slices. Coverage is not a quality ranking: the tasks, evaluation populations, versions and protocols differ. No raw score, average rank or top-3 count is combined into an overall winner.

ModelBenchmark slicesRecorded coverage
Claude Sonnet 42OCRBench v2 EN · Thai
DeepSeek-OCR2OmniDoc · olmOCR
DeepSeek-OCR-22OmniDoc · olmOCR
dots.mocr2OCRBench · olmOCR
dots.ocr 3B2OmniDoc · olmOCR
Falcon-OCR2OmniDoc · olmOCR
Gemini 1.5 Pro2CC-OCR · VideoOCR
Gemini 2.5 Pro4OmniDoc · OCRBench v2 EN · VideoOCR · Thai
GLM-OCR2OmniDoc · olmOCR
GPT-4o4OCRBench v2 EN · CC-OCR · VideoOCR · Arabic
GPT-4o Mini2OCRBench v2 EN · Arabic
Infinity-Parser2-Pro2OCRBench · olmOCR
InternVL3-78B2OCRBench · VideoOCR
Kimi K2.52OmniDoc · OCRBench
MinerU 2.52OmniDoc · olmOCR
Mistral OCR 32OmniDoc · olmOCR
MonkeyOCR-pro-3B2OmniDoc · olmOCR
olmOCR2OmniDoc · olmOCR
Ovis2.5-9B2OCRBench · OCRBench v2 EN
PaddleOCR-VL2OmniDoc · olmOCR
Qianfan-OCR4OmniDoc · OCRBench · OCRBench v2 EN · olmOCR
Qwen2.5-VL 32B2VideoOCR · Thai
Qwen2.5-VL 72B2VideoOCR · Thai
Qwen3.5-397B-A17B2OmniDoc · OCRBench

Alphabetical model order. Inspect each source and metric separately before making a recommendation.

§ 03½ · Ontology

Which benchmark answers which question?

A model is only SOTA for a use case when the benchmark output contract matches the production output contract.

Benchmark classBenchmarksMeasuresDoes not measure
Document parsingOmniDocBench, olmOCR-Bench, ParseBenchlayout, tables, formulas, reading orderprivate invoice/KIE reliability
Visual text reasoningOCRBench, OCRBench v2, CC-OCRtext localization plus reasoningcost, throughput, structured extraction
Scene textICDAR, Total-Text, COCO-Texttext in natural imagesPDFs, invoices, tables
HandwritingIAM, RIMES, Polish EMNISThandwriting CER and WERforms, layout, field extraction
TablesPubTabNet, FinTabNet, TableBanktable structure and cell F1full document parsing
Forms / KIESROIE, CORD, FUNSD, Kleisterkey-value extraction and schema fieldsfree-form full-page OCR quality
DocVQADocVQA, InfographicVQA, MP-DocVQAanswer correctnessfaithful full extraction
Multilingual OCRKITAB-Bench, ThaiOCRBench, PolEvallanguage coverage, script-specific CERgeneral layout robustness
Fig 3b · Benchmark ontology used by the router. OmniDocBench-style scores above 94 are useful, but small deltas should be treated as benchmark-saturated until private evals confirm the difference.
§ 04 · Figure

Twelve models, eight benchmarks.

A single grid to read coverage at a glance. PaddleOCR-VL and Gemini 2.5 Pro show the broadest reach; specialist systems light up a single column.

Rendered from the same registry as the tables above; green indicates higher normalised score within the benchmark.

Heatmap showing OCR model performance across 8 benchmarks. Green = high score. PaddleOCR-VL and Gemini 2.5 Pro show broadest coverage.
Fig 4 · Twelve OCR models × eight benchmarks. Each cell is normalised within its column. Greyed cells: no reproducible score in registry.
Horizontal bar chart comparing top 10 OCR models by OmniDocBench composite score.
Fig 5 · Top-10 by OmniDocBench composite.
Cost comparison chart for OCR systems. Exact self-hosted cost depends on hardware price, throughput, utilization, retries, and review rate.
Fig 6 · Price per 1,000 pages is a parameterized estimate: GPU or API cost, pages/hour, utilization, retries, orchestration and human review all change it.
§ 05
How it works

Three stages, one forward pass.

Classical OCR is a pipeline of three modules. First a detector draws boxes around text regions; then a recogniser reads the pixels inside each box into characters; finally a post-processor corrects the output and resolves reading order. Each module can fail independently, and the errors compound.

Detection granularity has shifted from words to lines to whole regions. Word-level detection — the CRAFT / EAST tradition — still dominates scene text. Line-level dominates documents. Region-level detection is where modern vision-language models thrive: they see entire paragraphs as semantic units and preserve layout without a separate analysis step.

Recognition used to be CTC — Connectionist Temporal Classification — which is fast but treats each character as independent. Attention-based decoders, standard since 2018, let the model condition each character on the whole image. That is why modern OCR finally stops confusing “rn” with “m” and “l” with “1”.

Post-processing is the unsexy part: language-model correction (“teh” to “the”), layout analysis (read left column before right), table structure recognition (scored by TEDS), and confidence filtering. It is also where traditional pipelines most often embarrass themselves.

The 2023–2026 shift is that vision-language models fold all three stages into a single forward pass. They read the document the way a literate human does — as one object, with layout, structure and language considered at once. Traditional OCR is no longer SOTA for complex document understanding, but Tesseract, EasyOCR and classic PaddleOCR still matter for CPU-only, air-gapped, deterministic and simple high-throughput scans.

§ 06 · History

The short version.

OCR evolved from template matching to CRNN/CTC recognizers, transformer OCR and now VLM document parsers. The relevant 2026 shift is that OCR often means document understanding: Markdown, tables, formulas, layout, extraction and evidence, not just characters.

Traditional OCR remains competitive for constrained, cheap, deterministic and high-throughput clean text. VLM OCR wins when the output contract includes reading order, table structure, formulas, messy scans or schema extraction.

Read full OCR history
§ 07 · Decision tools

What are you trying to extract?

Pick the document type. Each link goes to a dedicated page with setup instructions, failure modes and a working code sample.

  1. Scenario · 01

    Invoices & receipts

    Line items, totals, vendor info → structured data. Table-heavy. Receipts fade and crumple.

    PaddleOCR-VL-1.5free · local
  2. Scenario · 02

    Handwritten notes

    Forms, signatures, meeting notes, historical documents. Variable slant, irregular spacing.

    TrOCRfree · local
  3. Scenario · 03

    PDFs & reports

    Multi-page documents, multi-column layout, tables, headers, footnotes.

    Chandra / olmOCRfree · local
  4. Scenario · 04

    Photos & screenshots

    Camera captures, screen grabs, social media imagery — often rotated, sometimes warped.

    PaddleOCR-VL-1.5free · local
  5. Scenario · 05

    Scanned books & archives

    Digitise printed text, old documents, historical archives with degraded print.

    GLM-OCR / PaddleOCR-VL-1.5free · local
  6. Scenario · 06

    ID cards & passports

    KYC verification, identity documents, MRZ code reading. Compliance and audit matter.

    Azure / Googleenterprise
§ 07½ · Private eval

Public SOTA is only the prior.

The real winner is the model that wins on your documents under your output contract.

Minimum OCR eval
  1. Use at least 50 documents; 200+ is better before procurement or migration.
  2. Include scans, photos, rotated pages, low DPI, handwriting, stamps, tables, formulas and multi-column PDFs.
  3. Score text CER, reading order, table TEDS, field F1, hallucinated text rate, missing block rate, page latency and cost/page separately.
  4. Do not average everything into one number unless the weights are visible.
§ 08 · Long form

Deep dives & techniques.

  1. Essay
    $/1K

    The OCR economics shift

    Self-hosted VLM-OCR can beat API economics at scale, but only under explicit assumptions about throughput, utilization, retries and review rate.

  2. Architecture

    How Docling works

    The architecture of IBM’s document-understanding library and why VLM pipelines outperform traditional OCR.

  3. Engineering

    Interactive OCR correction

    Handling OCR “flicker” (H vs N) and camera drift in mobile apps. Google MLKit plus centroid anchoring.

  4. Reference
    26

    Benchmarks directory

    26 OCR benchmarks across document parsing, handwriting, video OCR, scene text and multilingual tasks.

  5. Case study
    PL

    Rys OCR — Polish SOTA

    71% CER reduction on Polish diacritics. LoRA fine-tune of PaddleOCR-VL. Apache 2.0.

  6. Tutorial

    Ship it

    3 questions, one recommendation, copy-paste code that runs in 10 minutes. For engineers who picked a model and need to wire it in.

§ 09 · Testing priority

What we still need to verify.

Generated by generateTestingPriorityList() in lib/scoring. Ranks outstanding (model, benchmark) pairs by importance weight — coverage gaps first, then benchmark criticality.

If you are planning to run one of these — see the submission note below.

#ModelBenchmarkReasonWeightType
01InternVL3-78BomnidocbenchHigh performer (89.1) needs OmniDoc10.8OSS
02InternVL3-78Bocrbench-v2High performer (89.1) needs OCRBench10.8OSS
03InternVL3-78Bolmocr-benchHigh performer (89.1) needs olmOCR10.8OSS
04Qwen2.5-VL 72BomnidocbenchPrimary benchmark missing7.2OSS
05Qwen2.5-VL 72Bocrbench-v2Primary benchmark missing7.2OSS
06Qwen2.5-VL 72Bolmocr-benchPrimary benchmark missing7.2OSS
07Qwen2.5-VL 32BomnidocbenchPrimary benchmark missing7.2OSS
08Qwen2.5-VL 32Bocrbench-v2Primary benchmark missing7.2OSS
09Qwen2.5-VL 32Bolmocr-benchPrimary benchmark missing7.2OSS
10InternVL3-78Bcc-ocrHigh performer (89.1) needs CC-OCR7.2OSS
Fig 7 · Top-10 testing priorities computed from the registry. Each row is a (model, benchmark) pair we have not independently verified yet. Sparkline is illustrative.

Run any of these OCR models?

Send us your numbers, or flag ones we got wrong. We verify and credit every contribution.

Share results →
§ 10 · Contribute

Know an OCR result
we’re missing?

Fresh numbers, stale data, a model we haven’t tested — tell us. Real humans read every message, and every verified result gets attribution in the registry.

Spotted a number that looks wrong?Tell us →
§ 11 · FAQ

Frequently asked, honestly answered.

Questions that arrive in our inbox every week, answered with real numbers drawn from the tables above.

Q01What is the best OCR model in 2026?+

There is no single best OCR model. For complex document parsing, the imported OmniDocBench records include GLM-OCR / PaddleOCR-VL-1.5-class VLM OCR; for OCRBench v2 English visual text reasoning, Ovis2.5-9B leads the imported public registry; for PDF-to-Markdown, Infinity-Parser2-Pro and Chandra-style parsers are the first systems to test.

Q02Which OCR model has the best English text recognition?+

On classic OCRBench, the imported Papers With Code snapshot is led by Qwen3.5-397B-A17B at 931 points. On OCRBench v2 English, Ovis2.5-9B leads at 63.4, followed by Seed1.6-vision at 62.2 in the local registry.

Q03Are open-weight OCR models better than paid APIs in 2026?+

Sometimes. Open-weight VLM OCR can beat paid APIs on public document-parsing benchmarks and can be cheaper at scale, but APIs may still win on SLA, compliance, region, audit logs, latency guarantees, and integration. Treat public SOTA as a prior, then run a private benchmark.

Q04Which OCR is best for invoices and receipts?+

For invoices and receipts, start with the best document-parsing or PDF-to-Markdown systems, then score field F1 on your schema. OmniDocBench is relevant for layout, tables, and formulas, but it does not prove production KIE reliability for your vendors, tax IDs, currencies, or Polish diacritics.

Q05How much does OCR cost per page?+

OCR cost per 1,000 pages depends on instance price per hour, pages per hour, utilization, storage, orchestration, retry rate, and human review rate. Vendor APIs are simpler to buy; self-hosted open-weight models can be cheaper only when GPU utilization and operations are under control.

§ 12
Methodology

Where these numbers come from.

This page reads the local benchmarks.json registry, including imported Papers With Code records, vendor and paper reports, and earlier CodeSOTA API imports. Collection dates do not establish result dates or current model coverage. Missing versions, protocols and dates are shown explicitly in the benchmark tables.

An imported registry flag does not mean CodeSOTA reproduced the run. Treat externally reported and unverified observations as evidence to inspect at the linked source, then test the selected checkpoint on your own held-out documents.

Don’t want to pick a model? Drop a PDF at hardparse.com to explore our sister product. Its deployment is separate from upstream benchmark evaluations; a public model score is not a measured score for the Mac application.

Read next

Three places to go from here.

Condensed view
OCR Power Ranking
Explore historical registry coverage. Benchmark populations and protocols differ; combined ranks do not establish a production winner.
Practical guide
Best OCR for handwriting
Handwriting candidates, line vs page recognition, documented APIs and the evidence needed for a credible CER result.
Comparison
PaddleOCR vs Tesseract vs dots.ocr
Three-way benchmark: throughput, edit distance, $/1K pages. When each OCR engine wins.