Docling OCR 引擎
没有唯一的“最强”OCR 引擎,合适与否看平台、语言与配置意愿。本页对比各引擎,给出各引擎安装 + CLI + Python,讲解可移植 iso: 语言体系,覆盖 GPU 后端,并附即取实例。引擎事实已对照官方 OCR 概念与原生引擎参考核验。
1. 该选哪种引擎?
数字(文本)PDF 常无需 OCR——先试 --no-ocr 求最快,仅扫描页再加引擎。
| 情形 | 选用 | 原因 |
|---|---|---|
| 默认 / 拿不定 | RapidOCR | 纯 pip 安装、省 CPU、多语言、未来可 GPU。最稳妥的首选。 |
| 100+ 语言或自训练 traineddata | Tesseract(CLI 或 tesserocr) | 老牌引擎,文字模型(script/Latin)、竖排日文(jpn_vert)、自训练文件。 |
| Mac 上零配置 | OcrMac | 调用设备端 Apple Vision;无可执行文件、无模型下载。 |
| 省事的中日韩 + 拉丁 | EasyOCR | 纯 pip,自下载 Gen2 模型;可一次多种语言。 |
| NVIDIA 机群求吞吐 | Nemotron OCR | GPU 加速;英文 + 多语言模型(Linux x86_64、CUDA 13.x)。 |
| OCR 在另一服务 | KServe v2 | Docling 调用自有远端端点;语言代码按自有部署。 |
| 需要小众模型 | 插件(OnnxTR、SuryaOCR) | 经插件系统安装,加 --allow-external-plugins。 |
2. OCR 在流水线中的位置(模式与参数)
OCR 默认开启(--ocr)。三个参数决定作用范围与执行引擎。Python 等价:PdfPipelineOptions().do_ocr = True 加 RapidOcrOptions / EasyOcrOptions / TesseractOcrOptions / TesseractCliOcrOptions / OcrMacOptions / NemotronOcrOptions 之一,整页行为配 mode=OcrMode.FULL_PAGE。以 --debug-visualize-ocr 查看 OCR 视野。
| 参数 | 取值 / 默认 | 含义 |
|---|---|---|
| --ocr / --no-ocr | 默认开启 | 总开关。--no-ocr 完全跳过 OCR,数字 PDF 最快。 |
| --ocr-mode | default、full_page、layout_regions、pdf_aware_layout_regions | 送入引擎的区域。full_page 整页端到端(较慢、扫描件最优)。--force-ocr 已废弃,请用 --ocr-mode full_page。 |
| --ocr-engine | auto(默认)、rapidocr、easyocr、tesseract、tesserocr、ocrmac、nemotron-ocr、kserve_v2_ocr | 选用引擎。auto 按本机已安装情况选择。 |
| --ocr-lang | 逗号分隔,如 ch、deu、iso:de | 语言,原生或可移植(见第 11 节)。留空(--ocr-lang "")由引擎自定。 |
| --psm | 0–13 | OCR 引擎的页面切分模式。 |
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-platform | pip install "docling[easyocr]"。自动下载 Gen2 模型。可一次指定多种语言,但列表宜短(仅 en 比 en+de 更准)。Python:EasyOcrOptions。 | 文档 |
| OcrMac | Mac 零配置原生 OCR(Apple Vision)。 | macOS only | pip 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. 安装各引擎
Tesseract 可执行文件分系统。分系统完整步骤见安装总览与系统指南。离线或 CI 机器预下载 OCR 模型:docling-tools models download --all,或定向 --easyocr-lang de / --rapidocr-backend-lang onnxruntime:el。见CLI 说明。
brew install tesseract leptonica pkg-configsudo apt-get install -y tesseract-ocr tesseract-ocr-eng libtesseract-dev libleptonica-dev pkg-configsudo dnf install -y tesseract tesseract-devel tesseract-langpack-eng tesseract-osd leptonica-devel| 引擎 | 安装 | 需系统依赖? |
|---|---|---|
| RapidOCR | pip install "docling[rapidocr]"(或 pip install rapidocr onnxruntime) | 否,纯 pip。 |
| EasyOCR | pip install "docling[easyocr]"(或 pip install easyocr) | 否,首次自行下载。 |
| Tesseract CLI | 仅系统可执行文件(见下),无需 pip extra | 是,可执行文件 + TESSDATA_PREFIX(末尾 /)。 |
| Tesseract(tesserocr) | 先装可执行文件,再 pip install "docling[tesserocr]" | 是,Windows 绑定还需编译器。 |
| OcrMac | pip install "docling[ocrmac]" | 仅 macOS;无模型,Vision 随系统。 |
| Nemotron | pip install "docling[feat-ocr-nemotron]" --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-match | Linux 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 tesserocr 后 pip install --no-binary :all: tesserocr。
5. RapidOCR 深解(后端、PP-OCR 版本、语言)
RapidOCR 封装 PP-OCR 模型。后端(运行时)与 PP-OCR 版本(模型代际)各自独立变化。
语言词符(原生代码):v4:arabic, ch, chinese_cht, cyrillic, devanagari, en, japan, ka, korean, latin, ta, te。v5:arabic, ch, cyrillic, devanagari, el, en, eslav, korean, latin, ta, te, th。v6: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/german 与 fr/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。 |
openvino | v4, v5, v6 | Intel 硬件路线。 |
paddle | v4, v5, v6 | PaddlePaddle 运行时。 |
torch | v4, v5(仅中文), v6 | PP-OCRv5 + torch 仅中文。 |
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.pth | en |
latin_g2.pth | 欧洲/拉丁语系(de, fr, es, it, pt, nl, pl …) |
zh_sim_g2.pth | ch_sim + en |
japanese_g2.pth / korean_g2.pth | ja / ko + en |
telugu.pth / kannada.pth | te / kn + en |
cyrillic_g2.pth | ru, be, bg, uk, mn … + en |
7. Tesseract 深解(CLI 与 tesserocr、traineddata)
docling convert scan.pdf --ocr-engine tesseract --ocr-lang deu+engTESSDATA_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 ""触发按页方向/文字检测,需osdtraineddata。 - 自动语言检测见官方示例。
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-DE,iso:pt命中pt-BR,iso:zh-CN命中zh-Hans。 - 古怪区域码如
vi-VT须裸传(原生)。空lang由 Vision 自动。
9. Nemotron OCR 深解(Linux + CUDA)
要求 Linux x86_64 + CUDA 13.x 及 cu130 版 torch 索引(安装行见第 4 节)。每次运行一种语言(首项胜出)。Python:NemotronOcrOptions。
| Nemotron 版本 | Python | 语言 |
|---|---|---|
| v2.0.0 | 仅 3.12 | english(别名 en)、multilingual(别名 multi:英、简繁中、日、韩、俄)+ 约 170 个拉丁系尽力代码(警告,NVIDIA 未验证) |
| v2.0.2 | 3.11、3.12、3.13 | 同上 |
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. 语言:原生代码与可移植 iso: 标签
各引擎经统一字段 OcrOptions.lang 接收语言。每项恰有两种写法:
原生代码(无前缀)——引擎自有拼写,逐字透传:ch(PP-OCR 中文)、deu(Tesseract 德语)、ch_sim(EasyOCR)、en-US(Vision)。
可移植标签——iso: 后的 BCP-47,映射到引擎:iso:de、iso:en-US、iso: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 | 英文模型 |
| OcrMac | Vision 自动 |
| KServe | 发送 en |
| 代码 | 裸写命中 | iso: 含义 |
|---|---|---|
ch | PP-OCR 简体中文 | ch-Latn = 查莫罗语 |
ka | PP-OCR 卡纳达语 | ka-Geor = 格鲁吉亚语(PP-OCR 不支持,会报错) |
ang | EasyOCR 安吉卡语 | 古英语 |
frk | Tesseract 德语 Fraktur 体 | 法兰克语 |
tab | EasyOCR 塔巴萨兰语(西里尔) | 塔巴萨兰语(拉丁) |
mah | EasyOCR 摩揭陀语 | 马绍尔语 |
12. OCR 的 GPU 加速
- CUDA 上的 RapidOCR:安装 GPU 版 ONNX Runtime(
pip install "docling[onnxruntime]"),确认CUDAExecutionProvider在ort.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. 即取即用实例(CLI + Python)
扫描 PDF 整页 OCR。显式选引擎。数字 PDF 跳过 OCR(最快)。德英可移植标签:
更多完整示例:强制整页 OCR、Tesseract 语言检测、RapidOCR 自备模型、本地示例库与配置生成器。
docling convert scan.pdf --ocr-mode full_pagedocling convert scan.pdf --ocr-engine rapidocrdocling convert report.pdf --no-ocr --to mddocling convert scan.pdf --ocr-engine rapidocr --ocr-lang iso:de,iso:enfrom 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. 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 未使用。 - 输出语言错误——查影子(
ka与iso:ka-Geor),EasyOCR 列表从简,以supported_ocr_languages()验证。
15. OCR FAQ
新手选哪种引擎?
pip install "docling[rapidocr]" 加 --ocr-engine rapidocr 起步。到底需不需要 OCR?
--no-ocr 更快常更准。扫描件输出为空,就是 --ocr-mode full_page 的信号。原生代码还是 iso: 标签?
ch、deu)最短。可移植(iso:de、iso:zh-Hant)耐引擎切换,且 iso:sr-Latn 类文字指定必需。勿混淆 ka 裸写(卡纳达模型)与 iso:ka-Geor(格鲁吉亚语)等影子。EasyOCR 为何加语言反而变差?
["en","de"] 会从英语专用退到通用拉丁模型。请只点文档含有的语言。RapidOCR 能一次多语言吗?
latin、cyrillic、arabic、devanagari、eslav)覆盖一系,或分语言多跑。Tesseract 找不到我的语言?
tesseract-ocr-<语言>),以 tesseract --list-langs 确认,并导出末尾带斜杠的 TESSDATA_PREFIX。构造器报错会列出确切已安装项。哪些引擎用 GPU?
如何用自有 OCR 模型?
已按 Docling v2.129.0 验证 · 最近检查 2026-09-22 · 官方来源