独立指南——与 IBM 及 Docling 项目无隶属关系。 所有命令均在 Docling 2.148.0 上验证。
  1. 首页
  2. OCR
OCR 指南

Docling 中的 OCR——选对引擎、选对语言,或者干脆不用

OCR 既是 Docling 最有用、也是最耗时的阶段:它从我们的扫描测试页中还原了 93% 的单词;而在一篇原生数字论文上,它占用了 79% 的转换时间,只多得到几行文字。下面告诉你如何得到前者而不为后者买单。

已在 Docling 上验证 2.148.0更新于 2026年11月6日含本站实测数据12 分钟阅读
要点速览
  • 原生数字 PDF(文字可选中)?用 --no-ocr——在我们的测试中快 3.6 倍。
  • 扫描件和图片必须 OCR。默认的 auto 引擎依次尝试:macOS 上的 ocrmac(若已安装)、RapidOCR(onnxruntime)、EasyOCR、RapidOCR(PyTorch)——普通安装最终用的是最后一个。
  • 在我们的扫描件上,Tesseract 最快也最准(每页 5.5 秒,96.1% 的词语);onnxruntime 后端的 RapidOCR(docling[rapidocr])比默认快一倍,输出相同。
  • 原生 PDF 复制出来是乱码?--replace-broken-text-layer(2.144.0 新增)只对损坏的页面改用 OCR;--ocr-mode full_page 则对每页都做 OCR。
  • 语言代码因引擎而异(eng、en、en-US);iso: 前缀的标签(如 iso:zh-Hans)会被自动转换。中文用 RapidOCR 的 ch 效果很好。

你真的需要 OCR 吗?#

打开 PDF,试着选中一句话。如果能选中,说明 PDF 有文本层,Docling 会直接读取——字符精确,不需要 OCR。此时 OCR 只会额外识别图片里的文字,而且代价很高:

我们的 9 页原生数字论文每页耗时Markdown 字符数
默认(对位图区域 OCR)6.58 秒34,063
--no-ocr1.83 秒29,036

多出的约 5,000 个字符来自论文插图中的截图。如果这些文字重要就保留 OCR,否则就关掉。

选择引擎#

各个引擎#

--ocr-engine是什么安装平台默认语言
auto(默认)选择第一个可用的引擎(见下文)—全部取决于引擎
rapidocr通过 RapidOCR 运行 PaddleOCR(PP-OCR)模型;后端可选 onnxruntime、openvino、paddle、torch已包含(torch 后端);onnxruntime 后端需 docling[rapidocr]全部ch(简体中文,也能识别英文)
easyocrEasyOCR,支持 80 多种语言,适合有 GPU 时使用docling[easyocr]全部en, es, fr, de
tesseractTesseract 命令行程序系统安装 Tesseract 及语言包全部eng, spa, fra, deu
tesserocr通过 C API 调用 Tesseract系统 Tesseract + docling[tesserocr]Linux、macOS(Windows 上较难)eng, spa, fra, deu
ocrmacApple Vision 框架docling[ocrmac]仅 macOSen-US, es-ES, fr-FR, de-DE
nemotron-ocrNVIDIA Nemotron OCRdocling-slim[feat-ocr-nemotron]Linux x86_64、Python 3.12、CUDA—
kserve_v2_ocr部署在 KServe v2 / Triton 端点后的远程 OCR 模型gRPC 需 docling[remote-serving]任意(远程)原样传递

引擎列表和默认语言读取自 2.148.0 中 docling options ocr <engine> 的输出。引擎软件包的许可证:RapidOCR、EasyOCR 和 Nemotron OCR 为 Apache-2.0;tesserocr 和 ocrmac 为 MIT;Tesseract 本身为 Apache-2.0。

auto 如何选择

  1. macOS:如已安装,使用 ocrmac。
  2. 带 CUDA 的 Linux:如已安装,使用 Nemotron OCR。
  3. onnxruntime 后端的 RapidOCR,如已安装 onnxruntime。
  4. EasyOCR,如已安装。
  5. PyTorch 后端的 RapidOCR——普通 pip install docling 最终使用的就是它。

无法支持所请求语言的引擎会被跳过。Tesseract 永远不会被自动选中——请用 --ocr-engine tesseract 指定。顺序读取自 2.148.0 的 auto_ocr_model.py;我们在 Linux 上的测试运行确认了最后一步。

语言#

--ocr-lang 接受引擎自己的代码,或带 iso: 前缀的 BCP-47 标签(Docling 会为所选引擎自动转换)。传空值(--ocr-lang '')则由引擎自行决定。

