OpenSource-Hub

PaddleOCR

ライブラリ

PaddlePaddle/PaddleOCR

PDF または画像ドキュメントを構造化データに変換し、100+ の言語をサポートします。

概要

PaddleOCR は強力な OCR ツールキットで、あらゆる PDF や画像を LLM で利用可能な構造化データ(JSON/Markdown)に変換できます。100+ の言語をサポートし、PP-StructureV3 および PaddleOCR-VL モデルによる最先端のドキュメント解析機能を備え、RAG やインテリジェントエージェントアプリケーションとシームレスに統合します。

README プレビュー

\n\n  \n      \n  \n\n\n\nGlobal Leading OCR Toolkit & Document AI Engine\n\nEnglish | [简体中文](./readme/README_cn.md) | [繁體中文](./readme/README_tcn.md) | [日本語](./readme/README_ja.md) | [한국어](./readme/README_ko.md) | [Français](./readme/README_fr.md) | [Русский](./readme/README_ru.md) | [Español](./readme/README_es.md) | [العربية](./readme/README_ar.md)\n\n\n\n[](https://pepy.tech/projects/paddleocr)\n[](https://github.com/PaddlePaddle/PaddleOCR/network/dependents)\n\n\n\n\n[](https://www.paddleocr.com)\n[](https://deepwiki.com/PaddlePaddle/PaddleOCR)\n[](../LICENSE)\n\n\n\n\n\n\n\n\n**PaddleOCR converts PDF documents and images into structured, LLM-ready data (JSON/Markdown) with industry-leading accuracy. With 70k+ Stars and trusted by top-tier projects like Dify, RAGFlow, and Cherry Studio, PaddleOCR is the bedrock for building intelligent RAG and Agentic applications.**\n\n\n## 🚀 Key Features\n\n### 📄 Intelligent Document Parsing (LLM-Ready)\n> *Transforming messy visuals into structured data for the LLM era.*\n\n* **SOTA Document VLM**: Featuring **PaddleOCR-VL-1.6 (0.9B)**, the industry's leading lightweight vision-language model for document parsing. It achieves 96.3% accuracy on OmniDocBench v1.6, leads in text, formula, and table recognition, and shows significantly enhanced capabilities in ancient documents, rare characters, seals, and charts, with structured outputs in **Markdown** and **JSON** formats.\n* **Structure-Aware Conversion**: Powered by **PP-StructureV3**, seamlessly convert complex PDFs and images into **Markdown** or **JSON**. Unlike the PaddleOCR-VL series models, it provides more fine-grained coordinate information, including table cell coordinates, text coordinates, and more.\n* **Production-Ready Efficiency**: Achieve commercial-grade accuracy with an ultra-small footprint. Outperforms numerous closed-source solutions in public benchmarks while remaining resource-efficient for edge/cloud deployment.\n\n### 🔍 Universal Text Recognition (S

FAQ (3)

トラブル対応
PaddleOCR SealRecognitionが空の印章認識結果(seal_res_list: [])を返すのはなぜですか?また、どのように修正すればよいですか?

根本原因:SealRecognition はデフォルトでレイアウト検出を有効にします(use_layout_detection=True)。組み込みの PP-DocLayout-L レイアウトモデルは、赤い円形の印鑑スタンプを無効な領域として分類し、下流の印鑑検出パイプラインを遮断します。修正方法:パイプラインの初期化時にレイアウト検出を無効にします:

from paddleocr import SealRecognition
ocr = SealRecognition(device="gpu", use_layout_detection=False)
result = ocr.predict(input="testpic.png")

これにより印鑑検出が復元されます。注意:リング状の印鑑上の円形/円弧状のテキストは、公式パイプラインではまだ完全にはサポートされていません(矩形クロッピングでは湾曲したテキストを処理できず、検出ボックスがずれる場合があります)。PaddleOCR 3.7.0 時点では公式の修正はありません。コミュニティで推奨されているアプローチは、印鑑のポリゴンを抽出して極座標アンラッピングを適用し、認識前に円弧状テキストをまっすぐに矯正するか、カスタムの印鑑検出モデルをファインチューニングすることです。

参照 Issue #18306
トラブル対応
スマートクォートを含む画像で発生する PaddleOCRVL llama-cpp-server の HTTP 500 "Failed to parse input" エラーの修正方法

これは llama.cpp b9637 で、カーリークォート/スマートクォート(U+201C/U+201D)を含む PaddleOCR-VL の出力が不正な UTF-8 または U+FFFD バイトにデコードされ、llama-server の chat-template パーサーが HTTP 500 を返す場合に発生します。すると PaddleOCR 3.7.0 は保留中のすべての VLM ブロックをキャンセルし、predict() 呼び出し全体を失敗させます。

推奨される修正: 「chat: sanitize invalid UTF-8 before peg-native parsing」というタイトルのアップストリームの修正を含むビルドに llama-server を更新または再ビルドし、サーバーを再起動してから predict() を再実行してください。

一時的な PaddleOCR の回避策: paddlex/inference/models/doc_vlm/predictor.py の DocVLMGenAIClientPredictor._genai_client_process() にパッチを適用し、すべての future をキャンセルして例外を再送出する代わりに、失敗したブロックが空のコンテンツを返すようにします:

import logging

contents = [""] * len(futures)

for idx, future in enumerate(futures):
    try:
        contents[idx] = future.result().choices[0].message.content or ""
    except Exception as exc:
        logging.warning("Skipping failed VLM block %s: %s", idx, exc)
        contents[idx] = ""

保留中の future をキャンセルして raise を呼び出すグローバルハンドラーを削除または置き換えてください。失敗した段落は空白になりますが、残りのブロックとページ出力は生成されます。インストールされたファイルは次のコマンドで特定できます:

python -c "import paddlex, os; print(os.path.dirname(paddlex.__file__))"

パッチ適用後は Python を再起動してください。llama.cpp を更新する方が望ましい方法です。なぜなら、パーサーの失敗自体を防ぐことができるからです。

参照 Issue #18170
トラブル対応
メモリが増加し続けてBadAlloc/ResourceExhaustedErrorがスローされる場合の、PaddleOCR PP-OCRv3検出バリデーションにおけるGPU OOMの修正方法

これは通常、DetResizeForTest 適用後に検証画像の H/W サイズが一定でないことが原因で発生します。PaddlePaddle のキャッシングアロケータが新しい形状ごとにブロックを保持し続け、学習/オプティマイザのメモリも T4 上に常駐したままになるためです。PP-OCRv3 の det 設定で、評価時の入力サイズを小さくするか固定してください:

Eval:
  loader:
    batch_size_per_card: 1
  dataset:
    transforms:
      - DetResizeForTest:
          limit_type: max
          limit_side_len: 736   # それでも OOM になる場合は 640 を試してください

デフォルトは 960 であることが多いです。メモリの再利用を決定的にするには、32 で割り切れる固定形状に置き換えます。例:

- DetResizeForTest:
    image_shape: [3, 640, 960]

評価ループを変更している場合は、推論が autograd なしで実行されることを確認してください:

model.eval()
with paddle.no_grad():
    for batch in eval_loader:
        preds = model(images)

一時的な回避策として、学習前に CUDA managed memory を有効にします。古いエラーメッセージに表示されている false ではなく、true を使用してください:

export FLAGS_use_cuda_managed_memory=true
python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_distill_train.yml

学習中の検証がそれでも失敗する場合は、オプティマイザの状態や学習用キャッシュが常駐しないよう、評価を別途実行してください:

python tools/eval.py \
  -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_distill_train.yml \
  -o Global.checkpoints=<output_dir>/best_accuracy

さらに、Train.loader.batch_size_per_card を 1 に減らすか、より大きな GPU を使用するという選択肢もあります。

参照 Issue #6989