# OSS OCRスタック比較

CURRENT_STATUS: CURRENT
OBSERVATION: SPEC_ONLY
FRESHNESS: CURRENT
PAGE_TYPE: decision
CANONICAL_URL: /tools/ea-216-oss-ocr
CLAIM_IDS: none
EVIDENCE_IDS: EVD-EA-216-URL-B32F7DB38A9B, EVD-EA-216-URL-63804C21C767, EVD-EA-216-URL-FC9637520597, EVD-EA-216-URL-ACFE04B68940, EVD-EA-216-URL-E4F8125543A0, EVD-EA-216-URL-1DB235ADAAE4, EVD-EA-216-URL-C519E58D07CF, EVD-EA-216-URL-2B6D5708B4B6, EA-216-R11-RESEARCH, EA-216-R11-WEB-READBACK
UNKNOWN_IDS: EA-216-UNKNOWN-01
OPS_IDS: none

## Summary
OCRは文字認識、layout・表処理、PDF再生成の役割を分けて選定します。文字の存在だけで読み順や数値を正しいと判断せず、モデルと設定を固定し、業務素材のgoldenへ照合します。

## Current judgment
|対象|役割と採用時の境界|
|---|---|
|Tesseract|OCR engine。language packとpage segmentation、前処理を固定します。jpn/jpn_vertモデルの所在と実runtimeの導入状態は別です。|
|PaddleOCR|orientation/unwarping/検出・認識等のpipeline。current general OCR docsはv3〜v6を含みます。v5の日本語・縦書きの作者報告を全世代やOCR-VLへ外挿しません。|
|OCRmyPDF|検索可能PDFとOCR text layerを作るpipeline。Tesseractとlang packに依存し、独立した認識engineの比較枠にはしません。PDF再生成と文字・表の意味保持を別検証します。|
|Surya|current世代はOCR/layout/読み順/tableを扱うVLM系です。vllmまたはllama.cpp backend、codeとmodelの利用条件を別確認します。旧forkの条件をcurrentへ転用しません。|

## Scope
OSS OCRスタック比較

## Confirmed
- |対象|役割と採用時の境界|
|---|---|
|Tesseract|OCR engine。language packとpage segmentation、前処理を固定します。jpn/jpn_vertモデルの所在と実runtimeの導入状態は別です。|
|PaddleOCR|orientation/unwarping/検出・認識等のpipeline。current general OCR docsはv3〜v6を含みます。v5の日本語・縦書きの作者報告を全世代やOCR-VLへ外挿しません。|
|OCRmyPDF|検索可能PDFとOCR text layerを作るpipeline。Tesseractとlang packに依存し、独立した認識engineの比較枠にはしません。PDF再生成と文字・表の意味保持を別検証します。|
|Surya|current世代はOCR/layout/読み順/tableを扱うVLM系です。vllmまたはllama.cpp backend、codeとmodelの利用条件を別確認します。旧forkの条件をcurrentへ転用しません。|

## UNKNOWN
- EA-216-UNKNOWN-01: 日本語・縦書き、他engineとの同一corpus精度、PDF/A・署名・座標差分、実業務latency/RSS、採用model条件、組織閾値は未確認です。役割比較と再現可能な限定実測までを研究範囲とし、本番の順位・推奨は確定していません。

