CodeSOTA / The document desk

Find OCR that fits
your documents.

Compare open-weight models, inspect benchmark evidence, and choose the output your workflow needs.

Start with your output

Six jobs. Different evidence.

01

Read text →

Page or photograph → text

CER / WER; page-level omissions

01 / Measured by CodeSOTA

Scores with execution evidence.

Handwriting transcription and visual-text question answering use separate metrics and scopes. Full-split runs and historical subsets remain separate.

IAM lines / full 2,915-line test

full · cer · Every nonempty transcription in the pinned test split; expected exactly 2,915 lines

Model / revisionCER ↓LinesGPU-slot timeEvidence
trocr-large-handwrittene68501f437cd3.41%2915288.4sInspect examples →
trocr-base-handwritteneaacaf452b064.72%2915200.1sInspect examples →
trocr-small-handwrittenb4648cfa17196.33%291547.4sInspect examples →
Compatible model scores versus measured model size
Same pinned protocol · PNG · SVG
Experimental batch-sensitive run — not a reference ranking

Matched singleton checks changed answers materially. Retained for diagnosis; use the full serial reference instead. This run also used a smaller image budget.

OCRBench v1 / full 1,000 questions — experimental batch-4

full · accuracy · All 1,000 questions; question, category, dataset and answer metadata matched against the pinned upstream list

Model / revisionAccuracy ↑QuestionsGPU-slot timeEvidence
Qwen2.5-VL-3B-Instruct66285546d2b860.70%1000372.2sInspect examples →
Qwen2-VL-2B-Instruct895c3a49bc3f49.00%1000268.3sInspect examples →
Results by OCRBench task component
ComponentModelCorrect / questionsAccuracy
Artistic Text RecognitionQwen2.5-VL-3B-Instruct42 / 5084.0%
Digit String RecognitionQwen2.5-VL-3B-Instruct27 / 5054.0%
Doc-oriented VQAQwen2.5-VL-3B-Instruct109 / 20054.5%
Handwriting RecognitionQwen2.5-VL-3B-Instruct28 / 5056.0%
Handwritten Mathematical Expression RecognitionQwen2.5-VL-3B-Instruct25 / 10025.0%
Irregular Text RecognitionQwen2.5-VL-3B-Instruct39 / 5078.0%
Key Information ExtractionQwen2.5-VL-3B-Instruct119 / 20059.5%
Non-Semantic Text RecognitionQwen2.5-VL-3B-Instruct40 / 5080.0%
Regular Text RecognitionQwen2.5-VL-3B-Instruct43 / 5086.0%
Scene Text-centric VQAQwen2.5-VL-3B-Instruct135 / 20067.5%
Artistic Text RecognitionQwen2-VL-2B-Instruct31 / 5062.0%
Digit String RecognitionQwen2-VL-2B-Instruct17 / 5034.0%
Doc-oriented VQAQwen2-VL-2B-Instruct89 / 20044.5%
Handwriting RecognitionQwen2-VL-2B-Instruct27 / 5054.0%
Handwritten Mathematical Expression RecognitionQwen2-VL-2B-Instruct13 / 10013.0%
Irregular Text RecognitionQwen2-VL-2B-Instruct35 / 5070.0%
Key Information ExtractionQwen2-VL-2B-Instruct90 / 20045.0%
Non-Semantic Text RecognitionQwen2-VL-2B-Instruct26 / 5052.0%
Regular Text RecognitionQwen2-VL-2B-Instruct41 / 5082.0%
Scene Text-centric VQAQwen2-VL-2B-Instruct121 / 20060.5%
Compatible model scores versus measured model size
Same pinned protocol · PNG · SVG

OCRBench v1 / full serial reference

full · accuracy · All 1,000 questions; question, category, dataset and answer metadata matched against the pinned upstream list

Model / revisionAccuracy ↑QuestionsGPU-slot timeEvidence
Qwen2.5-VL-3B-Instruct66285546d2b881.30%1000683.3sInspect examples →
Qwen2-VL-2B-Instruct895c3a49bc3f78.50%1000770.9sInspect examples →
Results by OCRBench task component
ComponentModelCorrect / questionsAccuracy
Artistic Text RecognitionQwen2.5-VL-3B-Instruct45 / 5090.0%
Digit String RecognitionQwen2.5-VL-3B-Instruct39 / 5078.0%
Doc-oriented VQAQwen2.5-VL-3B-Instruct162 / 20081.0%
Handwriting RecognitionQwen2.5-VL-3B-Instruct37 / 5074.0%
Handwritten Mathematical Expression RecognitionQwen2.5-VL-3B-Instruct46 / 10046.0%
Irregular Text RecognitionQwen2.5-VL-3B-Instruct46 / 5092.0%
Key Information ExtractionQwen2.5-VL-3B-Instruct176 / 20088.0%
Non-Semantic Text RecognitionQwen2.5-VL-3B-Instruct44 / 5088.0%
Regular Text RecognitionQwen2.5-VL-3B-Instruct48 / 5096.0%
Scene Text-centric VQAQwen2.5-VL-3B-Instruct170 / 20085.0%
Artistic Text RecognitionQwen2-VL-2B-Instruct48 / 5096.0%
Digit String RecognitionQwen2-VL-2B-Instruct30 / 5060.0%
Doc-oriented VQAQwen2-VL-2B-Instruct139 / 20069.5%
Handwriting RecognitionQwen2-VL-2B-Instruct41 / 5082.0%
Handwritten Mathematical Expression RecognitionQwen2-VL-2B-Instruct36 / 10036.0%
Irregular Text RecognitionQwen2-VL-2B-Instruct48 / 5096.0%
Key Information ExtractionQwen2-VL-2B-Instruct173 / 20086.5%
Non-Semantic Text RecognitionQwen2-VL-2B-Instruct45 / 5090.0%
Regular Text RecognitionQwen2-VL-2B-Instruct48 / 5096.0%
Scene Text-centric VQAQwen2-VL-2B-Instruct177 / 20088.5%
Compatible model scores versus measured model size
Same pinned protocol · PNG · SVG
Historical subset: IAM lines

