Skip to content

OCR engines in Docling

Overview

Docling supports multiple OCR engines that can be installed as extra packages:

RapidOCR

This section describes RapidOCR for versions v3.9.1, v3.9.2.

RapidOCR backends

RapidOCR supports multiple backends. Docling currently (2026.07.28) supports: "onnxruntime" (default), "openvino", "paddle", "torch".

RapidOCR relies on the PP-OCR models. Docling currently (2026.07.28) supports: "PP-OCR v4", "PP-OCR v5", "PP-OCR v6".

PP-OCR versions supported by each rapidocr backend:

Backend PP-OCR versions
onnxruntime v4, v5, v6
openvino v4, v5, v6
paddle v4, v5, v6
torch v4, v5 (ch only), v6

Notice: torch on PP-OCRv5 supports ONLY chinese.

RapidOCR language support

PP-OCRv4 supported languages/scripts:

arabic, ch, chinese_cht, cyrillic, devanagari, en, japan, ka, korean, latin, ta, te

Notice: cyrillic, devanagari, latin are actually scripts and each one supports multiple languages.

PP-OCRv5 supported languages/scripts:

arabic, ch, cyrillic, devanagari, el, en, eslav, korean, latin, ta, te, th

PP-OCRv6 supported languages:

ch, chinese_cht, en, japan, af, az, bs, ca, cs, cy, da, de, es, et, eu, fi, fr, ga, gl,
hr, hu, id, is, it, ku, la, lb, lt, lv, mi, ms, mt, nl, no, oc, pl, pt, qu, rm, ro,
rs_latin, sk, sl, sq, sv, sw, tl, tr, uz, vi, french, german

Additionally the following aliases exist for PP-OCR v6:

zh      -> ch
zh_cn   -> ch
zh-cn   -> ch
zh_tw   -> chinese_cht
zh-tw   -> chinese_cht
ja      -> japan
jp      -> japan
ko      -> korean

Notices:

  • German exists in 2 formats: de, german.
  • French exists in 2 formats: fr, french.
  • Korean is actually not supported in PP-OCR v6 (only the alias exists).

RapidOCR language input semantic

The following table explains the semantic of each language input for RapidOCR

Token Meaning
af Afrikaans
arabic Arabic-script family (9): Arabic, Persian, Uyghur, Urdu, Pashto, Kurdish,
Sindhi, Baluchi, English
az Azerbaijani
bs Bosnian
ca Catalan
ch Chinese (Simplified)
chinese_cht Chinese (Traditional)
cs Czech
cy Welsh
cyrillic Cyrillic-script family (34): Russian, Belarusian, Ukrainian, Serbian
(Cyrillic), Bulgarian, Mongolian, Abkhaz, Adyghe, Kabardian, Avar, Dargwa,
Ingush, Chechen, Lak, Lezgian, Tabasaran, Kazakh, Kyrgyz, Tajik, Macedonian,
Tatar, Chuvash, Bashkir, Meadow Mari, Moldovan, Udmurt, Komi, Ossetian,
Buriat, Kalmyk, Tuvan, Yakut, Karakalpak, English
da Danish
de German
devanagari Devanagari-script family (14): Hindi, Marathi, Nepali, Bihari, Maithili,
Angika, Bhojpuri, Magahi, Sadri, Newari, Konkani (Goan), Sanskrit, Haryanvi,
English
el Greek
en English
es Spanish
eslav East Slavic family, Cyrillic script (4): Russian, Belarusian, Ukrainian,
English
et Estonian
eu Basque
fi Finnish
fr French
ga Irish
gl Galician
hr Croatian
hu Hungarian
id Indonesian
is Icelandic
it Italian
japan Japanese
ka Kannada
korean Korean
ku Kurdish
la Latin
lb Luxembourgish
lt Lithuanian
lv Latvian
mi Maori
ms Malay
mt Maltese
nl Dutch
no Norwegian
oc Occitan
pl Polish
pt Portuguese
qu Quechua
rm Romansh
ro Romanian
rs_latin Serbian (Latin)
sk Slovak
sl Slovenian
sq Albanian
sv Swedish
sw Swahili
ta Tamil
te Telugu
th Thai
tl Tagalog
tr Turkish
uz Uzbek
vi Vietnamese

EasyOCR

This section describes EasyOCR for versions v1.7.2, v1.7.1. The model checkpoints are those of gen2.

EasyOCR language support

EasyOCR accepts as input a list of languages. The language resolution that takes place inside EasyOCR enables those models that can support all input languages.

The following table shows which recognition model is enabled per language combination (the detection checkpoint craft_mlt_25k.pth is required in all cases):

Recognition checkpoint Supported languages
english_g2.pth en
latin_g2.pth af, az, bs, cs, cy, da, de, en, es, et, fr, ga,
hr, hu, id, is, it, ku, la, lt, lv, mi, ms, mt,
nl, no, oc, pi, pl, pt, ro, rs_latin, sk, sl, sq,
sv, sw, tl, tr, uz, vi
zh_sim_g2.pth ch_sim + en
japanese_g2.pth ja + en
korean_g2.pth ko + en
telugu.pth te + en
kannada.pth kn + en
cyrillic_g2.pth ru, rs_cyrillic, be, bg, uk, mn, abq, ady, kbd,
ava, dar, inh, che, lbe, lez, tab, tjk, en

Notice: keep the requested language list as short and specific as possible. Because the resolution picks a model that covers all requested languages, adding a language you do not need downgrades the model for the ones you do. For example, ["en"] selects the English-specific english_g2.pth, while ["en", "de"] falls back to the broader latin_g2.pth, which is generally less accurate on English text.

Check the semantic of easyocr language inputs here: https://www.jaided.ai/easyocr/

Nemotron-OCR

This section describes Nemotron-OCR for versions v2.0.0, v2.0.2.

Nemotron works only on Linux and requires CUDA (Docling enforces 13.x).

The following table shows the supported Python versions and languages

Nemotron version Python version Supported language inputs
v2.0.0 3.12 only english (alias en), multilingual (alias multi)
v2.0.2 3.11, 3.12, 3.13 english (alias en), multilingual (alias multi)

The "multi/multilingual" languages cover: English, Chinese (Simplified and Traditional), Japanese, Korean, and Russian

Tesseract - TesserOCR

Tesseract must be installed as a system package (see installation). TesserOCR is a python library that wraps the Tesseract engine.

Languages support

OcrMac

This section describes ocrmac for versions v1.0.0, v1.0.1.

ocrmac is a thin wrapper around Apple's Vision framework. It is macOS-only and ships no model artifacts of its own — the recognizers are part of the operating system. The supported language set is therefore a property of the macOS version, not of the ocrmac release.