nyosegawa/ocr-comparison

OCR比較

8

stars

20

commits

Python

primary language

May 20, 2026

updated

README

ocr-comparison

日本語手書き OCR モデルの比較評価フレームワーク。

API ベースの商用モデルから OSS の GPU モデルまで 26 以上の OCR モデルを、3 つの評価指標で統一的に比較できます。アノテーションツール・評価ランナー・結果ビューアの 3 コンポーネントで構成されています。

対応モデル

API モデル(直接呼び出し)

モデルname備考
Claude 4.7 Opusclaude-4.7-opusAdaptive thinking
Claude 4.6 Opusclaude-4.6-opusAdaptive thinking
Claude 4.5 Sonnetclaude-4.5-sonnetExtended thinking
Gemini 3.1 Pro Previewgemini-3.1-pro-previewDeep thinking
Gemini 3 Flash Previewgemini-3-flash-preview
Gemini 3.1 Flash Lite Previewgemini-3.1-flash-lite-preview
Gemini 3.5 Flashgemini-3.5-flash
GPT-5.5gpt-5.5Reasoning effort: high
GPT-5.4gpt-5.4Reasoning effort: high
Google Cloud Visiongoogle-cloud-vision
Azure AI Visionazure-vision
Mistral OCRmistral-ocr-latestmistral-ocr-latest
Qwen VL OCRqwen-vl-ocrDashScope API
モデルnameGPUライセンス
HunyuanOCRhunyuan-ocrL4Apache-2.0
DeepSeek-OCRdeepseek-ocrL4MIT
ChandrachandraA100-40GBApache-2.0
Nanonets-OCR-snanonets-ocr-sL4Apache-2.0
olmOCR-2olmocr-2L4Apache-2.0
GOT-OCR 2.0got-ocr-2.0T4Apache-2.0
PaddleOCRpaddleocrT4Apache-2.0
YomiTokuyomitokuT4CC-BY-NC-SA-4.0
NDLOCR-Litendlocr-liteCPUCC-BY-4.0
GLM-OCRglm-ocrT4MIT
NDLOCR v2ndlocr-v2A10GCC-BY-4.0
Sarashina2.2-OCRsarashina-2.2-ocrL4MIT
Nemotron-OCR-v2nemotron-ocr-v2L4NVIDIA Open Model License

評価結果(日本語手書きメモ 6 枚)

手書きメモ画像 6 枚に対する評価結果です(Hungarian NLS 降順)。詳細な分析と各モデルの出力例はブログ記事を参照してください。

RankモデルカテゴリNLSBoC-F1CERAvg Time
1Gemini 3.5 FlashAPI0.9270.9280.19214.8s
2Gemini 3.1 Pro PreviewAPI0.9240.9290.20567.9s
3Gemini 3 Flash PreviewAPI0.9180.9100.22118.7s
4Gemini 3.1 Flash Lite PreviewAPI0.8990.9170.20713.7s
5Claude 4.6 OpusAPI0.8970.8960.22574.9s
6Claude 4.7 OpusAPI0.8580.8830.2769.5s
7YomiToku v0.13.0Modal0.8420.8070.38420.5s
8Azure AI VisionAPI0.8300.8450.3324.2s
9Google Cloud VisionAPI0.8200.7830.5092.2s
10GPT-5.5API0.7550.8300.30198.1s
11GLM-OCRModal0.7380.7920.38729.7s
12ChandraModal0.7340.7800.36129.2s
13olmOCR-2Modal0.7230.7860.37045.4s
14Sarashina2.2-OCRModal0.7170.7270.45024.7s
15GPT-5.4API0.7140.8140.331123.4s
16Qwen VL OCRAPI0.7060.7130.49117.7s
17HunyuanOCRModal0.6980.7540.36730.3s
18Claude 4.5 SonnetAPI0.6400.7090.46516.4s
19Mistral OCRAPI0.5890.6450.5637.3s
20Nanonets-OCR-sModal0.5570.5970.61569.1s
21DeepSeek-OCRModal0.4460.5300.67135.4s
22NDLOCR-Lite v1.2.1Modal0.4430.5110.72818.9s
23Nemotron-OCR-v2Modal0.4130.5620.70513.0s
24PaddleOCRModal0.3530.3940.78412.8s
25GOT-OCR 2.0Modal0.1940.2500.88810.2s
26NDLOCR v2Modal0.0640.0870.95828.7s

評価指標

