Start here

Quick start & APIInstallOnline OCRCode generator

Models & pipelines

PP-OCRv6 modelsLanguagesPP-StructureV3PaddleOCR-VL

Deploy & integrate

Serving & APIPaddleOCR.jsMCP server

Fix & upgrade

TroubleshootingMigrate from 2.xReleases

Evaluate

Our benchmarkCompare OCR toolsLicense & cost

Tools

Online OCRInstall command builderCode generatorError fixer2.x → 3.x converterLanguage code finder

Language

English简体中文日本語Try OCR online
Models · PaddleOCR 3.7

PP-OCRv6 models: tiny, small and medium compared

PP-OCRv6 is the text detection and recognition model family that PaddleOCR 3.7 loads by default. It comes in three tiers — tiny (1.5M parameters, 6.3 MB), small (7.7M, 30 MB) and medium (34.5M, 133 MB) — and one model reads 50 languages. Below: Baidu's accuracy and speed tables, our own CPU measurements, and how to choose and load each tier.

Checked against PaddleOCR 3.7.0Updated 14 min read
On this page
  1. What PP-OCRv6 is (and what "PaddleOCR v6" isn't)
  2. The three tiers: parameters, sizes, languages
  3. How PP-OCRv6 works, in plain words
  4. Official accuracy: PP-OCRv6 vs PP-OCRv5
  5. Size vs accuracy
  6. Official speed tables (with hardware)
  7. Our CPU benchmark: accuracy, speed, memory, disk
  8. Which tier should I use?
  9. How to select a tier in Python and the CLI
  10. Scripts outside PP-OCRv6: the PP-OCRv5 multilingual models
  11. PP-OCRv5 vs PP-OCRv6 at a glance
  12. PP-OCR version history
  13. Where the official sources disagree
  14. Questions

Short answer: keep the default, PP-OCRv6 medium, when accuracy matters — it got 123 of our 124 test items exactly right. Switch to small for CPU apps and anything interactive: in our test it was about 3.3× faster than medium (0.90 s vs 2.92 s per page) and missed only two more items. Use tiny (6.3 MB) on edge devices, but never for Japanese — it can't read kana. Korean, Arabic, Cyrillic, Devanagari, Thai, Greek, Tamil and Telugu still use PP-OCRv5 models.

Parameters, medium
34.5M
small 7.7M · tiny 1.5M (det + rec)3
Model files, medium
133 MB
small 30.0 MB · tiny 6.3 MB4
Languages per model
50
49 for tiny (no Japanese)1

What PP-OCRv6 is (and what "PaddleOCR v6" isn't)#

PP-OCR is the name of PaddleOCR's text-line OCR system: a detection model that finds every line of text and returns a polygon, and a recognition model that reads the cropped line. PP-OCRv6 is the sixth generation of that model pair. It was released on June 11, 2026 together with the paddleocr package version 3.7.0, which made it the default.3

The version numbers are easy to mix up. There is no "PaddleOCR v6" package — the latest package is PaddleOCR 3.7.0. "v6" is the model generation. The same package can still load PP-OCRv5, v4 and v3 models, and it does so automatically for languages that PP-OCRv6 doesn't cover (see below).

Baidu describes PP-OCRv6 as one family with three tiers aimed at edge/IoT (tiny), mobile/desktop (small) and server (medium) use. The headline change from PP-OCRv5 is language coverage: the small and medium recognizers read 50 languages with one model — simplified Chinese, traditional Chinese, English, Japanese and 46 Latin-script languages — so you no longer need a separate model for French or Vietnamese.1 If you just call PaddleOCR(), you get the medium tier:6

pythondefault.py
from paddleocr import PaddleOCR

ocr = PaddleOCR()   # lang=None, ocr_version=None -> PP-OCRv6_medium_det + PP-OCRv6_medium_rec

The three tiers: parameters, sizes, languages#

Each tier is two models, PP-OCRv6_<tier>_det and PP-OCRv6_<tier>_rec. Parameter counts come from the Hugging Face model cards; sizes are the figures in the official module docs, which match the Hugging Face files when you count in MiB (1,048,576 bytes).45

TierBuilt forDet paramsRec paramsTotalDet MBRec MBTotal MBLanguages
PP-OCRv6 mediumServer (default)15.5M19M34.5M59.473.3132.750
PP-OCRv6 smallMobile / desktop2.48M5.2M7.7M9.620.430.050
PP-OCRv6 tinyEdge / IoT0.43M1.1M1.5M1.94.46.349 — no Japanese

The det + rec parameter counts add up to the tier totals Baidu publishes (1.5M / 7.7M / 34.5M) after rounding.3 Totals in the MB column are our sums of the published per-model sizes.

The tiny tier can't read Japanese — we measured how badly#

The official docs mention this in a single clause ("tiny supports 49, excluding Japanese") and the OCR pipeline doc adds that PP-OCRv6_tiny does not support japan.17 The Chinese version of the algorithm doc gives the reason: Japanese was left out to avoid the impact of about 4,000 kanji and kana characters on the tiny recognizer's 1.1M-parameter output layer.2 We counted the dictionaries shipped with each model: tiny has 6,904 entries and no hiragana or katakana at all; small and medium each have 18,708 entries, 180 of them kana.12

What that means in practice: on our Japanese shop notice, tiny's character error rate was 47.3%, against 0% for small and medium. Only 1 of 8 lines came out right — the one made of kanji and digits. PaddleOCR doesn't warn you, and the confidence scores stay high enough to fool a threshold filter:1112

Ground truthPP-OCRv6 tiny outputScore
臨時休業のお知らせ臨時休業⑦书知5世0.880
いつもご利用いただき誠にありがとうございます。八⊃毛己利用大龙老誠仁亡方己忒末寸。0.706
設備点検のため、下記の日程で臨時休業いたします。設備点梭D大女、下記D日程飞臨時休業大L末寸。0.808
休業日:2026年11月18日(水)休業日:2026年11月18日(水)0.950
営業再開:2026年11月19日(木)午前10時當業再開:2026年11月19日(木)午前10時0.948
お客様にはご迷惑をおかけしますが、书客様C己迷惑左书力L末寸、0.801
何卒ご理解のほどよろしくお願い申し上げます。何卒己理解D話∑上弓L<书顧申L上伏末寸。0.725
みなと町ベーカリー 店主办太亡町心一力一店主0.778

Every kana is replaced by a look-alike from tiny's dictionary: の becomes ⑦, お becomes 书, し becomes L. Medium and small read all eight lines correctly. If your input might contain Japanese, use small or medium; in the browser, our online tool uses small by default for this reason.

How PP-OCRv6 works, in plain words#

BackbonePPLCNetV4One lightweight feature extractor shared by both tasks.
DetectionRepLKFPN neckLarge-kernel neck sees more context per pixel; outputs line polygons.
RecognitionLightSVTR neck + CTCLocal and global attention over the line, decoded character by character.
  • One backbone for both jobs. PPLCNetV4 follows the MetaFormer pattern (a cheap "token mixer" followed by a "channel mixer"), and uses structural reparameterization: extra branches help during training and are folded into a single convolution for inference. For detection it shrinks the image in both directions; for recognition it shrinks only the height, so a text line becomes a left-to-right sequence.1
  • Detection sees wider context. The new RepLKFPN neck uses 7×7 depthwise convolutions instead of 3×3 and has 31% fewer parameters than PP-OCRv5's RSEFPN (118K vs 172K).1
  • Recognition mixes local and global views. The EncoderWithLightSVTR neck combines a small convolution for neighbouring characters with one or two self-attention layers for the whole line. A CTC head produces the text; an NRTR head helps only during training and is removed at inference.1
  • Tiny is distilled. The tiny recognizer has no neck at all and is trained to imitate the medium model (knowledge distillation).1
  • One dictionary for 50 languages. The character set was extended with about 200 diacritical characters, which is what lets one model read Polish, Vietnamese or Icelandic alongside Chinese.1

Official accuracy: PP-OCRv6 vs PP-OCRv5#

These numbers are Baidu's own, measured on its in-house multi-scenario benchmark — 16 detection categories and 15 recognition categories. The test set isn't public, so treat them as vendor-reported.1

Baidu's benchmark: v6 small beats v5 server

Detection Hmean (average of 16 categories) and recognition accuracy (weighted average of 15 categories), %. Baidu in-house benchmark.

Detection HmeanRecognition accuracy
ModelDetection HmeanRecognition accuracy
PP-OCRv6 medium86.2%83.2%
PP-OCRv6 small84.1%81.3%
PP-OCRv6 tiny80.6%73.5%
PP-OCRv5 server81.6%78.1%
PP-OCRv5 mobile75.2%73.7%
Vendor-reported: PP-OCRv6.en.md, sections 3.1–3.2.

Two things stand out. Small (7.7M parameters) beats the much larger PP-OCRv5 server on both averages. And tiny's recognition average (73.5%) is level with PP-OCRv5 mobile (73.7%) at roughly a third of the download — but it falls far behind on handwriting, as the category tables show.

Detection Hmean by category (%)#

ModelAvgHW-CNHW-ENPrint-CNPrint-ENTrad. CNAncientJapaneseBlurEmojiWarpPinyinArtTableRotatedIndustrialGeneral
v6 medium86.283.784.095.193.786.380.284.394.199.688.674.069.096.893.873.382.8
v6 small84.180.587.194.293.685.772.682.392.699.787.669.665.395.693.767.678.2
v6 tiny80.679.485.993.192.383.763.076.689.399.886.159.060.194.791.062.073.8
v5 server81.680.384.194.591.781.567.677.290.196.287.667.167.397.180.064.379.7
v5 mobile75.274.477.790.591.082.358.172.787.493.682.757.552.592.864.752.872.1

The biggest detection gain is on rotated text (93.8 vs 80.0 for v5 server). PP-OCRv5 server still edges medium on tables (97.1 vs 96.8) and handwritten English (84.1 vs 84.0).1

Recognition accuracy by category (%)#

ModelW-avgHW-CNHW-ENPrint-CNPrint-ENTrad. CNAncientJapaneseConfusableSpecialGeneralPinyinArtIndustrialScreenCard
v6 medium83.262.167.891.594.178.672.490.564.961.787.578.171.277.482.588.1
v6 small81.357.661.190.593.377.071.188.264.160.285.775.968.476.479.786.9
v6 tiny73.540.139.386.788.465.068.489.852.357.178.065.454.762.171.280.5
v5 server78.158.059.690.185.174.760.473.759.456.886.574.464.070.268.187.6
v5 mobile73.741.750.986.086.072.057.875.855.754.880.772.554.059.357.681.7

Baidu highlights the Japanese (+16.8 points), ancient-text (+12.0) and screen-text (+14.4) gains of medium over v5 server.2 Note the odd row in this table: tiny scores 89.8% on Japanese, close to medium, even though it can't read kana. The docs don't explain the test set behind this cell; for real Japanese text, trust the measured result above.

The same tables also include vision-language models (Gemini-3.1-Pro, GPT-5.5, Qwen3-VL-235B), all of which score lower than PP-OCRv6 medium on Baidu's set; that is the basis of the claim that the 34.5M-parameter model "surpasses VLMs".1

Don't compare these with older PP-OCRv5 numbers. The same PP-OCRv5_server_rec model is listed at 86.38% in the module table, 0.8401 in the PP-OCRv5 paper's benchmark and 78.1% here. They are three different test sets; only numbers from the same table are comparable.48

Size vs accuracy#

PP-OCRv6 small gives the most accuracy per megabyte

Baidu's recognition accuracy (weighted average) vs total det + rec model size. Log scale on the size axis.

PP-OCRv6PP-OCRv5
ModelSize (MB)Recognition accuracy
v6 tiny6.3 MB73.5%
v6 small30.0 MB81.3%
v6 medium132.7 MB83.2%
v5 mobile20.7 MB73.7%
v5 server165.3 MB78.1%
Accuracy: Baidu in-house benchmark, PP-OCRv6.en.md. Sizes: official module docs, det + rec summed by paddleocr.dev.

Going from tiny to small costs 24 MB and buys 7.8 accuracy points; going from small to medium costs another 103 MB for 1.9 points. Against the previous generation, small beats PP-OCRv5 mobile by 7.6 points for 9 MB more, medium beats PP-OCRv5 server by 5.1 points while being smaller, and tiny matches PP-OCRv5 mobile at under a third of its size.

Official speed tables (with hardware)#

Baidu timed the full pipeline — image loading, pre- and post-processing and both models — on 200 general and document images. Values are seconds per image. The doc names the hardware but not thread counts or batch settings.1

HardwareBackendv6 mediumv6 smallv6 tinyv5 serverv5 mobilev4 mobile
NVIDIA A100PaddlePaddle0.290.250.130.320.250.14
NVIDIA A100TensorRT--0.320.16--0.330.16
NVIDIA V100PaddlePaddle0.720.490.210.660.500.25
NVIDIA V100ONNX Runtime0.670.530.290.770.460.27
NVIDIA V100TensorRT0.770.600.230.730.590.27
Intel Xeon 8350CPaddlePaddle2.050.790.322.040.800.62
Intel Xeon 8350COpenVINO1.400.590.207.300.780.60
Intel Xeon 8350CONNX Runtime3.310.610.226.360.610.49
Apple M4PaddlePaddle8.823.070.96>105.825.65
Apple M4ONNX Runtime5.551.290.357.201.101.02

Read it by row, not by headline. On a GPU, medium is barely faster than v5 server on A100 (0.29 vs 0.32 s) and slower on V100 with PaddlePaddle (0.72 vs 0.66 s). The large speedups Baidu quotes — 5.2× for medium with OpenVINO, 6.1× for tiny on Apple M4 — come from CPU rows where PP-OCRv5 server or mobile is unusually slow.1 On Apple Silicon, ONNX Runtime beat PaddlePaddle for every model in this table.

The module docs also publish per-model timings for four inference engines (PaddlePaddle static and dynamic graph, Transformers, ONNX Runtime) on an NVIDIA A100 and a Xeon Gold 6248, but don't say which device produced which number, so we don't reproduce them here.4

Our CPU benchmark: accuracy, speed, memory, disk#

We ran all five current models on a 4-vCPU Intel Xeon @ 2.10 GHz with 15 GB RAM and no GPU, using PaddleOCR 3.7.0 with two engines: PaddlePaddle 3.2.0 and ONNX Runtime. The test set is five documents with 124 known text items — a clean receipt, the same receipt photographed at an angle, an English invoice, a Chinese + English notice and a Japanese notice. Each number is the median of three warm runs; document orientation, unwarping and line orientation were switched off. Full method and raw data are on our benchmarks page.11

ModelItems exact /124CER, all 5CER, no Japaneses/page Paddle 3.2.0s/page ONNX RuntimePeak RAM PaddlePeak RAM ORTOn disk
v6 medium1230.03%0.03%4.512.922,579 MB2,890 MB139.2 MB
v6 small1210.17%0.21%1.230.901,503 MB1,858 MB31.6 MB
v6 tiny1119.83%0.46%0.390.261,259 MB1,427 MB6.6 MB
v5 server1170.34%0.43%5.2535.703,521 MB5,206 MB173.6 MB
v5 mobile1170.67%0.84%0.900.731,433 MB1,846 MB22.1 MB

How to read the columns: CER is the character error rate after normalising full-width punctuation, dashes and spaces on both sides, averaged over the documents. Peak RAM is the peak resident memory of the whole Python process while it ran all five documents. On disk is the downloaded det + rec model folders for the PaddlePaddle engine, in decimal megabytes (106 bytes); the ONNX folders are within 1 MB of these.11

ONNX Runtime wins, except on v5 server

Seconds per page on our 4-vCPU Xeon, average of 5 documents (median of 3 warm runs each). Lower is faster.

PaddlePaddle 3.2.0ONNX Runtime
ModelPaddlePaddle 3.2.0ONNX Runtime
PP-OCRv6 tiny0.39 s0.26 s
PP-OCRv5 mobile0.90 s0.73 s
PP-OCRv6 small1.23 s0.90 s
PP-OCRv6 medium4.51 s2.92 s
PP-OCRv5 server5.25 s35.70 s — off the scale
Measured by paddleocr.dev, 2026-10-27. Raw data and method: /benchmarks.

What we take from it:

  • Medium is the most accurate model we tested — its only miss in 124 items was "600x600" on the invoice read as "600×600" with a multiplication sign, a slip every model made. It also beat PP-OCRv5 server on both accuracy (123 vs 117) and speed (4.51 vs 5.25 s with PaddlePaddle).
  • Small is the sweet spot on CPU. About 3.3× faster than medium with ONNX Runtime, 36–42% less peak memory, under a quarter of the download, and only two more misses: "Order" read as "0rder" on both receipts.
  • Tiny is genuinely tiny and fast — 0.26 s per page — and outside Japanese its error rate (0.46%) was close to PP-OCRv5 server's (0.43%).
  • The PP-OCRv5 server + ONNX Runtime anomaly. PP-OCRv5 server took 35.7 s per page under ONNX Runtime, against 5.2 s with PaddlePaddle; the text output was identical. Baidu's own Xeon rows show the same direction, though far less extreme (6.36 s ONNX Runtime vs 2.04 s PaddlePaddle). A later check with lang="korean", which uses the same v5 server detector with a small Korean recognizer, showed the same pattern (12.35 s vs 1.80 s per image), so the detector looks like the slow part. If you need v5 server or a PP-OCRv5 language on CPU, use the PaddlePaddle engine.114
  • Our CPU result for medium differs from Baidu's Xeon 8350C row, where ONNX Runtime (3.31 s) was slower than PaddlePaddle (2.05 s). Different CPUs, thread counts and engine versions move these numbers a lot — benchmark on your own hardware before committing.

We used paddlepaddle==3.2.0 because the current PyPI release, 3.3.1, crashes PaddleOCR 3.7.0 on CPU unless oneDNN is disabled — and with enable_mkldnn=False medium took 11.9 s per page. The fix is on our troubleshooting page; install commands are on /install.

Which tier should I use?#

Your situationUseWhy
Server or batch job where accuracy matters mostv6 mediumHighest scores in Baidu's tables and in ours (123/124). It's the default, so no code change.
Handwriting, ancient text, dense screenshotsv6 mediumLargest gaps over small in Baidu's recognition table: handwritten English 67.8 vs 61.1, handwritten Chinese 62.1 vs 57.6.
CPU-only app, interactive tool, desktop softwarev6 small0.9 s per page on our 4-core CPU with ONNX Runtime; 31 MB of models.
Browser or mobile appv6 smallPaddleOCR.js maps ocrVersion: "PP-OCRv6" to small, and it is the default preset of the official iOS demo; the Android demo ships small and tiny.
Edge or IoT device, very high volume, Latin or Chinese text onlyv6 tiny6.3 MB, 0.26 s per page in our test. Weak on handwriting (HW-EN 39.3%).
Any chance of Japanesev6 small or mediumTiny has no kana in its dictionary.
Korean, Arabic, Cyrillic, Devanagari, Thai, Greek, Tamil, TeluguPP-OCRv5 multilingualNot covered by PP-OCRv6. Pass lang and 3.7 picks the right model — see languages.
You must reproduce results from PaddleOCR 3.0–3.6PP-OCRv5 serverocr_version="PP-OCRv5". Also what PP-StructureV3 uses by default in 3.7.

Sources: the PaddleOCR.js source and the iOS and Android deployment docs for the platform rows; Baidu's tables above for accuracy; our benchmark for speed.11113 Try small and tiny side by side on your own image with the online OCR tool.

How to select a tier in Python and the CLI#

This is the part that trips people up: lang and ocr_version can only ever select the medium tier. For any PP-OCRv6 language, PaddleOCR 3.7 returns PP-OCRv6_medium_det + PP-OCRv6_medium_rec. To get small or tiny, name the models explicitly:6

from paddleocr import PaddleOCR

ocr = PaddleOCR(
    text_detection_model_name="PP-OCRv6_small_det",     # or PP-OCRv6_tiny_det
    text_recognition_model_name="PP-OCRv6_small_rec",   # or PP-OCRv6_tiny_rec
    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_textline_orientation=False,
    engine="onnxruntime",   # optional: fastest CPU engine in our test
)
for res in ocr.predict("receipt.jpg"):
    print(res["rec_texts"])
paddleocr ocr -i receipt.jpg \
    --text_detection_model_name PP-OCRv6_small_det \
    --text_recognition_model_name PP-OCRv6_small_rec \
    --use_doc_orientation_classify False \
    --use_doc_unwarping False \
    --use_textline_orientation False \
    --engine onnxruntime

When you pass a model name or directory, PaddleOCR ignores lang and ocr_version and logs this warning:6

text
`lang` and `ocr_version` will be ignored when model names or model directories are not `None`.

So PaddleOCR(lang="japan", text_recognition_model_name="PP-OCRv6_tiny_rec") runs tiny on your Japanese text without complaint. Other selections:

  • Previous generations: PaddleOCR(ocr_version="PP-OCRv5") loads PP-OCRv5_server_det + PP-OCRv5_server_rec. ocr_version="PP-OCRv4" works only for lang="ch" and "en" and loads the v4 mobile models. Any other version string raises ValueError.6
  • Other scripts: PaddleOCR(lang="korean") loads PP-OCRv5_server_det + korean_PP-OCRv5_mobile_rec. Our language code finder shows the model for every code.
  • Browser: PaddleOCR.js maps ocrVersion: "PP-OCRv6" to the small tier; tiny needs explicit model names there too. See the PaddleOCR.js guide.
  • Inside PP-StructureV3: it still reads text with PP-OCRv5 server by default; passing the PP-OCRv6 models fixed three misread lines on our invoice. How.

The code generator writes these snippets for you, including the HTTP and JavaScript versions.

Scripts outside PP-OCRv6: the PP-OCRv5 multilingual models#

PP-OCRv6 covers Chinese, Japanese and Latin-script languages. Everything else in PaddleOCR 3.7 is served by small PP-OCRv5 recognizers released between June and October 2025, paired with the PP-OCRv5_server_det detector. The accuracy figures are Baidu's, each on its own test set, so compare them only with the "previous generation" column.8

Recognition modelReadsAccuracyGain vs prev. (%)Test images
korean_PP-OCRv5_mobile_recKorean, English88.0%+65.05,007
arabic_PP-OCRv5_mobile_recArabic, Persian, Uyghur, Urdu, Pashto, Kurdish, Sindhi, Balochi, English81.27%+22.832,676
cyrillic_PP-OCRv5_mobile_rec33 Cyrillic-script languages, English80.27%+21.27,600
eslav_PP-OCRv5_mobile_recRussian, Belarusian, Ukrainian, English81.6%+31.47,031
devanagari_PP-OCRv5_mobile_recHindi, Marathi, Nepali and 10 more, English84.96%+68.263,611
th_PP-OCRv5_mobile_recThai, English82.68%–4,261
el_PP-OCRv5_mobile_recGreek, English89.28%–2,799
ta_PP-OCRv5_mobile_recTamil, English94.2%+39.232,121
te_PP-OCRv5_mobile_recTelugu, English87.65%+43.472,478

Two further PP-OCRv5 multilingual models, latin_ and en_PP-OCRv5_mobile_rec, are now mostly superseded by PP-OCRv6; 3.7 still loads the Latin one for Pali (pi), which PP-OCRv6 explicitly excludes.6 One code, ka, only has a PP-OCRv3 model. The full routing for all 112 codes is on the languages page.

PP-OCRv5 vs PP-OCRv6 at a glance#

PP-OCRv5PP-OCRv6
ReleasedMay 20, 2025 (PaddleOCR 3.0)June 11, 2026 (PaddleOCR 3.7.0)
Tiersmobile, servertiny, small, medium
Languages in the main modelSimplified and traditional Chinese, pinyin, English, Japanese50: Chinese (both), English, Japanese, 46 Latin-script
Other scriptsSeparate multilingual recognizersNone — falls back to the v5 recognizers
Baidu benchmark, rec / detserver 78.1 / 81.6 · mobile 73.7 / 75.2medium 83.2 / 86.2 · small 81.3 / 84.1 · tiny 73.5 / 80.6
Our test, items exact /124server 117 · mobile 117medium 123 · small 121 · tiny 111
Default in 3.7PP-StructureV3 text models; non-v6 languagesPaddleOCR()

Should you upgrade? For Chinese, English, Japanese and Latin-script text, yes. In both Baidu's numbers and ours, medium and small are more accurate than v5 server and v5 mobile. On our CPU, medium was also faster than v5 server; small was slightly slower than v5 mobile (0.90 vs 0.73 s with ONNX Runtime) but made four fewer misses. Stay on v5 only for scripts v6 doesn't cover, or when you need to reproduce older output exactly.111

PP-OCR version history#

  1. First lightweight model — "Open source 8.6M lightweight Chinese OCR model".9
  2. PP-OCR — the first named system; paper arXiv:2009.09941 (September 21, 2020).9
  3. PP-OCRv2 — released with PaddleOCR 2.3; arXiv:2109.03144.9
  4. PP-OCRv3 — released with PaddleOCR 2.5; paper arXiv:2206.03001 followed in June. Its recognizers are still the only option for lang="ka" in 3.7.9
  5. PP-OCRv4 — release/2.7, mobile and server versions. The only generation without a paper in the official list.9
  6. PP-OCRv5 — released with PaddleOCR 3.0. In 3.0.1 (June 5, 2025) the default switched from mobile to server.9
  7. PP-OCRv5 multilingual — 3.1.0 added recognizers for 37 languages including French, Spanish, Russian and Korean; 3.2.0 English, Thai and Greek; 3.3.0 Cyrillic, Arabic, Devanagari, Telugu and Tamil.39
  8. PP-OCRv6 — tiny, small and medium tiers, 50 languages in one model; default in PaddleOCR 3.7.0. Paper arXiv:2606.13108.39

For package releases rather than model generations, see PaddleOCR releases; to move old 2.x code to the 3.x API, use the migration guide.

Where the official sources disagree#

We found these conflicts while checking every number on this page. Where we had to pick, we used the source code or the actual files.

  • "2.37× GPU inference speedup." The PP-OCRv6 doc's opening paragraph claims it for medium over PP-OCRv5 server, but the speed table in the same document shows 0.29 vs 0.32 s on A100 (which the doc itself calls "1.1× faster") and medium slower on V100 with PaddlePaddle and TensorRT. We found no table that supports 2.37×. The README cites different figures: 5.2× on CPU with OpenVINO, 6.1× for tiny on Apple M4.13
  • 48 or 50 languages? The English doc and the recognition model cards say 50. The three detection model cards on Hugging Face say "Supports 48 languages", and the Chinese doc says 48 in one place and 50 in another. The code accepts 52 PP-OCRv6 codes, two of which are aliases (french, german) — 50 languages.256
  • Model sizes. PP-OCRv5_server_det is 84.3 MB in the module docs and 101 MB in model_list.md; its files add up to 84.24 MiB. ch_RepSVTR_rec is 22.1 MB in one doc and 48.8 MB in two others. The Korean, Latin and East Slavic v5 recognizers are listed at 14 MB each, but their files are 13.0, 7.8 and 7.7 MiB. Published "MB" figures are effectively MiB; our on-disk numbers above are decimal MB of the whole model folder, so they read a few percent higher.4510
  • Same model, different scores. PP-OCRv5_server_rec is 86.38%, 0.8401 or 78.1% depending on which document you read — three different benchmarks (see the callout above).48
  • 106 or 109 languages for PP-OCRv5 multilingual? The v5 multilingual doc says 106; the README, after the October 2025 release, says 109.38
  • Missing PP-OCRv6 rows. model_list.md shows "-" for PP-OCRv6 accuracy, latency and size, and the standard T4 latency tables list PP-OCRv6 as "- / -".410

If you spot another, or one of these gets fixed upstream, email hello@paddleocr.dev.

Questions#

What is PP-OCRv6?

PP-OCRv6 is the sixth generation of PaddleOCR's text detection and recognition models, released on June 11, 2026 with PaddleOCR 3.7.0. It has three tiers — tiny (1.5M parameters), small (7.7M) and medium (34.5M) — and the small and medium recognizers read 50 languages with one model. Medium is the default in PaddleOCR 3.7.

Is there a PaddleOCR v6?

Not as a package. The latest paddleocr release is 3.7.0. "v6" refers to the PP-OCRv6 model generation that 3.7.0 uses by default. pip install paddleocr==3.7.0 gets you PP-OCRv6.

How big are the PaddleOCR models?

Detection plus recognition: PP-OCRv6 tiny 6.3 MB, small 30.0 MB, medium 132.7 MB (published sizes). PP-OCRv5 mobile is 20.7 MB and PP-OCRv5 server 165.3 MB. On disk, our downloaded model folders measured 6.6, 31.6, 139.2, 22.1 and 173.6 MB (decimal). Peak process memory while running them on our CPU ranged from about 1.3 GB (tiny) to 3.5 GB (v5 server) with PaddlePaddle.

Is PP-OCRv6 better than PP-OCRv5?

For Chinese, English, Japanese and Latin-script text, yes. On Baidu's benchmark medium scores 83.2% recognition accuracy vs 78.1% for PP-OCRv5 server; on our five test documents medium got 123 of 124 items exact vs 117 for v5 server, and was faster on CPU. PP-OCRv6 doesn't cover Korean, Arabic, Cyrillic, Devanagari, Thai, Greek, Tamil or Telugu — those still use PP-OCRv5 models.

How do I use PP-OCRv6 small or tiny instead of medium?

Pass both model names: PaddleOCR(text_detection_model_name="PP-OCRv6_small_det", text_recognition_model_name="PP-OCRv6_small_rec"), or the same flags on the CLI. lang and ocr_version can only select medium.

Does PP-OCRv6 tiny support Japanese?

No. Its dictionary has no hiragana or katakana. In our test it produced a 47.3% character error rate on a Japanese notice — without any warning and with confidence scores mostly above 0.7. Use small or medium for Japanese.

How do I go back to PP-OCRv5 or PP-OCRv4?

Use PaddleOCR(ocr_version="PP-OCRv5") for the v5 server models, or ocr_version="PP-OCRv4" with lang="ch" or "en" for the v4 mobile models. On the CLI: paddleocr ocr -i img.png --ocr_version PP-OCRv5.

Does PP-OCRv6 need a GPU?

No. On our 4-vCPU Xeon without a GPU, small averaged 0.9 s per page and medium 2.9 s with ONNX Runtime. Baidu's A100 numbers are 0.25 s and 0.29 s per image.

Sources

  1. PP-OCRv6 algorithm documentation (English) — tiers, 50 languages, architecture, detection/recognition tables, end-to-end speed table: docs/version3.x/algorithm/PP-OCRv6/PP-OCRv6.en.md (lines 3–123; repo commit dab3fe3).
  2. PP-OCRv6 algorithm documentation (Chinese) — reason tiny excludes Japanese (line 138), "48 languages" wording (line 65), per-category gains (line 107): PP-OCRv6.md.
  3. PaddleOCR README — 3.7.0 release on 2026.06.11, tier totals "tiny (1.5M) / small (7.7M) / medium (34.5M)", 3.3.0 multilingual release: README.md (lines 71–131).
  4. Module documentation — model sizes, PP-OCRv5/v4 module tables (NVIDIA T4 / Intel Xeon Gold 6271C), per-engine timings: text_detection.en.md and text_recognition.en.md.
  5. Hugging Face model cards and file listings for PaddlePaddle/PP-OCRv6_{tiny,small,medium}_{det,rec} — parameter counts, "Supports 48 languages" on the detection cards, file sizes, dictionaries in inference.yml. Fetched 2026-10-27.
  6. PaddleOCR 3.7.0 source, paddleocr/_pipelines/ocr.py — v6 language set (lines 58–62), model-name override and warning (102–127), _get_ocr_model_names (318–422), CLI flags (434–565). Byte-identical to the PyPI 3.7.0 wheel.
  7. OCR pipeline documentation — supported lang per ocr_version, tiny/Japanese note (line 2862): OCR.en.md.
  8. PP-OCRv5 documentation — PP-OCRv5.en.md and PP-OCRv5_multi_languages.en.md (accuracy per multilingual model, lines 154–179; language lists, lines 244–256).
  9. Release history — docs/update/update.en.md, docs/papers.en.md and docs/index/index.en.md (PP-OCRv4, lines 58–60).
  10. docs/version3.x/model_list.md — alternative size figures (PP-OCRv5_server_det 101 MB, ch_RepSVTR_rec 48.8 MB) and "-" for PP-OCRv6 rows.
  11. paddleocr.dev benchmark, 2026-10-27: Linux x86-64, 4 vCPU Intel Xeon @ 2.10 GHz, 15 GB RAM, no GPU, Python 3.13, paddleocr 3.7.0, paddlex 3.7.2, paddlepaddle 3.2.0 or onnxruntime 1.31.1; 5 documents, 124 known text items, median of 3 warm runs; document preprocessing and text-line orientation off. Raw data: results.jsonl and summary.json. Method.
  12. paddleocr.dev re-run of PP-OCRv6 tiny on our Japanese notice, 2026-10-27 (ONNX Runtime engine, same machine), output text quoted verbatim; dictionary sizes counted by us from each model's Hugging Face inference.yml.
  13. Cross-platform deployment: PaddleOCR.js source (paddleocr-js/packages/core/src/pipelines/ocr/shared.ts, PP-OCRv6 → small), iOS deployment doc (presets, small default) and Android deployment doc.
  14. paddleocr.dev, 2026-10-28: PaddleOCR(lang="korean") (PP-OCRv5_server_det + korean_PP-OCRv5_mobile_rec) on our clean receipt image, same machine, median of 3 warm runs: 12.35 s with onnxruntime 1.31.1 vs 1.80 s with paddlepaddle 3.2.0. Per-item misreads for every model are listed on /benchmarks.
Updated October 27, 2026·How we verify facts