MCPcopy
hub / github.com/jingsongliujing/OnnxOCR

github.com/jingsongliujing/OnnxOCR @v3.0.0 sqlite

repository ↗ · DeepWiki ↗ · release v3.0.0 ↗
1,910 symbols 6,383 edges 300 files 612 documented · 32%
README

OnnxOCR

このプロジェクトが役に立ったら、右上の Star で応援してください。

onnx_logo

ONNXRuntime ベースの高性能・多言語 OCR プロジェクト

GitHub stars GitHub forks GitHub license Python Version AtomGit Star

English | 简体中文 | 日本語

更新履歴

  • 2026.05.01
  • ONNX ベースの車両ナンバープレート検出・認識を追加。
  • RapidTable ベースの ONNX 表認識を追加。
  • RapidLayout ベースの中国語・英語レイアウト解析を追加。
  • RapidDoc ベースの文書レイアウト解析と Markdown 出力を追加。
  • /plate/table/layout/layout_markdown などの HTTP API を追加。

  • 2025.05.21

  • PP-OCRv5 モデルを追加。簡体字中国語、繁体字中国語、中国語ピンイン、英語、日本語を 1 つのモデルで扱えます。
  • PP-OCRv4 と比べて全体的な認識精度を改善。
  • 認識結果は PaddleOCR 3.0 と整合するようにしています。

特長

  1. 学習フレームワーク不要:デプロイしやすい汎用 OCR プロジェクトです。
  2. クロスアーキテクチャ対応:PaddleOCR 由来の ONNX モデルを ARM / x86 環境に展開できます。
  3. 統一された推論エンジン:すべての ONNX モデルは onnxocr/inference_engine.py 経由で ONNXRuntime Session を作成します。
  4. 多言語対応:1 つのモデルで 5 種類の文字体系をサポートします。
  5. ソースレベル統合rapid_layoutrapid_tablerapid_doconnxocr/ パッケージ内に統合しています。
  6. ハードウェア適配が容易:GPU / NPU などの下流プロバイダ対応は、統一推論エンジンを中心に進められます。

環境構築

python>=3.8
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

補足:

  • リポジトリには、tests/test_general_ocr.py に必要な PP-OCRv5 汎用 OCR モデルだけが標準で含まれます。
  • ナンバープレート認識、表認識、レイアウト解析、方向分類、RapidDoc Markdown 出力などの拡張モデルはサイズが大きいため、必要に応じてダウンロードしてください。
  • 中国本土以外のユーザーには HuggingFace を推奨します。
  • 中国本土では ModelScope または https://hf-mirror.com が使えます。

モデルのダウンロード

HuggingFace からダウンロードする場合:

python scripts/download_models.py --source huggingface

ModelScope からダウンロードする場合:

python scripts/download_models.py

ローカルのモデル配置だけを確認する場合:

python scripts/download_models.py --check-only

ワンクリック実行

python test_ocr.py

test_ocr.py はデフォルトでは汎用 OCR のみを実行します。車両ナンバー、表認識、レイアウト解析、RapidDoc Markdown 出力の例はコメントアウトされています。対応モデルをダウンロードした後、必要に応じてコメントを外してください。

機能別テスト:

python tests/test_general_ocr.py
python tests/test_license_plate_ocr.py
python tests/test_table_ocr.py
python tests/test_layout_analysis.py
python tests/test_layout_markdown.py

生成ファイルは result_img/ に出力されます。このディレクトリは git では無視されます。

汎用 OCR

import cv2
from onnxocr.onnx_paddleocr import ONNXPaddleOcr

img = cv2.imread("onnxocr/test_images/715873facf064583b44ef28295126fa7.jpg")
model = ONNXPaddleOcr(use_angle_cls=False, use_gpu=False)
result = model.ocr(img)
print(result)

日本語 OCR 例

PP-OCRv5 の汎用 OCR モデルは日本語も認識できます。リポジトリ内の japan_2.jpg を使って、すぐに日本語 OCR を確認できます。

日本語 OCR サンプル

import cv2
from onnxocr.onnx_paddleocr import ONNXPaddleOcr

img = cv2.imread("onnxocr/test_images/japan_2.jpg")
model = ONNXPaddleOcr(use_angle_cls=False, use_gpu=False)
result = model.ocr(img)

for line in result[0]:
    text, score = line[1]
    print(text, score)

実行例:

もちもち 0.9998
天然の 0.9999
とろっと後味のよい 0.9945
濃厚な 0.9442
味わい深い 0.9887
なめらかな 0.9920
焼きたて 0.9996

もう 1 つの小さな日本語サンプルもあります。

img = cv2.imread("onnxocr/test_images/japan_1.jpg")
result = model.ocr(img)
print(result)

ナンバープレート認識

