MiniCPM-OCR pairs a 1.3B parser with a 2B model that flags OCR you shouldn't trust
OpenBMB's open MiniCPM-OCR parser and Jev verifier score each extracted region, so document pipelines can route only doubtful output to review.
Picture a two-person bookkeeping shop that takes a monthly shoebox of client receipts, supplier invoices and bank statements and turns them into ledger entries. Today the developer half of the shop runs every scan through an OCR tool, dumps the output into a spreadsheet, and the bookkeeper re-checks every page, because there's no signal for which pages are wrong. When the volume spikes at quarter-end, they spot-check instead. That's when a dropped decimal point or a unit price paired with the wrong row slips into the books and surfaces weeks later.
OpenBMB's MiniCPM-OCR release, published October 27, 2026, targets the missing piece: a second model, MiniCPM-OCR Jev, that looks at a document region and its OCR output and returns a 0–1 score for how likely the extraction is correct. As @omarsar0 put it, the setup is parse, score, then send low-scoring output to a human or a correction step, with the caveat that "Jev estimates reliability. It doesn't fix errors itself."
What it is
Two open models, both under Apache 2.0 for code, docs and weights, according to the GitHub repo:
- MiniCPM-OCR 1.0 (1.3B) parses Chinese and English documents and PDFs into Markdown or JSON, covering text, tables, formulas, charts, seals and key information extraction. OpenBMB says it handles scans, photos, curved, skewed and recaptured pages. That maps to the shoebox: phone photos of crumpled receipts are in scope.
- MiniCPM-OCR Jev (2B) scores OCR results per text, formula or table region. Per the Hugging Face model card, it was trained from Qwen3.5-2B with the output head replaced by a binary classifier. You give it the original region crop plus candidate text, and it returns a score where higher means more likely correct. The card lists three uses: auto-accept reliable regions, route the rest to review, or pick the best result among several OCR models. That's the "which pages do I actually need to check" signal the shop lacks.
The vendor numbers, all run by OpenBMB: 93.68 on Real5-OmniDocBench and 54.7 on OCRBench v2 for the parser. Jev posts an AUROC (×100) of 93.6 on JevOCRBench, versus 90.1 for JEV-35B-A3B and 93.8 for Qwen3.5-397B-A17B. The model card also reports a cross-parser test on 200 samples, where Jev's AUROC ranged from 91.9 to 93.4 across MiniCPM-OCR 1.0, GLM-OCR, PaddleOCR-VL-1.6 and Xiaomi-OCR-0. OpenBMB's launch post calls Jev "model-agnostic" and claims throughput of 1.49× PaddleOCR-VL-1.6 with its DSpark acceleration.
Alternatives, as our sources describe them:
- Google Document AI Invoice Parser: a ready-made invoice schema with line items and confidence scores, at $0.10 per document up to 10 pages, according to InvoiceExtractor (Oct 6, 2026). Trade-off: no design work, but cloud-only (VDF.AI) and priced per document.
- Mistral OCR 4 / Document AI: $4 per 1,000 pages for OCR and $5 per 1,000 for schema-based field extraction (InvoiceExtractor). VDF.AI says it returns per-page and per-word confidence scores, with self-hosting offered to enterprise customers. Trade-off: cheap and scored, but proprietary.
- Tesseract, EasyOCR, classic PaddleOCR: CodeSOTA says these still matter for CPU-only, air-gapped, deterministic and simple high-throughput scans. Trade-off: predictable and light.
Our research also flagged Docling and olmOCR, but the pages we fetched don't describe them in enough detail to compare fairly, so we won't.
Who it's for
Pick this up if you run a document pipeline on Chinese or English paperwork, already have a human who reviews output, and want to cut that review down to the regions most likely to be wrong. It suits you if you want to keep documents on your own hardware or score output from a parser you already use.
Skip it if your documents are mostly handwritten, in other languages, or if you want a fixed invoice schema on day one with no model hosting. Google's parser is the closer fit for that last case.
Before and after
Before:
- Scan or photograph the document.
- Run OCR; get text with no reliability signal.
- A person re-reads every page, or spot-checks at random.
- Errors that slip through surface downstream.
After, per the Jev model card:
- Parse with MiniCPM-OCR 1.0 (or another parser).
- Score each text, table or formula region with Jev.
- Regions above a threshold you set from your own samples proceed automatically; the rest go to human review.
- Optionally, parse each region with several OCR models and let Jev pick the highest-scoring candidate.
AI郵報 frames Jev as a tool for ordering the review queue, not a second human answer. It suggests testing on a batch you've already checked by hand, comparing errors caught against correct items sent to review. It also suggests always routing high-risk fields, like account numbers and totals, to a person regardless of score.
Try it
The repo offers a free API, local deployment, fine-tuning via LLaMA-Factory or Swift, and Agent Skills. Its suggested first step is to hand a coding agent the skill file. For the parser:
Read and execute https://github.com/OpenBMB/MiniCPM-OCR/blob/main/docs/SKILL_en.md
For a local Jev scoring service (Docker or SDK, on vLLM, SGLang, llama.cpp or Ollama):
Read and execute https://github.com/OpenBMB/MiniCPM-OCR/blob/main/docs/SKILL_jev_en.md
If you're calling Jev through the cloud API, Docker or the SDK with its built-in renderer, send the region image, the candidate text and the region category. The model card warns to check the verdict field first: only scored means the model actually ran. Fixed values returned for precheck or rendering failures must not be read as low scores.
On a laptop with no NVIDIA GPU, the dsh-pdf-router plugin docs document a llama.cpp setup. You download the Q8_0 GGUF (775 MB) plus an 859 MB vision projector, with ~16 GB system RAM listed as the floor, then serve an OpenAI-compatible endpoint:
# 3) serve an OpenAI-compatible endpoint on :18499
llama-server.exe --model MiniCPM-OCR-1_0-Q8_0.gguf --mmproj mmproj-model-f16-4x.gguf `
--host 127.0.0.1 --port 18499 --ctx-size 16384 --n-gpu-layers 999
That covers the parser only. The repo says to set your Jev threshold "only after checking it on a small batch from the real application."
Where it breaks
- The headline numbers are vendor-run. We found no independent reproduction of the 93.68 or 93.6 scores. Invoice Data Extraction's benchmark guide (leaderboards read Oct 21, 2026) notes that OmniDocBench and olmOCR-Bench contain no invoices, so parsing scores don't tell you how receipts fare. explainx.ai adds that the parser comparison set was chosen by the authors. It also points out that AUROC measures ranking, not what a given score means.
- One hands-on test, mixed results. @dani_avila7 ran it on an invoice, a bank statement, a hand-corrected PO and a German–English hotel bill. They got 82/102 fields exactly right and 73/78 headers and printed totals. Results dropped on handwritten corrections (3/8) and row counting (0/6). Jev flagged the images holding 15 of 20 wrong fields with no false alarms, which also means five wrong fields went unflagged. How often Jev is confidently wrong across larger samples is unknown.
- "Any parser" is a vendor claim. The cross-parser test covered four parsers on 200 samples. The model card itself says to validate separately on other parsers or document types. Whether Jev works on Tesseract, olmOCR or cloud API output, and what input those parsers need to supply, isn't shown. Best-of-N requires candidates sharing the same crop, and Jev can only pick among candidates, so quality is bounded by theirs.
- Region boundaries matter. explainx.ai warns that if your key fields are small, such as a date or an amount, the scored regions need to match them. The exact output format for region scores isn't confirmed beyond a 0–1 score per region.
- Speed depends on hardware. The 1.2 pages/s figure is quoted on an RTX 5090. On the plugin author's CPU/iGPU machine, a scanned page took 21–43 s and a table page 199 s (dsh-pdf-router). Minimum GPU memory is in the project FAQ, which we haven't verified.
- Scope. Support is described for Chinese and English only. Handwriting, other languages and multi-page tables are untested beyond the single test above. Who DSpark comes from, and whether it carries separate license terms, is unclear.
- The cloud path is incomplete. The batched best-of-N cloud guide is marked as a stub still being written.
The pattern, scoring extraction before trusting it, is the useful part. Whether this particular verifier holds up on your shoebox is something only your own checked sample will tell you.
Sources
- GitHub - OpenBMB/MiniCPM-OCR: Fast, accurate OCR with correctness assessment. · GitHub
- openbmb/MiniCPM-OCR-Jev · Hugging Face · Huggingface
- MiniCPM-OCR 1.0 與 Jev 是什麼?文件辨識、錯誤評分和人工複核怎麼搭配 · AI郵報
- OpenBMB (@OpenBMB) on X · @OpenBMB
- Daniel San (@dani_avila7) on X · @dani_avila7
- Pdf Router — DSH Plugin for DeepSeek Harness · DeepSeek Harness Plugin Hub Community
- MiniCPM-OCR 1.0 and Jev: 1.3B Parser, 3.62x MinerU Speed | explainx.ai Blog · explainx.ai
- OCR Benchmarks 2026: What Each Measures and Who Leads · Invoice Data Extraction
- Mistral OCR vs Google Document AI Pricing for Invoice Extraction - Blog - InvoiceExtractor · InvoiceExtractor
- On-Premise Document AI: IDP Options Compared (2026) · VDF.AI
- OCR SOTA Router 2026: Choose OCR by Output Contract | CodeSOTA · Codesota
- @omarsar0: Decision models can also improve your OCR pipelines. · @omarsar0