3 つの相補的な指標でモデルを評価します。

指標説明特性
Hungarian NLS (primary)GT 領域ごとに最適な予測行をマッチングし、Normalized Levenshtein Similarity を計算読み順に依存しない
Bag-of-Characters F1 (secondary)文字の多重集合で比較。語順・改行を無視純粋な文字認識精度
NED / CER (tertiary)全文の Normalized Edit Distance と Character Error Rate読み順を含む総合品質

ディレクトリ構成

ocr-comparison/
├── annotation/              # アノテーションツール (React + Hono)
│   ├── src/client/          #   React フロントエンド
│   ├── src/server/          #   Hono API サーバー
│   ├── scripts/             #   画像前処理 (deskew, shadow removal)
│   └── data/                #   GT アノテーション (JSON)
├── evaluation/              # 評価フレームワーク (Python)
│   ├── src/
│   │   ├── models/          #   OCR モデルアダプタ
│   │   ├── metrics.py       #   3 指標の実装
│   │   ├── evaluate.py      #   CLI ランナー
│   │   └── data.py          #   GT データローダー
│   ├── modal_scripts/       #   Modal GPU スクリプト
│   ├── viewer/              #   結果ビューア (React + Hono)
│   └── tests/               #   テスト
└── research/                # OCR サーベイ資料

セットアップ

前提条件

  • Python 3.10+
  • Node.js 20+
  • uv (Python パッケージマネージャ)
  • Modal CLI (GPU モデルを使う場合)

インストール

# アノテーションツール
cd annotation && npm install

# 評価フレームワーク
cd evaluation && uv sync

# 結果ビューア
cd evaluation/viewer && npm install

環境変数

cp evaluation/.env.example evaluation/.env
# .env にAPIキーを設定

Modal を使う場合:

modal token new

使い方

1. アノテーション(正解データ作成)

cd annotation && npm run dev
# http://localhost:5190 でアノテーションツールが起動

画像をアップロードし、バウンディングボックスを描いて正解テキストを入力します。

2. 評価実行

cd evaluation

# 利用可能なモデル一覧
ocr-eval list-models

# 全モデルで評価
ocr-eval run

# 特定モデルのみ
ocr-eval run --models claude-4.6-opus gemini-3.1-pro-preview hunyuan-ocr

# 結果の確認
ocr-eval inspect

# 指標の再計算(指標ロジック変更後)
ocr-eval rescore

3. 結果ビューア

cd evaluation/viewer && npm run dev
# http://localhost:5191 でリーダーボードが表示

テスト

# Python
cd evaluation && uv run python -m pytest tests/ -v

# TypeScript (viewer)
cd evaluation/viewer && npx vitest run

# TypeScript (annotation)
cd annotation && npx vitest run

構造化抽出評価 (structured_eval)

活字ビジネス文書(請求書・レシート・名刺)から構造化 JSON を抽出するタスクの評価フレームワークです。詳細はブログ記事を参照してください。

評価結果(合成データ 30 枚)

RankモデルAccuracyParseSchemaAvg Time
1claude-4.6-opus0.9931100%100%10.4s
2gemini-3-flash-preview0.9925100%100%9.9s
3gemini-3.1-pro-preview0.9909100%100%19.4s
4gpt-5.40.9900100%100%6.9s
5claude-4.5-sonnet0.9733100%100%10.0s

使い方

cd structured_eval

# 環境変数を設定
cp .env.example .env  # ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENAI_API_KEY

# 利用可能なモデル一覧
uv run python -m src.evaluate list-models

# 全モデルで評価
uv run python -m src.evaluate run

# 特定モデルのみ
uv run python -m src.evaluate run --models claude-4.6-opus gpt-5.4

# 特定の文書タイプのみ
uv run python -m src.evaluate run --types invoice receipt

# 結果の確認
uv run python -m src.evaluate inspect

# 指標の再計算
uv run python -m src.evaluate rescore

データセット生成

Agent Skill generate-business-doc で合成データを生成できます。

# Claude Code で実行
/generate-business-doc              # 各タイプ 3 枚ずつ
/generate-business-doc invoice 5    # 請求書を 5 枚

ライセンス

MIT License - 詳細は LICENSE を参照してください。

各 OCR モデルにはそれぞれ固有のライセンスがあります。利用時は対応モデル一覧のライセンス列を確認してください。

Contributors

nyosegawa

20 commits

nyosegawa/ocr-comparison

OCR比較

