独立系ガイド — IBM および Docling プロジェクトとは無関係です。 すべてのコマンドを Docling 2.148.0 で検証済み。
  1. ホーム
  2. OCR
OCR ガイド

Docling の OCR——正しいエンジン、正しい言語、あるいは OCR なし

OCR は Docling で最も役に立ち、最も時間のかかるステージです。スキャンしたテストページでは単語の 93% を復元しましたが、デジタル生成の論文では変換時間の 79% を使って数行のテキストを足しただけでした。前者の効果を得て、後者のコストを払わない方法をまとめます。

Docling で検証済み 2.148.0更新日 2026年11月6日当サイトの実測データを含む12 分で読めます
要点
  • デジタル生成 PDF(文字を選択できる)なら --no-ocr。当サイトのテストでは 3.6 倍速くなりました。
  • スキャンや画像には OCR が必要です。既定の auto は ocrmac(macOS で導入済みなら)→ RapidOCR(onnxruntime)→ EasyOCR → RapidOCR(PyTorch)の順に試し、通常のインストールでは最後のものが使われます。
  • 当サイトのスキャンでは Tesseract が最速かつ最も正確(5.5 秒/ページ、単語の 96.1%)。onnxruntime 版 RapidOCR(docling[rapidocr])は既定の 2 倍速で出力は同一でした。
  • デジタル PDF のテキストが文字化けする場合は --replace-broken-text-layer(2.144.0 で追加)で壊れたページだけを OCR に置き換えます。--ocr-mode full_page は全ページを OCR します。
  • 言語コードはエンジンごとに異なります(jpn・ja・ja-JP)。iso:ja のような iso: 付きタグは自動変換されます。

そもそも OCR は必要?#

PDF を開いて文章を選択してみてください。選択できればテキスト層があり、Docling はそれを直接読みます。文字は正確で、OCR は要りません。この場合 OCR が足すのは画像内の文字だけで、しかもコストは大きいです:

9 ページのデジタル生成論文1 ページあたりMarkdown の文字数
既定(ビットマップ領域を OCR)6.58 秒34,063
--no-ocr1.83 秒29,036

増えた約 5,000 文字は、論文の図に含まれるスクリーンショットの文字です。それが必要なら OCR を残し、不要なら切りましょう。

エンジンを選ぶ#

エンジン一覧#

--ocr-engine概要インストールプラットフォーム既定の言語
auto(既定)利用可能な最初のエンジンを選ぶ(下記)—すべてエンジンによる
rapidocrRapidOCR 経由で 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
tesserocrC API 経由の Tesseractシステムの Tesseract + docling[tesserocr]Linux・macOS(Windows では難しい)eng, spa, fra, deu
ocrmacApple Vision フレームワークdocling[ocrmac]macOS のみen-US, es-ES, fr-FR, de-DE
nemotron-ocrNVIDIA Nemotron OCRdocling-slim[feat-ocr-nemotron]Linux x86_64・Python 3.12・CUDA—
kserve_v2_ocrKServe 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どのエンジンでも
日本語jpnjajapanja-JPiso:ja
英語engenen · latinen-USiso:en
ドイツ語deudelatinde-DEiso:de
簡体字中国語chi_simch_simchzh-Hansiso:zh-Hans
繁体字中国語chi_trach_trachinese_chtzh-Hantiso:zh-Hant
ロシア語rusrucyrillic*ru-RUiso:ru
  • RapidOCR は一度に 1 言語だけを使い、余分な言語は警告付きで無視されます。PyTorch バックエンドは多くの言語で文字体系単位のモデルしか持たず、既定のインストールでは iso:ru が OcrLanguageNotSupportedError になり、cyrillic なら動きました。 * eslav も同様に拒否されました。en・latin・ch・chinese_cht・japan・cyrillic はテストで PyTorch バックエンドで動作しました。
  • Tesseract は複数言語を組み合わせられます(指定順、例:jpn,eng)。対応する traineddata が必要で、ない場合はエンジン起動時にエラーになります。
  • EasyOCR は同じ文字体系に属する複数の言語を同時に認識できます。

OCR モード#

--ocr-modeOCR の対象使いどころ
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 で追加)#