语言tesseract / tesserocreasyocrrapidocrocrmac任意引擎
英语engenen · latinen-USiso:en
德语deudelatinde-DEiso:de
简体中文chi_simch_simchzh-Hansiso:zh-Hans
繁体中文chi_trach_trachinese_chtzh-Hantiso:zh-Hant
日语jpnjajapanja-JPiso:ja
俄语rusrucyrillic*ru-RUiso:ru
  • RapidOCR 每次只用一种语言,多余的语言会被忽略并给出警告。其 PyTorch 后端对很多语言只有按文字体系划分的模型——在默认安装下,我们用 iso:ru 时遇到 OcrLanguageNotSupportedError,改用 cyrillic 才行。 * eslav 同样被拒绝;en、latin、ch、chinese_cht、japan 和 cyrillic 在我们的测试中都能在 PyTorch 后端上运行。
  • Tesseract 可以组合多种语言(按给出的顺序,如 chi_sim,eng),并需要安装对应的 traineddata;缺少时会在引擎启动时报错。
  • EasyOCR 在语言属于同一文字体系时可以同时识别多种语言。

OCR 模式#

--ocr-mode对哪些内容做 OCR适用场景
default目前等同于 pdf_aware_layout_regions大多数文档
pdf_aware_layout_regions版面区域,但跳过完全由 PDF 文本单元组成的区域带图片的数字 PDF、扫描件
layout_regions所有版面区域,忽略 PDF 文本层文本层部分错误的 PDF
full_page整页;替换已有文字文本层损坏或乱码的扫描件(替代已弃用的 --force-ocr)

定义取自 2.148.0 中的 OcrMode 枚举。

替换损坏的文本层(2.144.0 新增)#

有些 PDF 在屏幕上看起来完全正常,但复制出来的文字毫无意义——8VceZWZTReV 而不是 Certificate——因为字体把字形映射到了错误的字符。OCR 模式对此帮不上忙:默认模式信任 PDF 文本,而 full_page 会丢弃每一页的文本层。--replace-broken-text-layer 介于两者之间:Docling 逐页检查文本层,只对损坏的页面做整页 OCR。

bash
docling convert contract.pdf --replace-broken-text-layer
docling convert contract.pdf --replace-broken-text-layer --ocr-engine rapidocr --ocr-option backend=torch --ocr-lang ch
  • 默认关闭,适用于所有引擎。在 Python 中是任意 OCR 选项类上的 replace_broken_text_layer=True,例如 RapidOcrOptions(replace_broken_text_layer=True);命令行也可以写成 --ocr-option replace_broken_text_layer=true。
  • 怎样算损坏:页面上或多行中出现控制字符、� 或私用区字符(适用于所有文字);对拉丁字母文本,还会识别代替其他文字的带重音字母(俄文显示成 Îò÷¸ò)以及元音过少的单词。一页中只有一个坏单元格不会触发替换。
  • 检测不到的情况:字母表正确但字母错误或顺序错乱(Cartifecita)。这类文件请用 --ocr-mode full_page。
  • 被替换的页面在置信度报告中保留较低的 parse_score,因为该分数描述的是 PDF 文本层。请选择能识别文档语言的引擎和 --ocr-lang。

值得了解的引擎设置#

用 docling options ocr ENGINE 列出某个引擎的所有键,再用 --ocr-option KEY=VALUE(可重复)传入。

键引擎默认值作用
scale全部3.0渲染倍数:72 DPI × scale = 216 DPI。扫描件本身分辨率较高时可调低。
backendrapidocronnxruntimeonnxruntime、openvino、paddle 或 torch
replace_broken_text_layer全部false只对 PDF 文本层损坏的页面做 OCR(见上文),等同于 --replace-broken-text-layer
detect_orientationrapidocrfalse当某区域不到一半的文本行可信时,按 90°、180°、270° 重新识别——可修正横放或倒置扫描的页面(2.145.0 新增)
model_sizerapidocrsmalltiny、small、medium(仅限 PP-OCRv6 语言;日语不支持 tiny)
text_score / confidence_thresholdrapidocr / easyocr0.5丢弃低置信度文字
psmtesseract、tesserocrTesseract 默认页面分割模式 0–13(替代 --psm)
tesseract_cmdtesseracttesseract可执行文件完整路径(Windows 常用)
recognitionocrmacaccuratefast 以精度换速度
use_gpueasyocr自动设为 false 强制使用 CPU
bash示例
docling convert scan.pdf --ocr-engine rapidocr --ocr-option backend=torch --ocr-lang ch --ocr-option scale=2
docling convert scan.pdf --ocr-engine tesseract --ocr-lang chi_sim,eng --ocr-option psm=6
docling convert scan.pdf --ocr-engine easyocr --ocr-lang iso:zh-Hans --ocr-option confidence_threshold=0.3
docling convert sideways.pdf --ocr-engine rapidocr --ocr-option backend=torch --ocr-option detect_orientation=true

Python#

python
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import OcrMode, PdfPipelineOptions, RapidOcrOptions
from docling.document_converter import DocumentConverter, PdfFormatOption

opts = PdfPipelineOptions()
opts.do_ocr = True
opts.ocr_options = RapidOcrOptions(lang=["ch"], backend="torch", mode=OcrMode.FULL_PAGE)

converter = DocumentConverter(format_options={InputFormat.PDF: PdfFormatOption(pipeline_options=opts)})
print(converter.convert("scan.pdf").document.export_to_markdown()[:500])

选项类:OcrAutoOptions、RapidOcrOptions、EasyOcrOptions、TesseractCliOcrOptions(引擎 tesseract)、TesseractOcrOptions(tesserocr)、OcrMacOptions、NemotronOcrOptions、KserveV2OcrOptions。