8

stars

20

commits

Python

primary language

May 20, 2026

updated

README

ocr-comparison

日本語手書き OCR モデルの比較評価フレームワーク。

API ベースの商用モデルから OSS の GPU モデルまで 26 以上の OCR モデルを、3 つの評価指標で統一的に比較できます。アノテーションツール・評価ランナー・結果ビューアの 3 コンポーネントで構成されています。

対応モデル

API モデル(直接呼び出し)

モデルname備考
Claude 4.7 Opusclaude-4.7-opusAdaptive thinking
Claude 4.6 Opusclaude-4.6-opusAdaptive thinking
Claude 4.5 Sonnetclaude-4.5-sonnetExtended thinking
Gemini 3.1 Pro Previewgemini-3.1-pro-previewDeep thinking
Gemini 3 Flash Previewgemini-3-flash-preview
Gemini 3.1 Flash Lite Previewgemini-3.1-flash-lite-preview
Gemini 3.5 Flashgemini-3.5-flash
GPT-5.5gpt-5.5Reasoning effort: high
GPT-5.4gpt-5.4Reasoning effort: high
Google Cloud Visiongoogle-cloud-vision
Azure AI Visionazure-vision
Mistral OCRmistral-ocr-latestmistral-ocr-latest
Qwen VL OCRqwen-vl-ocrDashScope API
モデルnameGPUライセンス
HunyuanOCRhunyuan-ocrL4Apache-2.0
DeepSeek-OCRdeepseek-ocrL4MIT
ChandrachandraA100-40GBApache-2.0
Nanonets-OCR-snanonets-ocr-sL4Apache-2.0
olmOCR-2olmocr-2L4Apache-2.0
GOT-OCR 2.0got-ocr-2.0T4Apache-2.0
PaddleOCRpaddleocrT4Apache-2.0
YomiTokuyomitokuT4CC-BY-NC-SA-4.0
NDLOCR-Litendlocr-liteCPUCC-BY-4.0
GLM-OCRglm-ocrT4MIT
NDLOCR v2ndlocr-v2A10GCC-BY-4.0
Sarashina2.2-OCRsarashina-2.2-ocrL4MIT
Nemotron-OCR-v2nemotron-ocr-v2L4NVIDIA Open Model License

評価結果(日本語手書きメモ 6 枚)

手書きメモ画像 6 枚に対する評価結果です(Hungarian NLS 降順)。詳細な分析と各モデルの出力例はブログ記事を参照してください。

RankモデルカテゴリNLSBoC-F1CERAvg Time
1Gemini 3.5 FlashAPI0.9270.9280.19214.8s
2Gemini 3.1 Pro PreviewAPI0.9240.9290.20567.9s
3Gemini 3 Flash PreviewAPI0.9180.9100.22118.7s
4Gemini 3.1 Flash Lite PreviewAPI0.8990.9170.20713.7s
5Claude 4.6 OpusAPI0.8970.8960.22574.9s
6Claude 4.7 OpusAPI0.8580.8830.2769.5s
7YomiToku v0.13.0Modal0.8420.8070.38420.5s
8Azure AI VisionAPI0.8300.8450.3324.2s
9Google Cloud VisionAPI0.8200.7830.5092.2s
10GPT-5.5API0.7550.8300.30198.1s
11GLM-OCRModal0.7380.7920.38729.7s
12ChandraModal0.7340.7800.36129.2s
13olmOCR-2Modal0.7230.7860.37045.4s
14Sarashina2.2-OCRModal0.7170.7270.45024.7s
15GPT-5.4API0.7140.8140.331123.4s
16Qwen VL OCRAPI0.7060.7130.49117.7s
17HunyuanOCRModal0.6980.7540.36730.3s
18Claude 4.5 SonnetAPI0.6400.7090.46516.4s
19Mistral OCRAPI0.5890.6450.5637.3s
20Nanonets-OCR-sModal0.5570.5970.61569.1s
21DeepSeek-OCRModal0.4460.5300.67135.4s
22NDLOCR-Lite v1.2.1Modal0.4430.5110.72818.9s
23Nemotron-OCR-v2Modal0.4130.5620.70513.0s
24PaddleOCRModal0.3530.3940.78412.8s
25GOT-OCR 2.0Modal0.1940.2500.88810.2s
26NDLOCR v2Modal0.0640.0870.95828.7s

評価指標

3 つの相補的な指標でモデルを評価します。