## Evidence
- EVD-EA-216-URL-B32F7DB38A9B (RESEARCH): [Tesseract]( — https://github.com/tesseract-ocr/tesseract
- EVD-EA-216-URL-63804C21C767 (RESEARCH): [Tesseract quality]( — https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html
- EVD-EA-216-URL-FC9637520597 (RESEARCH): [Tessdata]( — https://github.com/tesseract-ocr/tessdata
- EVD-EA-216-URL-ACFE04B68940 (RESEARCH): [PaddleOCR pipeline]( — https://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/version3.x/pipeline_usage/OCR.en.md
- EVD-EA-216-URL-E4F8125543A0 (RESEARCH): [PP-OCRv5]( — https://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/version3.x/algorithm/PP-OCRv5/PP-OCRv5.en.md
- EVD-EA-216-URL-1DB235ADAAE4 (RESEARCH): [OCRmyPDF]( — https://github.com/ocrmypdf/OCRmyPDF
- EVD-EA-216-URL-C519E58D07CF (RESEARCH): [OCRmyPDF PDF security]( — https://github.com/ocrmypdf/OCRmyPDF/blob/main/docs/pdfsecurity.md
- EVD-EA-216-URL-2B6D5708B4B6 (RESEARCH): [Surya]( — https://github.com/datalab-to/surya
- EA-216-R11-RESEARCH (RESEARCH): EA-216 監査済みresearch / canonical revision binding
- EA-216-R11-WEB-READBACK (IMPL): EA-216 Web body identity / canonical readback

## Failure / limits
Tesseract5.3.4 eng、OEM1、PSM3/6、DejaVu Sansで生成したEnglish PNG3素材の限定試験を行いました。NFC＋空白除去後のCERで、大文字・句読点・数字差を残しています。これは実業務・日本語・他engineのbenchmarkではありません。

|素材|PSM3 CER|PSM6 CER|結果の範囲|
|---|---:|---:|---|
|単段4行|0|0|生成した既知の文字と数字は一致|
|二段|0.423077|0.423077|左段全文→右段全文のgolden順序に不一致|
|6度の傾き|0.134615|0.115385|123.45が123-45に変化|

process完了を内容品質の全PASSと扱いません。数字変化と読み順崩れは、OCR出力を業務値へ無照合で渡せない反証です。CERはこの素材・model・設定だけの観測です。blankは空出力が正解でしたが、非空素材の空出力と区別します。jpnはpack欠落errorで、日本語・縦書きは未実測です。
## Failure / limits
傾き・汚れ・低解像度、日英混在・縦書き、複数段、罫線・merged/multi-page table、数式、empty output、missing-language、backend/model依存、text layerの座標ずれを評価します。作者の異なるdataset/metric/deviceの数値を揃えず横断順位にしません。PDF/Aやrepairを原文同一・署名保持・安全化の保証と扱いません。
## Failure / limits
日本語・縦書き、他engineとの同一corpus精度、PDF/A・署名・座標差分、実業務latency/RSS、採用model条件、組織閾値は未確認です。役割比較と再現可能な限定実測までを研究範囲とし、本番の順位・推奨は確定していません。
## Practice
source hash、engine/package/model/hash、language、前処理、PSM、device/backend、layout/order/table、raw output、CER/WER・numeric・順序edge・PDF差分、warnings/time/RSS、ACL、overrideを受入記録に残す設計を提案します。共通標準や実装済み制御ではありません。
## Practice
日本語/縦書きの必要model、採用generation、hardware/runtime、依存・model license、素材送信可否、業務閾値を確定します。PaddleOCR、Surya、OCRmyPDFは本候補では実行していません。GPU要否はengine名で一括判断せず、選んだmodel/backendで確認します。
## Practice
PDFは複雑な入力です。OCRmyPDFの作者資料もsanitizerではないと説明しています。低権限process、CPU/RSS/timeout/page/画像dimension上限、egressとmodel供給を制御します。本文命令をtool authorityへ移さず、raw image/PIIを不要にlogへ残しません。sourceと出力PDF/text/構造のACLを揃えます。
## PUBLIC_CLAIM
OCRは文字認識、layout・表処理、PDF再生成の役割を分けて選定します。文字の存在だけで読み順や数値を正しいと判断せず、モデルと設定を固定し、業務素材のgoldenへ照合します。

## ESTABLISHED
|対象|役割と採用時の境界|
|---|---|
|Tesseract|OCR engine。language packとpage segmentation、前処理を固定します。jpn/jpn_vertモデルの所在と実runtimeの導入状態は別です。|
|PaddleOCR|orientation/unwarping/検出・認識等のpipeline。current general OCR docsはv3〜v6を含みます。v5の日本語・縦書きの作者報告を全世代やOCR-VLへ外挿しません。|
|OCRmyPDF|検索可能PDFとOCR text layerを作るpipeline。Tesseractとlang packに依存し、独立した認識engineの比較枠にはしません。PDF再生成と文字・表の意味保持を別検証します。|
|Surya|current世代はOCR/layout/読み順/tableを扱うVLM系です。vllmまたはllama.cpp backend、codeとmodelの利用条件を別確認します。旧forkの条件をcurrentへ転用しません。|

## LOCAL_OBSERVATION_AND_COUNTEREVIDENCE
Tesseract5.3.4 eng、OEM1、PSM3/6、DejaVu Sansで生成したEnglish PNG3素材の限定試験を行いました。NFC＋空白除去後のCERで、大文字・句読点・数字差を残しています。これは実業務・日本語・他engineのbenchmarkではありません。

|素材|PSM3 CER|PSM6 CER|結果の範囲|
|---|---:|---:|---|
|単段4行|0|0|生成した既知の文字と数字は一致|
|二段|0.423077|0.423077|左段全文→右段全文のgolden順序に不一致|
|6度の傾き|0.134615|0.115385|123.45が123-45に変化|

process完了を内容品質の全PASSと扱いません。数字変化と読み順崩れは、OCR出力を業務値へ無照合で渡せない反証です。CERはこの素材・model・設定だけの観測です。blankは空出力が正解でしたが、非空素材の空出力と区別します。jpnはpack欠落errorで、日本語・縦書きは未実測です。

## INFERENCE
source hash、engine/package/model/hash、language、前処理、PSM、device/backend、layout/order/table、raw output、CER/WER・numeric・順序edge・PDF差分、warnings/time/RSS、ACL、overrideを受入記録に残す設計を提案します。共通標準や実装済み制御ではありません。

## FAILURE_ENVELOPE
傾き・汚れ・低解像度、日英混在・縦書き、複数段、罫線・merged/multi-page table、数式、empty output、missing-language、backend/model依存、text layerの座標ずれを評価します。作者の異なるdataset/metric/deviceの数値を揃えず横断順位にしません。PDF/Aやrepairを原文同一・署名保持・安全化の保証と扱いません。

## AVAILABILITY_GATES
日本語/縦書きの必要model、採用generation、hardware/runtime、依存・model license、素材送信可否、業務閾値を確定します。PaddleOCR、Surya、OCRmyPDFは本候補では実行していません。GPU要否はengine名で一括判断せず、選んだmodel/backendで確認します。

## SECURITY_PRIVACY_AUDIT_OPERABILITY
PDFは複雑な入力です。OCRmyPDFの作者資料もsanitizerではないと説明しています。低権限process、CPU/RSS/timeout/page/画像dimension上限、egressとmodel供給を制御します。本文命令をtool authorityへ移さず、raw image/PIIを不要にlogへ残しません。sourceと出力PDF/text/構造のACLを揃えます。

## UNKNOWN_AND_STOP_CONDITION
日本語・縦書き、他engineとの同一corpus精度、PDF/A・署名・座標差分、実業務latency/RSS、採用model条件、組織閾値は未確認です。役割比較と再現可能な限定実測までを研究範囲とし、本番の順位・推奨は確定していません。

## SOURCES
確認日: 2026-10-04。repo main/current docsは可変です。

- [Tesseract](https://github.com/tesseract-ocr/tesseract)
- [Tesseract quality](https://tesseract-ocr.github.io/tessdoc/ImproveQuality.html)
- [Tessdata](https://github.com/tesseract-ocr/tessdata)
- [PaddleOCR pipeline](https://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/version3.x/pipeline_usage/OCR.en.md)
- [PP-OCRv5](https://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/version3.x/algorithm/PP-OCRv5/PP-OCRv5.en.md)
- [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF)
- [OCRmyPDF PDF security](https://github.com/ocrmypdf/OCRmyPDF/blob/main/docs/pdfsecurity.md)
- [Surya](https://github.com/datalab-to/surya)

NEXT: /agent/start.json
STOP: This is a knowledge projection, not an execution order.