扫描件上的引擎对比#

扫描页还原出的词语比例原文中(≥4 个字母的)不重复单词在输出中出现的比例。越高越好。
0255075100Tesseract 5 (CLI)96.1%RapidOCR · onnxruntime93.3%RapidOCR · PyTorch (default)93.3%EasyOCR (default threshold 0.5)85.1%EasyOCR (threshold 0.1)94.4%

docling.org 实测,Docling 2.148.0,一台 4 vCPU、无 GPU 的云服务器。

查看数据表
扫描页还原出的词语比例
还原比例
Tesseract 5 (CLI)96.1%
RapidOCR · onnxruntime93.3%
RapidOCR · PyTorch (default)93.3%
EasyOCR (default threshold 0.5)85.1%
EasyOCR (threshold 0.1)94.4%
CPU 上每页 OCR 耗时整个标准流水线每页秒数,3 次预热运行的中位数。越低越快。
0102030Tesseract 5 (CLI)5.5 秒RapidOCR · onnxruntime7.0 秒RapidOCR · PyTorch (default)15.4 秒EasyOCR (default threshold 0.5)28.9 秒EasyOCR (threshold 0.1)29.4 秒

docling.org 实测,Docling 2.148.0,一台 4 vCPU、无 GPU 的云服务器。

查看数据表
CPU 上每页 OCR 耗时
秒/页
Tesseract 5 (CLI)5.5 秒
RapidOCR · onnxruntime7.0 秒
RapidOCR · PyTorch (default)15.4 秒
EasyOCR (default threshold 0.5)28.9 秒
EasyOCR (threshold 0.1)29.4 秒

同一份扫描文档(Docling 论文前四页,以 150 DPI 栅格化并加入轻微模糊和倾斜),同一条标准流水线,只更换 OCR 引擎。每个引擎在无 GPU 的 4 vCPU 机器上预热一次、计时三次,使用 Docling 2.148.0,测于 2026 年 11 月 6 日。

  • 在这里 Tesseract 既最快又最准(每页 5.5 秒,还原 96.1% 的词语)——对清晰的英文排版页面很难被超越。它需要系统程序和语言包。
  • onnxruntime 后端的 RapidOCR 比默认的 PyTorch 后端快约一倍(每页 7.0 秒对 15.4 秒),输出完全相同。安装 docling[rapidocr] 是纯 Python 环境下最省事的提速方式——装好 onnxruntime 后 auto 会自动选用它。
  • EasyOCR 在 CPU 上最慢(每页 29 秒)。在 Docling 默认置信度阈值(0.5)下保留了 85.1% 的词语;降到 0.1(--ocr-option confidence_threshold=0.1)后提高到 94.4%。它的结果也很依赖图像:在 10 月 27 日那次测试所用的扫描件上,同样的默认阈值只保留了 12.3%。

常见问题

Docling 默认使用哪个 OCR 引擎?

auto 引擎。在 Docling 2.148.0 中,它依次尝试 macOS 上的 ocrmac(若已安装)、带 CUDA 的 Linux 上的 Nemotron OCR(若已安装)、onnxruntime 后端的 RapidOCR、EasyOCR,最后是 PyTorch 后端的 RapidOCR,从不自动选择 Tesseract。普通的 pip install docling 最终使用的是 PyTorch 后端的 RapidOCR。

PDF 复制出来的文字是乱码怎么办?

有些 PDF 在屏幕上显示正常,但字体把字形映射到了错误的字符,复制出来像 8VceZWZTReV。自 2.144.0 起,可用 docling convert --replace-broken-text-layer(或在任意 OCR 选项类上设置 replace_broken_text_layer=True),Docling 会检测这类页面,只把它们的文字替换为 OCR 结果。如需对每页都做 OCR,请用 --ocr-mode full_page。

如何在 Docling 中关闭 OCR?

命令行加 --no-ocr,或在 Python 中设置 pipeline_options.do_ocr = False。对已包含可选中文字的 PDF 应这样做。

Docling 如何识别中文扫描件?

推荐 RapidOCR:它使用 PP-OCR 模型,简体中文(ch)就是其默认语言。普通安装下请加 --ocr-option backend=torch,例如 docling convert scan.pdf --ocr-engine rapidocr --ocr-option backend=torch --ocr-lang ch。繁体中文用 chinese_cht,或使用 iso:zh-Hant。

Docling 中 tesseract 和 tesserocr 有什么区别?

tesseract 调用 Tesseract 命令行程序;tesserocr 通过 tesserocr Python 包调用 Tesseract 的 C API,需要针对系统中的 Tesseract 编译。两者使用相同的 traineddata 语言文件。

为什么 Docling 的 OCR 很慢?

OCR 默认以 216 DPI(scale 3.0)渲染区域,并运行神经网络进行文字检测和识别。在我们的 4 vCPU 机器上,一页扫描件约需 16 秒。可以使用 GPU、更快的引擎、更低的 --ocr-option scale,或对原生数字文件跳过 OCR。

资料来源