指標説明特性
Hungarian NLS (primary)GT 領域ごとに最適な予測行をマッチングし、Normalized Levenshtein Similarity を計算読み順に依存しない
Bag-of-Characters F1 (secondary)文字の多重集合で比較。語順・改行を無視純粋な文字認識精度
NED / CER (tertiary)全文の Normalized Edit Distance と Character Error Rate読み順を含む総合品質

ディレクトリ構成

ocr-comparison/
├── annotation/              # アノテーションツール (React + Hono)
│   ├── src/client/          #   React フロントエンド
│   ├── src/server/          #   Hono API サーバー
│   ├── scripts/             #   画像前処理 (deskew, shadow removal)
│   └── data/                #   GT アノテーション (JSON)
├── evaluation/              # 評価フレームワーク (Python)
│   ├── src/
│   │   ├── models/          #   OCR モデルアダプタ
│   │   ├── metrics.py       #   3 指標の実装
│   │   ├── evaluate.py      #   CLI ランナー
│   │   └── data.py          #   GT データローダー
│   ├── modal_scripts/       #   Modal GPU スクリプト
│   ├── viewer/              #   結果ビューア (React + Hono)
│   └── tests/               #   テスト
└── research/                # OCR サーベイ資料

セットアップ

前提条件

  • Python 3.10+
  • Node.js 20+
  • uv (Python パッケージマネージャ)
  • Modal CLI (GPU モデルを使う場合)

インストール

# アノテーションツール
cd annotation && npm install

# 評価フレームワーク
cd evaluation && uv sync

# 結果ビューア
cd evaluation/viewer && npm install

環境変数

cp evaluation/.env.example evaluation/.env
# .env にAPIキーを設定

Modal を使う場合:

modal token new

使い方

1. アノテーション(正解データ作成)

cd annotation && npm run dev
# http://localhost:5190 でアノテーションツールが起動

画像をアップロードし、バウンディングボックスを描いて正解テキストを入力します。

2. 評価実行

cd evaluation

# 利用可能なモデル一覧
ocr-eval list-models

# 全モデルで評価
ocr-eval run

# 特定モデルのみ
ocr-eval run --models claude-4.6-opus gemini-3.1-pro-preview hunyuan-ocr

# 結果の確認
ocr-eval inspect

# 指標の再計算(指標ロジック変更後)
ocr-eval rescore

3. 結果ビューア

cd evaluation/viewer && npm run dev
# http://localhost:5191 でリーダーボードが表示

テスト

# Python
cd evaluation && uv run python -m pytest tests/ -v

# TypeScript (viewer)
cd evaluation/viewer && npx vitest run

# TypeScript (annotation)
cd annotation && npx vitest run

構造化抽出評価 (structured_eval)

活字ビジネス文書(請求書・レシート・名刺)から構造化 JSON を抽出するタスクの評価フレームワークです。詳細はブログ記事を参照してください。

評価結果(合成データ 30 枚)

RankモデルAccuracyParseSchemaAvg Time
1claude-4.6-opus0.9931100%100%10.4s
2gemini-3-flash-preview0.9925100%100%9.9s
3gemini-3.1-pro-preview0.9909100%100%19.4s
4gpt-5.40.9900100%100%6.9s
5claude-4.5-sonnet0.9733100%100%10.0s

使い方

cd structured_eval

# 環境変数を設定
cp .env.example .env  # ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENAI_API_KEY

# 利用可能なモデル一覧
uv run python -m src.evaluate list-models

# 全モデルで評価
uv run python -m src.evaluate run

# 特定モデルのみ
uv run python -m src.evaluate run --models claude-4.6-opus gpt-5.4

# 特定の文書タイプのみ
uv run python -m src.evaluate run --types invoice receipt

# 結果の確認
uv run python -m src.evaluate inspect

# 指標の再計算
uv run python -m src.evaluate rescore

データセット生成

Agent Skill generate-business-doc で合成データを生成できます。

# Claude Code で実行
/generate-business-doc              # 各タイプ 3 枚ずつ
/generate-business-doc invoice 5    # 請求書を 5 枚

ライセンス

MIT License - 詳細は LICENSE を参照してください。

各 OCR モデルにはそれぞれ固有のライセンスがあります。利用時は対応モデル一覧のライセンス列を確認してください。

Contributors

nyosegawa

20 commits

Languages

Python

46.8%

HTML

33.8%

TypeScript

16.7%

Jinja

2.8%