ナンバープレート認識は ONNXPaddleOcr のオプション機能として統合されています。既存の汎用 OCR の使い方は変わりません。

from onnxocr.onnx_paddleocr import ONNXPaddleOcr, sav2PlateImg

plate_model = ONNXPaddleOcr(
    use_angle_cls=True,
    use_gpu=False,
    use_plate_recognition=True,
    plate_min_score=0.4,
)
plate_result = plate_model.ocr(img)
sav2PlateImg(img, plate_result, name="./result_img/test_plate_vis.jpg")

モデルファイル:

onnxocr/models/license_plate/car_plate_detect.onnx
onnxocr/models/license_plate/plate_rec.onnx

表認識

表認識は RapidTable を統合しています。汎用 OCR の検出・認識結果を再利用し、表構造を復元して HTML、セル枠、論理行列座標を出力します。

from onnxocr.onnx_paddleocr import ONNXPaddleOcr, sav2TableImg

table_model = ONNXPaddleOcr(
    use_angle_cls=True,
    use_gpu=False,
    use_table_recognition=True,
    table_model_type="slanet_plus",
)
table_result = table_model.ocr(img)
print(table_result["html"])
sav2TableImg(img, table_result, name="./result_img/test_table_vis.jpg")

中国語 / 英語レイアウト解析

レイアウト解析は RapidLayout を統合しています。タイトル、本文、表、図、ヘッダー、フッターなどの文書要素を検出します。

from onnxocr.onnx_paddleocr import ONNXPaddleOcr, sav2LayoutImg

layout_model = ONNXPaddleOcr(
    use_gpu=False,
    use_layout_analysis=True,
    layout_model_type="pp_layout_cdla",
)
layout_result = layout_model.ocr(img)
sav2LayoutImg(img, layout_result, name="./result_img/test_layout_vis.jpg")

英語レイアウト解析では layout_model_type="pp_layout_publaynet" を指定してください。

文書から Markdown へ

RapidDoc を使って、文書画像のタイトル、段落、表、図などを解析し、Markdown ファイルとして保存できます。

from onnxocr.layout_markdown import LayoutMarkdownConverter

converter = LayoutMarkdownConverter(
    layout_model_type="pp_doclayoutv2",
    formula_enable=False,
    table_enable=True,
)
result = converter.convert_file(
    "onnxocr/test_images/layout_cdla.jpg",
    output_md_path="./result_img/test_layout_markdown.md",
)
print(result["markdown_path"])

推論エンジンの適配

汎用 OCR、ナンバープレート認識、表認識、レイアウト解析、RapidDoc 文書解析は、すべて onnxocr/inference_engine.py から ONNXRuntime Session を作成します。

下流の GPU / NPU プロバイダに適配する場合は、まず次の関数から確認してください。

from onnxocr.inference_engine import create_session

API サービス

app-service.py はデプロイ向けの JSON API サービスです。webui.py はブラウザ UI サービスです。API と UI を分けることで、デプロイ、テスト、保守がしやすくなります。

API サービスを起動します。

python app-service.py

環境変数:

  • ONNXOCR_PORT:サービスポート。デフォルトは 5005
  • ONNXOCR_USE_GPU1 / true を指定すると GPU provider を使います。
  • ONNXOCR_DEBUG1 / true を指定すると Flask debug を有効にします。
  • ONNXOCR_OUTPUT_DIR:Markdown とアセットの出力先。デフォルトは result_img
  • ONNXOCR_MAX_UPLOAD_MB:最大アップロードサイズ。デフォルトは 200 MB。

主なエンドポイントは JSON base64 画像と multipart ファイルアップロードに対応します。

  • /health:ヘルスチェック。
  • /ocr:汎用 OCR。
  • /plate:ナンバープレート認識。
  • /table:表認識。
  • /layout:レイアウト解析。
  • /layout_markdown:文書画像を Markdown に変換。

JSON 例:

curl -X POST http://127.0.0.1:5005/ocr \
  -H "Content-Type: application/json" \
  -d "{\"image\":\"<base64-image>\"}"

multipart 例:

curl -X POST http://127.0.0.1:5005/ocr \
  -F "image=@onnxocr/test_images/japan_2.jpg"

WebUI を起動します。

python webui.py

Docker

docker build -t ocr-service .
docker run -itd --name onnxocr-service -p 5006:5005 ocr-service

Docker build では .dockerignore により、キャッシュ、生成結果、任意の大きなモデルファイルを除外します。ナンバープレート、表、レイアウト、RapidDoc などの拡張モデルは、必要に応じてコンテナ内でダウンロードするか、実行時にマウントしてください。

プロジェクト構成