画面上は完璧に見えるのに、コピーすると Certificate が 8VceZWZTReV になるような PDF があります。フォントがグリフを誤った文字に対応付けているためです。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 iso:ja
  • 既定はオフで、すべてのエンジンで使えます。Python では任意の OCR オプションクラスの replace_broken_text_layer=True(例:RapidOcrOptions(replace_broken_text_layer=True))、CLI では --ocr-option replace_broken_text_layer=true でも指定できます。
  • 「壊れている」の判定:ページ内や多くの行に制御文字・�・私用領域の文字があること(すべての文字体系)。ラテン文字では、別の文字体系の代わりに使われたアクセント付き文字(ロシア語が Îò÷¸ò になる例)や母音の少なすぎる単語も検出します。ページ内の 1 セルだけ壊れていても置き換えません。
  • 検出できないもの:文字体系は正しいのに文字が違う・順序が乱れているテキスト(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すべてfalsePDF のテキスト層が壊れたページだけを 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 iso:ja --ocr-option scale=2
docling convert scan.pdf --ocr-engine tesseract --ocr-lang jpn,eng --ocr-option psm=6
docling convert scan.pdf --ocr-engine easyocr --ocr-lang ja,en --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=["japan"], 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、GPU なしの 4 vCPU クラウドマシン。

データ表を表示
スキャンページからの単語復元率
復元率
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 での 1 ページあたりの OCR 時間標準パイプライン全体の 1 ページあたり秒数(ウォーム実行 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、GPU なしの 4 vCPU クラウドマシン。

データ表を表示
CPU での 1 ページあたりの 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 論文の最初の 4 ページを 150 DPI でラスタライズし、わずかなぼかしと傾きを加えたもの)、同じ標準パイプラインで、OCR エンジンだけを変えました。各エンジンは GPU なしの 4 vCPU マシンでウォームアップ 1 回、計測 3 回です(Docling 2.148.0、2026 年 11 月 6 日)。

  • ここでは Tesseract が最速かつ最も正確でした(5.5 秒/ページ、単語の 96.1%)。きれいな英文の組版ページでは勝つのが難しいエンジンです。システムのバイナリと言語パックが必要です。
  • onnxruntime 版の RapidOCR は既定の PyTorch 版の約 2 倍速(7.0 対 15.4 秒/ページ)で、出力は同一でした。純 Python 環境で最も手軽な高速化は docling[rapidocr] のインストールで、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 では ocrmac(macOS で導入済みの場合)、Nemotron OCR(CUDA のある Linux で導入済みの場合)、onnxruntime バックエンドの RapidOCR、EasyOCR、最後に PyTorch バックエンドの RapidOCR の順に試し、Tesseract は自動では選びません。通常の pip install docling では PyTorch バックエンドの RapidOCR が使われます。

PDF からコピーした文字が文字化けするときは?

画面上は正しく見えても、フォントがグリフを誤った文字に対応付けているため 8VceZWZTReV のように読める PDF があります。2.144.0 以降は docling convert --replace-broken-text-layer(または任意の OCR オプションクラスで replace_broken_text_layer=True)を使うと、こうしたページを検出してそのページのテキストだけを OCR に置き換えます。全ページを OCR するなら --ocr-mode full_page です。

Docling で OCR を無効にするには?

CLI では --no-ocr、Python では pipeline_options.do_ocr = False を設定します。選択可能なテキストを含む PDF ではこれが正解です。

Docling で日本語のスキャン文書を読むには?

通常のインストールのままなら RapidOCR を PyTorch バックエンドで使います:docling convert scan.pdf --ocr-engine rapidocr --ocr-option backend=torch --ocr-lang iso:ja。Tesseract を使う場合は jpn の言語データを入れて --ocr-engine tesseract --ocr-lang jpn,eng とします。

Docling の tesseract と tesserocr の違いは?

tesseract は Tesseract のコマンドラインプログラムを呼び出し、tesserocr は tesserocr Python パッケージ経由で Tesseract の C API を使います(システムの Tesseract に対してビルドが必要)。どちらも同じ traineddata 言語ファイルを使います。

Docling の OCR が遅いのはなぜ?

OCR は既定で領域を 216 DPI(scale 3.0)でレンダリングし、文字検出と認識のニューラルネットを実行します。当サイトの 4 vCPU 環境ではスキャン 1 ページあたり約 15 秒でした。GPU、より速いエンジン、低めの --ocr-option scale を使うか、デジタル生成ファイルでは OCR を省略してください。

出典