IAM lines

subset · cer · First valid examples from the pinned split

Model / revisionCER ↓LinesGPU-slot timeEvidence
trocr-small-handwrittenb4648cfa17195.86%32Not recordedInspect examples →
Historical subset: IAM lines / 256-line subset

IAM lines / 256-line subset

subset-256 · cer · First 256 nonempty transcriptions in pinned test split order (2,915 total test lines)

Model / revisionCER ↓LinesGPU-slot timeEvidence
trocr-large-handwrittene68501f437cd3.97%25686.1sInspect examples →
trocr-base-handwritteneaacaf452b064.93%25642.2sInspect examples →
trocr-small-handwrittenb4648cfa17196.20%25614.0sInspect examples →

GPU-slot time includes model/data loading and CPU scoring. IAM CER is a character-edit ratio. OCRBench accuracy uses upstream answer-in-response matching; it is not document-layout or table quality. Each task page records decoding and image budgets.

02 / Candidate discovery

Open weights first. Evidence alongside.

The legacy snapshot contains 71 models labelled open-weight and 317 reported observations. Use these to build a test shortlist.

Reset

Primary metadata refreshed 2026-10-18: 65 repository mappings, 6 software pipelines, 0 unresolved identities. Current repository metadata does not identify the checkpoints used by historical reports. Hub tensor counts may include tied weights.

71 matching model labels · alphabetical, not ranked. Changing the reported-score slice changes observations below; models match the output, deployment and search filters.

CandidateSource metadata / current snapshotRecorded benchmark coverageInspect
AIN 7BResearch8.291B Hub tensorsmitPinned repo 20fc39f8c3cfKITAB-BenchProject ↗
Reported observations
Chandradatalab-to8.767B Hub tensorsopenrail · Licence file ↗Pinned repo bd40c2157656olmOCR-BenchProject ↗
Reported observations
Chandra 2datalab-to5.296B Hub tensorsopenrail · Licence file ↗Pinned repo af93b47dba1bolmOCR-BenchProject ↗
Reported observations
Chandra v0.1.0datalab-to8.767B Hub tensorsopenrail · Licence file ↗Pinned repo bd40c2157656olmOCR-BenchProject ↗
Reported observations
DeepSeek OCRDeepSeek3.336B Hub tensorsmit · Licence file ↗Pinned repo 9f30c71f441dolmOCR-BenchProject ↗
Reported observations
DeepSeek-OCRDeepSeek3.336B Hub tensorsmit · Licence file ↗Pinned repo 9f30c71f441dolmOCR-Bench · OmniDocBenchProject ↗
Reported observations
DeepSeek-OCR (Gundam-M)DeepSeek3.336B Hub tensorsmit · Licence file ↗Pinned repo 9f30c71f441dOmniDocBenchProject ↗
Reported observations
DeepSeek-OCR (Small, 100 vision tokens)DeepSeek3.336B Hub tensorsmit · Licence file ↗Pinned repo 9f30c71f441dFox English OCR subsetProject ↗
Reported observations
DeepSeek-OCR-2DeepSeek3.389B Hub tensorsapache-2.0 · Licence file ↗Pinned repo aaa02f381194olmOCR-Bench · OmniDocBenchProject ↗
Reported observations
dots.mocrRedNote HILab3.039B Hub tensorsmitPinned repo e539fbb52280OCRBench · olmOCR-BenchProject ↗
Reported observations
dots.ocrRedNote HILab3.039B Hub tensorsmitPinned repo c0111ce6bc07olmOCR-Bench · OmniDocBenchProject ↗
Reported observations
dots.ocr 3BRedNote HILab3.039B Hub tensorsmitPinned repo c0111ce6bc07olmOCR-Bench · OmniDocBenchProject ↗
Reported observations
Source-reported observations · 30 in selected slice