app-service.py                 # デプロイ向け JSON API サービス
webui.py                       # ブラウザ UI サービス
test_ocr.py                    # ローカル OCR デモ
requirements.txt               # 実行時依存
Dockerfile                     # API サービス用コンテナ
.dockerignore                  # キャッシュ、出力、大きなモデルを除外
Readme.md                      # 英語ドキュメント
Readme_cn.md                   # 中国語ドキュメント
Readme_ja.md                   # 日本語ドキュメント
onnxocr/
  inference_engine.py          # 統一 ONNXRuntime 入口
  onnx_paddleocr.py            # 公開 Python API
  predict_det.py               # 汎用 OCR 検出
  predict_rec.py               # 汎用 OCR 認識
  orientation.py               # RapidOrientation ONNX 適配
  license_plate.py             # ナンバープレート認識
  table_recognition.py         # 表認識
  layout_recognition.py        # レイアウト解析
  layout_markdown.py           # RapidDoc Markdown 出力
  rapid_layout/                # RapidLayout 統合
  rapid_table/                 # RapidTable 統合
  rapid_doc/                   # RapidDoc 統合
  models/                      # ローカル ONNX モデル
scripts/
  download_models.py           # 任意モデルのダウンロード/確認
tests/                         # 機能テストと API スモークテスト

コントリビューション

Issues と Pull Requests を歓迎します。オープンソース利用者が README の手順どおりに試せるよう、次のルールを守ってください。

  1. API 専用の処理は app-service.py、ブラウザ UI の処理は webui.py に置いてください。
  2. result_img/results/uploads/、ローカルキャッシュの生成物をコミットしないでください。
  3. 個人情報、銀行カード、医療文書、契約書、配送伝票、秘密鍵などをコミットしないでください。
  4. テストと文書サンプルには、公開サンプル、公式サンプル、または許可を得た匿名化サンプルだけを使ってください。
  5. 任意モデルが必要な機能では、必要なモデルファイルとダウンロード手順を明記してください。
  6. README に書くコマンドは、現在のリポジトリに実装が存在するものだけにしてください。

Pull Request 前の推奨チェック:

python -B -m pytest tests/test_app_service.py -p no:cacheprovider
python tests/test_general_ocr.py
python tests/test_license_plate_ocr.py
python tests/test_table_ocr.py
python tests/test_layout_analysis.py
python tests/test_layout_markdown.py

一部のテストは任意モデルファイルを必要とします。ローカルで実行できない場合は、Pull Request に不足しているモデルファイルを書いてください。

表示例

Example 1 Example 2
日本語 OCR サンプル

連絡先

OnnxOCR コミュニティ

WeChat Group

QQ Group

謝辞

PaddleOCR の技術サポートとモデル参照に感謝します。

RapidAI オープンソースコミュニティ、特に RapidTableRapidLayoutRapidDocRapidOrientation の優れたモデル、コード、エンジニアリングに感謝します。

Star 履歴

Star History Chart

Core symbols most depended-on inside this repo

format
called by 31
onnxocr/rapid_doc/model/formula/rapid_formula_self/model_handler/pp_formulanet_plus/pre_process.py
write
called by 30
onnxocr/rapid_doc/data/io/s3.py
resize
called by 27
onnxocr/rapid_layout/model_handler/pp/pre_process.py
draw_bbox_without_number
called by 22
onnxocr/rapid_doc/utils/draw_bbox.py
read
called by 21
onnxocr/rapid_doc/data/io/s3.py
merge_para_with_text
called by 17
onnxocr/rapid_doc/backend/pipeline/pipeline_middle_json_mkcontent.py
get_logger
called by 16
onnxocr/logger.py
_layout_item
called by 16
onnxocr/rapid_doc/utils/draw_bbox.py

Shape

Method 978
Function 665
Class 249
Route 18

Languages

Python100%

Modules by API surface

onnxocr/rec_postprocess.py75 symbols
onnxocr/rapid_doc/model/docx/docx_converter.py70 symbols
onnxocr/rapid_doc/model/docx/tools/math/omml.py43 symbols
onnxocr/rapid_doc/model/reading_order/layout_parsing/layout_objects.py37 symbols
onnxocr/rapid_doc/backend/office/office_middle_json_mkcontent.py35 symbols
onnxocr/rapid_doc/main.py32 symbols
webui.py25 symbols
onnxocr/rapid_layout/model_handler/pp_doc_layout/post_process.py24 symbols
onnxocr/rapid_doc/model/reading_order/layout_parsing/xycut_enhanced/utils.py24 symbols
onnxocr/rapid_doc/backend/office/office_magic_model.py24 symbols
onnxocr/rapid_doc/utils/ocr_utils.py23 symbols
onnxocr/rapid_doc/model/layout/rapid_layout_self/model_handler/pp_doclayout/post_process.py23 symbols

Dependencies from manifests, versioned

onnxruntime-gpu1.16 · 1×

For agents

$ claude mcp add OnnxOCR \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact