Docling OCR 引擎

没有唯一的“最强”OCR 引擎,合适与否看平台、语言与配置意愿。本页对比各引擎,给出各引擎安装 + CLI + Python,讲解可移植 iso: 语言体系,覆盖 GPU 后端,并附即取实例。引擎事实已对照官方 OCR 概念原生引擎参考核验。

1
Step 1

1. 该选哪种引擎?

数字(文本)PDF 常无需 OCR——先试 --no-ocr 求最快,仅扫描页再加引擎。

情形选用原因
默认 / 拿不定RapidOCR纯 pip 安装、省 CPU、多语言、未来可 GPU。最稳妥的首选。
100+ 语言或自训练 traineddataTesseract(CLI 或 tesserocr)老牌引擎,文字模型(script/Latin)、竖排日文(jpn_vert)、自训练文件。
Mac 上零配置OcrMac调用设备端 Apple Vision;无可执行文件、无模型下载。
省事的中日韩 + 拉丁EasyOCR纯 pip,自下载 Gen2 模型;可一次多种语言。
NVIDIA 机群求吞吐Nemotron OCRGPU 加速;英文 + 多语言模型(Linux x86_64、CUDA 13.x)。
OCR 在另一服务KServe v2Docling 调用自有远端端点;语言代码按自有部署。
需要小众模型插件(OnnxTR、SuryaOCR)经插件系统安装,加 --allow-external-plugins
2
Step 2

2. OCR 在流水线中的位置(模式与参数)

OCR 默认开启(--ocr)。三个参数决定作用范围执行引擎。Python 等价:PdfPipelineOptions().do_ocr = TrueRapidOcrOptions / EasyOcrOptions / TesseractOcrOptions / TesseractCliOcrOptions / OcrMacOptions / NemotronOcrOptions 之一,整页行为配 mode=OcrMode.FULL_PAGE。以 --debug-visualize-ocr 查看 OCR 视野。

参数取值 / 默认含义
--ocr / --no-ocr默认开启总开关。--no-ocr 完全跳过 OCR,数字 PDF 最快。
--ocr-modedefaultfull_pagelayout_regionspdf_aware_layout_regions送入引擎的区域。full_page 整页端到端(较慢、扫描件最优)。--force-ocr 已废弃,请用 --ocr-mode full_page
--ocr-engineauto(默认)、rapidocreasyocrtesseracttesserocrocrmacnemotron-ocrkserve_v2_ocr选用引擎。auto 按本机已安装情况选择。
--ocr-lang逗号分隔,如 chdeuiso:de语言,原生或可移植(见第 11 节)。留空(--ocr-lang "")由引擎自定。
--psm0–13OCR 引擎的页面切分模式。
3
Step 3

3. 引擎对照表

引擎最适用平台说明文档
auto (default) 让 Docling 自行选择可用引擎。All--ocr-engine 的默认值。Docling 按已安装情况与平台选择。Python:无需设置 ocr_options。 文档
RapidOCR 轻量、省 CPU 的多语言 OCR;稳妥的默认选择。Cross-platform默认 ONNX Runtime 后端(另有 openvino/paddle/torch)。pip install "docling[rapidocr]"。每次运行一种语言;PP-OCR v4/v5/v6 词符,含 latin/cyrillic/arabic/devanagari 语系。Python:RapidOcrOptions。 文档
Tesseract (CLI) 久经考验、支持 100+ 语言;可用自训练 traineddata。Cross-platform (system binary)需系统 Tesseract 可执行文件与语言数据(TESSDATA_PREFIX 末尾须带 /)。CLI 用法无需 pip extra。Python:TesseractCliOcrOptions。lang 为空触发 OSD 脚本检测(需 osd 文件)。 文档
Tesseract (tesserocr) 同等 Tesseract 精度,经 Python 绑定更快。Cross-platform (compiled)先装系统可执行文件,再 pip install "docling[tesserocr]"。Windows 下可能需要 C++ 构建工具。Python:TesseractOcrOptions。 文档
EasyOCR 开箱即用的多语言方案;中日韩与拉丁文字。Cross-platformpip install "docling[easyocr]"。自动下载 Gen2 模型。可一次指定多种语言,但列表宜短(仅 en 比 en+de 更准)。Python:EasyOcrOptions。 文档
OcrMac Mac 零配置原生 OCR(Apple Vision)。macOS onlypip install "docling[ocrmac]"。不附带模型,语言覆盖取决于 macOS 版本。Python:OcrMacOptions。 文档
Nemotron OCR NVIDIA 服务器大规模 GPU 加速 OCR。Linux x86_64 + CUDA 13.x用 cu130 索引 pip install "docling[feat-ocr-nemotron]"(Python 3.12;v2.0.2 新增 3.11/3.13)。english 或 multilingual(+约 170 个拉丁系尽力代码)。Python:NemotronOcrOptions。 文档
KServe v2 OCR 调用远端 OCR 微服务。Service连接 KServe v2 端点。lang 不校验不映射,仅逐字发送首项,请使用自有部署的代码。 文档
4
Step 4

4. 安装各引擎

Tesseract 可执行文件分系统。分系统完整步骤见安装总览与系统指南。离线或 CI 机器预下载 OCR 模型:docling-tools models download --all,或定向 --easyocr-lang de / --rapidocr-backend-lang onnxruntime:el。见CLI 说明

brew install tesseract leptonica pkg-config
sudo apt-get install -y tesseract-ocr tesseract-ocr-eng libtesseract-dev libleptonica-dev pkg-config
sudo dnf install -y tesseract tesseract-devel tesseract-langpack-eng tesseract-osd leptonica-devel
引擎安装需系统依赖?
RapidOCRpip install "docling[rapidocr]"(或 pip install rapidocr onnxruntime否,纯 pip。
EasyOCRpip install "docling[easyocr]"(或 pip install easyocr否,首次自行下载。
Tesseract CLI仅系统可执行文件(见下),无需 pip extra是,可执行文件 + TESSDATA_PREFIX(末尾 /)。
Tesseract(tesserocr)先装可执行文件,再 pip install "docling[tesserocr]"是,Windows 绑定还需编译器。
OcrMacpip install "docling[ocrmac]"仅 macOS;无模型,Vision 随系统。
Nemotronpip install "docling[feat-ocr-nemotron]" --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-matchLinux x86_64 + Python 3.12 + CUDA 13.x。
OnnxTR(插件)pip install "docling-ocr-onnxtr[cpu]" + --allow-external-plugins否,走插件系统。

Windows:安装 UB Mannheim 构建并加入 PATH,将 TESSDATA_PREFIX 指向其 tessdata\ 目录。tesserocr 构建失败:pip uninstall tesserocrpip install --no-binary :all: tesserocr

5
Step 5

5. RapidOCR 深解(后端、PP-OCR 版本、语言)

RapidOCR 封装 PP-OCR 模型。后端(运行时)与 PP-OCR 版本(模型代际)各自独立变化。

语言词符(原生代码):v4:arabic, ch, chinese_cht, cyrillic, devanagari, en, japan, ka, korean, latin, ta, tev5:arabic, ch, cyrillic, devanagari, el, en, eslav, korean, latin, ta, te, thv6:ch, chinese_cht, en, japan + 约 45 个欧洲代码(de, fr, es, it, pt, nl, pl …),别名 zh→ch, zh_cn→ch, zh_tw→chinese_cht, ja/jp→japan, ko→korean(注意:v6 韩语仅别名)。de/germanfr/french 各有两种写法。

文字语系(一符多语):cyrillic(34 种:俄、乌、哈萨克…+英语)、devanagari(14 种:印地、马拉地、梵…+英语)、arabic(9 种:阿、波斯、乌尔都…+英语)、eslav(东斯拉夫:俄、白俄、乌 + 英语)。

每次运行一种语言:RapidOCR 取 lang 首项,其余警告。Python:RapidOcrOptions(lang=["eslav"], backend="onnxruntime");支持自备 checkpoint(见自备模型示例)。

docling convert scan.pdf --ocr-engine rapidocr --ocr-mode full_page
后端PP-OCR 版本说明
onnxruntime(默认)v4, v5, v6覆盖最全,唯一支持 PP-OCRv5 eslav/cyrillic
openvinov4, v5, v6Intel 硬件路线。
paddlev4, v5, v6PaddlePaddle 运行时。
torchv4, v5(仅中文), v6PP-OCRv5 + torch 仅中文
6
Step 6

6. EasyOCR 深解(语言列表宜短)

EasyOCR(Gen2 checkpoint、craft_mlt_25k.pth 检测器)可一次多种语言,但解析只选覆盖全部所请语言的单一 checkpoint。多余语言会悄悄降级:["en"] 选中精准的 english_g2.pth,而 ["en","de"] 回落到宽泛的 latin_g2.pth

docling convert scan.pdf --ocr-engine easyocr --ocr-lang en
Checkpoint覆盖
english_g2.pthen
latin_g2.pth欧洲/拉丁语系(de, fr, es, it, pt, nl, pl …
zh_sim_g2.pthch_sim + en
japanese_g2.pth / korean_g2.pthja / ko + en
telugu.pth / kannada.pthte / kn + en
cyrillic_g2.pthru, be, bg, uk, mn … + en
7
Step 7

7. Tesseract 深解(CLI 与 tesserocr、traineddata)

docling convert scan.pdf --ocr-engine tesseract --ocr-lang deu+eng
TESSDATA_PREFIX=/opt/homebrew/share/tessdata/ docling convert scan.pdf --ocr-engine tesserocr
  • 两味一引擎:tesseract 调系统 CLI(无需 pip extra);tesserocr 进程内绑定(更快,需编译好的绑定)。精度相同,traineddata 相同。
  • 语言即 traineddata 词干:deu, chi_sim, chi_tra, srp_latn, aze_cyrl, deu_latf, frk, jpn_vert, script/Latin, script/Cyrillic,另可加自训练文件。已安装的 .traineddata 即用。
  • 构造时校验:缺文件立即失败,并在报错中列出已安装集合,而非转到一半才崩。
  • lang 即文字检测:--ocr-lang "" 触发按页方向/文字检测,需 osd traineddata。
  • 自动语言检测官方示例
8
Step 8

8. OcrMac 深解(仅 macOS)

OcrMac 是 Apple Vision 的薄封装:无可执行文件、无可下载模型,识别器随系统自带,故语言覆盖是自身 macOS 版本的属性,而非 ocrmac 发版的属性。

docling convert scan.pdf --ocr-engine ocrmac --ocr-mode full_page
  • 安装:pip install "docling[ocrmac]";Python:OcrMacOptions
  • 按带区域的 BCP-47 匹配:iso:de 命中 de-DEiso:pt 命中 pt-BRiso:zh-CN 命中 zh-Hans
  • 古怪区域码如 vi-VT 须裸传(原生)。空 lang 由 Vision 自动。
9
Step 9

9. Nemotron OCR 深解(Linux + CUDA)

要求 Linux x86_64 + CUDA 13.x 及 cu130 版 torch 索引(安装行见第 4 节)。每次运行一种语言(首项胜出)。Python:NemotronOcrOptions

Nemotron 版本Python语言
v2.0.0仅 3.12english(别名 en)、multilingual(别名 multi:英、简繁中、日、韩、俄)+ 约 170 个拉丁系尽力代码(警告,NVIDIA 未验证)
v2.0.23.11、3.12、3.13同上
10
Step 10

10. KServe v2 与插件引擎(OnnxTR、SuryaOCR)

  • KServe v2:OCR 跑在远端微服务时使用。lang 不校验不映射,首项逐字发出、其余警告丢弃。请用自有部署的代码;iso: 仅对方支持时有效(皆不支持)。
  • OnnxTR 插件:pip install "docling-ocr-onnxtr[cpu]" 并启用 --allow-external-plugins,以插件引擎名选用。见 docling-OCR-OnnxTR 仓库
  • 自备模型的 SuryaOCR官方示例;第三方选项以 --show-external-plugins 列出。
11
Step 11

11. 语言:原生代码与可移植 iso: 标签

各引擎经统一字段 OcrOptions.lang 接收语言。每项恰有两种写法:

原生代码(无前缀)——引擎自有拼写,逐字透传:ch(PP-OCR 中文)、deu(Tesseract 德语)、ch_sim(EasyOCR)、en-US(Vision)。

可移植标签——iso: 后的 BCP-47,映射到引擎:iso:deiso:en-USiso:zh-Hant非默认文字务必写明:塞尔维亚拉丁文必须iso:sr-Latn(默认塞尔维亚文为西里尔)。

各引擎自报能力:supported_ocr_languages() 返回原生 + BCP-47 代码,拼写可直接贴回 lang。Docling 从不悄悄替换,不可服务的语言会抛错并列出该引擎服务的写法。RapidOCR 与 Nemotron 一次一种语言(首标签胜出,其余警告)。

标签含义改说
mul多种语言引擎自有的多语言代码(如 Nemotron 的 multilingual
und未定空列表,或所要文字的某种语言
zxx无语言内容关闭 OCR:--no-ocr / do_ocr=False
from docling.datamodel.pipeline_options import TesseractCliOcrOptions
TesseractCliOcrOptions(lang=["deu", "eng"])       # 原生:tesseract -l deu+eng
TesseractCliOcrOptions(lang=["iso:de", "iso:en"]) # 可移植:同义

空语言列表在各引擎的含义,以及遮蔽某标签的代码(裸写 = 模型,iso: = 语言):

引擎lang=[](--ocr-lang "")
Tesseract(两者)按页方向 + 文字检测(需 osd 文件)
EasyOCR英语(en
RapidOCR简体中文默认(ch
Nemotron英文模型
OcrMacVision 自动
KServe发送 en
代码裸写命中iso: 含义
chPP-OCR 简体中文ch-Latn = 查莫罗语
kaPP-OCR 卡纳达语ka-Geor = 格鲁吉亚语(PP-OCR 不支持,会报错)
angEasyOCR 安吉卡语古英语
frkTesseract 德语 Fraktur 体法兰克语
tabEasyOCR 塔巴萨兰语(西里尔)塔巴萨兰语(拉丁)
mahEasyOCR 摩揭陀语马绍尔语
12
Step 12

12. OCR 的 GPU 加速

  • CUDA 上的 RapidOCR:安装 GPU 版 ONNX Runtime(pip install "docling[onnxruntime]"),确认 CUDAExecutionProviderort.get_available_providers() 中,再以 onnxruntime 后端 + CUDA 设备运行。torch 后端为备选(注意:PP-OCRv5 + torch 仅中文)。
  • Nemotron 按设计仅 GPU(CUDA 13.x、Linux x86_64)。
  • EasyOCR / Tesseract / OcrMac 实际跑 CPU——配快 CPU,把 GPU 预算留给版式/表格阶段。精调(批量、VLM 服务)见官方 GPU 指南
import onnxruntime as ort
assert "CUDAExecutionProvider" in ort.get_available_providers()

from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions
from docling.datamodel.pipeline_options import PdfPipelineOptions, RapidOcrOptions
pipeline_options = PdfPipelineOptions(
    accelerator_options=AcceleratorOptions(device=AcceleratorDevice.CUDA),
    ocr_options=RapidOcrOptions(backend="onnxruntime", lang=["eslav"]),
)
13
Step 13

13. 即取即用实例(CLI + Python)

扫描 PDF 整页 OCR。显式选引擎。数字 PDF 跳过 OCR(最快)。德英可移植标签:

更多完整示例:强制整页 OCRTesseract 语言检测RapidOCR 自备模型本地示例库配置生成器

docling convert scan.pdf --ocr-mode full_page
docling convert scan.pdf --ocr-engine rapidocr
docling convert report.pdf --no-ocr --to md
docling convert scan.pdf --ocr-engine rapidocr --ocr-lang iso:de,iso:en
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import (
    OcrMode, PdfPipelineOptions, RapidOcrOptions,
)
from docling.document_converter import DocumentConverter, PdfFormatOption

pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = RapidOcrOptions(mode=OcrMode.FULL_PAGE)
# 按需换 EasyOcrOptions / TesseractOcrOptions / TesseractCliOcrOptions
# / OcrMacOptions(macOS)/ NemotronOcrOptions(Linux CUDA)。

converter = DocumentConverter(
    format_options={InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)}
)
doc = converter.convert("scan.pdf").document
print(doc.export_to_markdown())
14
Step 14

14. OCR 排错

  • 扫描文本未识别——OCR 关闭或默认模式漏掉缺失文本层:强制 --ocr-mode full_page,换引擎一试。见扫描版 PDF 文本未识别
  • OCR extra 装不上——RapidOCR/EasyOCR 纯 pip;Tesseract 须先备系统可执行文件 + TESSDATA_PREFIX。见OCR 包安装报错
  • 转换慢——OCR 与富化模型是最贵的 CPU 阶段:数字 PDF 用 --no-ocr--table-mode fast 或上 GPU。见转换慢
  • GPU 被忽略——确认 torch.cuda.is_available() / CUDAExecutionProvider,用 --device cuda(Apple Silicon 用 mps)。见GPU 未使用
  • 输出语言错误——查影子(kaiso:ka-Geor),EasyOCR 列表从简,以 supported_ocr_languages() 验证。
15
Step 15

15. OCR FAQ

新手选哪种引擎?
RapidOCR:一个 pip extra,无系统包,省 CPU,多语言,日后可 GPU。以 pip install "docling[rapidocr]"--ocr-engine rapidocr 起步。
到底需不需要 OCR?
仅扫描/图片 PDF 需要。数字 PDF 自带文本,--no-ocr 更快常更准。扫描件输出为空,就是 --ocr-mode full_page 的信号。
原生代码还是 iso: 标签?
引擎确定时原生(chdeu)最短。可移植(iso:deiso:zh-Hant)耐引擎切换,且 iso:sr-Latn 类文字指定必需。勿混淆 ka 裸写(卡纳达模型)与 iso:ka-Geor(格鲁吉亚语)等影子。
EasyOCR 为何加语言反而变差?
设计如此:EasyOCR 只选覆盖全部所请语言的单一 checkpoint,["en","de"] 会从英语专用退到通用拉丁模型。请只点文档含有的语言。
RapidOCR 能一次多语言吗?
不能,一次一种(首项胜出)。以语系词符(latincyrillicarabicdevanagarieslav)覆盖一系,或分语言多跑。
Tesseract 找不到我的语言?
安装对应 traineddata(tesseract-ocr-<语言>),以 tesseract --list-langs 确认,并导出末尾带斜杠的 TESSDATA_PREFIX。构造器报错会列出确切已安装项。
哪些引擎用 GPU?
RapidOCR(CUDA 下 onnxruntime/torch 后端)与 Nemotron(仅 CUDA)。EasyOCR、Tesseract、OcrMac 实际跑 CPU。
如何用自有 OCR 模型?
RapidOCR 与 SuryaOCR 支持自备 checkpoint:跟随RapidOCR 自备示例SuryaOCR 示例;第三方引擎经 --allow-external-plugins 加载。

已按 Docling v2.129.0 验证 · 最近检查 2026-09-22 · 官方来源