Back to Docling

OCR engines in Docling

docs/concepts/OCR.md

2.118.012.8 KB
Original Source

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:

BackendPP-OCR versions
onnxruntimev4, v5, v6
openvinov4, v5, v6
paddlev4, v5, v6
torchv4, v5 (ch only), v6

<u>Notice</u>: 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

<u>Notice</u>: 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

<u>Notices</u>:

  • 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

TokenMeaning
afAfrikaans
arabicArabic-script family (9): Arabic, Persian, Uyghur, Urdu, Pashto, Kurdish,
Sindhi, Baluchi, English
azAzerbaijani
bsBosnian
caCatalan
chChinese (Simplified)
chinese_chtChinese (Traditional)
csCzech
cyWelsh
cyrillicCyrillic-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
daDanish
deGerman
devanagariDevanagari-script family (14): Hindi, Marathi, Nepali, Bihari, Maithili,
Angika, Bhojpuri, Magahi, Sadri, Newari, Konkani (Goan), Sanskrit, Haryanvi,
English
elGreek
enEnglish
esSpanish
eslavEast Slavic family, Cyrillic script (4): Russian, Belarusian, Ukrainian,
English
etEstonian
euBasque
fiFinnish
frFrench
gaIrish
glGalician
hrCroatian
huHungarian
idIndonesian
isIcelandic
itItalian
japanJapanese
kaKannada
koreanKorean
kuKurdish
laLatin
lbLuxembourgish
ltLithuanian
lvLatvian
miMaori
msMalay
mtMaltese
nlDutch
noNorwegian
ocOccitan
plPolish
ptPortuguese
quQuechua
rmRomansh
roRomanian
rs_latinSerbian (Latin)
skSlovak
slSlovenian
sqAlbanian
svSwedish
swSwahili
taTamil
teTelugu
thThai
tlTagalog
trTurkish
uzUzbek
viVietnamese

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 checkpointSupported languages
english_g2.pthen
latin_g2.pthaf, 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.pthch_sim + en
japanese_g2.pthja + en
korean_g2.pthko + en
telugu.pthte + en
kannada.pthkn + en
cyrillic_g2.pthru, rs_cyrillic, be, bg, uk, mn, abq, ady, kbd,
ava, dar, inh, che, lbe, lez, tab, tjk, en

<u>Notice</u>: 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 versionPython versionSupported language inputs
v2.0.03.12 onlyenglish (alias en), multilingual (alias multi)
v2.0.23.11, 3.12, 3.13english (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.