Registry labels do not establish current availability, licences, pinned model identity or compatible protocols. Imported observations never enter measured leaderboards or aggregates. Alphabetical within metric; no shared rank.

OmniDocBench · composite

ModelReported valueProtocol / versionResult / import dateEvidence
DeepSeek-OCR86.46Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
DeepSeek-OCR-291.09Not recordedVersion not recorded2026-01-28Imported 2026-05-15Source ↗Reported; not reproduced
dots.ocr 3B88.41Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
Falcon-OCR88.64Not recordedVersion not recorded2026-03-28Imported 2026-05-15Source ↗Reported; not reproduced
FireRed-OCR-2B92.94Not recordedVersion not recorded2026-03-02Imported 2026-05-15Source ↗Reported; not reproduced
Kimi K2.588.8Not recordedVersion not recorded2026-02-02Imported 2026-05-15Source ↗Reported; not reproduced
MinerU 2.590.67Not recordedVersion not recorded2025-09-26Imported 2026-05-15Source ↗Reported; not reproduced
MonkeyOCR-3B87.13Not recordedVersion not recorded2025-06-05Imported 2026-05-15Source ↗Reported; not reproduced
MonkeyOCR-pro-1.2B86.96Not recordedVersion not recorded2025-06-05Imported 2026-05-15Source ↗Reported; not reproduced
MonkeyOCR-pro-3B88.85Not recordedVersion not recorded2025-06-05Imported 2026-05-15Source ↗Reported; not reproduced
OCRVerse 4B88.56Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
olmOCR81.79Not recordedVersion not recorded2025-02-25Imported 2026-05-15Source ↗Reported; not reproduced
PaddleOCR-VL92.86Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
PaddleOCR-VL92.56Not recordedVersion not recorded2025-10-16Imported 2026-05-15Source ↗Reported; not reproduced
PaddleOCR-VL 0.9B92.56Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
PP-StructureV386.73Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
Qianfan-OCR93.12Not recordedVersion not recorded2026-03-11Imported 2026-05-15Source ↗Reported; not reproduced
Qwen2.5-VL87.02Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
Qwen3-VL-235B89.15Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
Qwen3.5-397B-A17B90.8Not recordedVersion not recorded2026-02-16Imported 2026-05-18Source ↗Reported; not reproduced

OmniDocBench · text-edit-distance

ModelReported valueProtocol / versionResult / import dateEvidence
DeepSeek-OCR (Gundam-M)0.123Not recordedVersion not recorded2025-10-21Imported 2026-05-13Source ↗Reported; not reproduced
dots.ocr0.125Not recordedVersion not recorded2025-12-02Imported 2026-05-15Source ↗Reported; not reproduced
MiniCPM-o 4.5-Instruct0.109Not recordedVersion not recorded2026-04-30Imported 2026-05-13Source ↗Reported; not reproduced
PP-StructureV30.145Not recordedVersion not recorded2025-07-08Imported 2026-05-18Source ↗Reported; not reproduced
Qwen2.5-VL-72B0.226Not recordedVersion not recorded2025-02-19Imported 2026-05-18Source ↗Reported; not reproduced

OmniDocBench · layout-map

ModelReported valueProtocol / versionResult / import dateEvidence
MinerU 2.597.5Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced

OmniDocBench · table-teds

ModelReported valueProtocol / versionResult / import dateEvidence
PaddleOCR-VL93.52Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced
Qianfan-OCR91.02Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced

OmniDocBench · formula-cdm

ModelReported valueProtocol / versionResult / import dateEvidence
Qianfan-OCR92.43Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced

OmniDocBench · text-edit

ModelReported valueProtocol / versionResult / import dateEvidence
Qianfan-OCR0.041Not recordedVersion not recordedNot recordedImported 2026-04-20Source not resolvedReported; not reproduced

Snapshot retrieved 2026-10-18. 93 legacy model labels lack matched model metadata; they appear only when unresolved entries are included. Source dates and import dates remain distinct.

03 / From shortlist to working pipeline

Make the choice practical.

Choose OCR for Python →

Start with the output your application consumes, then test complete pipelines on representative files.

Original OCR archive ↗ · PaddleOCR vs Tesseract · PaddleOCR vs EasyOCR

04 / Coverage, honestly

What we can prove. What comes next.

Document parsing / ParseBench

Evaluator and dataset revisions pinned. Local pipeline adapter and validation still required; no CodeSOTA scores.

Integration plan →

Broader OCR & document tasks

Full OCRBench visual-text QA runs appear above when registered. OmniDocBench, table reconstruction and form-field scoring still require separate adapters; legacy observations do not become execution jobs.

Adapter backlog →

Test your real workload

Measure omissions, structure errors, latency, failure rate and human review on held-out documents. Current public data cannot establish a universal best OCR model.

How benchmark fit works →

Inspectable by people and agents.

OCR catalogue API · Task ontology · OpenAPI

Feedback about this page

Saved privately with this page URL. Do not include passwords or personal data. Network identities used for spam limits are hashed; raw IP addresses are not stored with feedback.