スキャン前処理と構造化 OCR

HPDFScanPreprocess は呼び出し側所有の Graphics.TBitmap を受け付け、プライベートな補正済み画像と可逆ジオメトリーを返します。HPDFScanOCRWorkflow は既存の IHPDFOCREngine を使い、マップ済み単語とセマンティックレイアウトを返します

同梱の受け入れプロファイルは Delphi と Windows FPC / Lazarus を使います。Tesseract OSD プロセスアダプターは Windows API を使うため、ネイティブ Linux ヘッドレスドキュメントプロファイルの一部ではありません

補正とエビデンス

補正の順序は、呼び出し側指定のパースペクティブクアッド、時計回りの向き、連続角度のデスキューで、双線形逆サンプリングと指定ソース領域外への白フィルを使います

明示的な向きは時計回りに 0 / 90 / 180 / 270 度をサポートします。自動向きはディテクターを要求し、不十分または不正なエビデンスは拒否します

HPDFScanOrientationTesseract は、明示的な実行ファイルと osd.traineddata を含む tessdata ディレクトリーを使う実際の Windows Tesseract OSD アダプターを供給します。--psm 0 -l osd --dpi 300 をシェルなしで隠しプロセス内に直接起動します

生の向きマージンしきい値のデフォルトは 15 です。LastOrientationScore が実際の Tesseract スコアを保持し、正規化信頼度はスコアを 15 で割った値を [0, 1] にクランプしたものです。この正規化はエビデンススケールであって較正済み確率ではありません

自動デスキューは実際の暗ピクセルをサンプリングし、上限付き角度範囲で行投影の集中度を比較します。デフォルト範囲は 0.25 度刻みで ±10 度、エビデンスしきい値は 0.2 です。エビデンス不足では明示角度を維持し DeskewAccepted = False を記録します

明示的なデスキューは -180〜180 度の任意の連続角度を受け付けます。自動検索は半径 45 度まで対応し、ステップは 0.1〜5 度のあいだでなければなりません

パースペクティブ補正には、ソースラスタ内で左上・右上・右下・左下の順に並んだ有限の凸クアッドと、明示的なターゲット寸法が必要です。クアッドの自動検出は提供されません

クリーンアップと有限予算

デフォルトはタイルローカルの影を正規化し、連続した暗いエッジ行 / 列を除去し、グレースケール出力を保持します。オプションで 3x3 メディアンノイズ除去とバイナリー出力を有効化できます

クリーンアップは座標原点を変えずにエッジピクセルを白くします。RemovedBorderPixels が影響ピクセルを報告し、一様に真っ白なラスタは OCR をスキップします

デフォルト上限は、寸法あたり 32768 ピクセル、入出力ピクセル 16777216、保守的な 512 MiB の作業割り当て推定、作業ユニット 500000000、デスキュー 20000 サンプルです。さらにソースピクセルは符号付き整数インデックスに収まる必要があります

推定は所有ラスタクローン、グレースケール配列、出力ストレージ、サンプル、ヒストグラムをカバーします。呼び出し側ソースビットマップ、OS のグラフィックス割り当て、任意の外部 OCR エンジンは上限しません

Tesseract OSD はピクセルと結合 stdout / stderr を別に制限し、25 ミリ秒ごとにキャンセルと出力サイズをポーリングし、タイムアウト・キャンセル・出力オーバーフローで子プロセスを終了します。タイムアウトは 1〜3600000 ミリ秒、出力上限は 1024〜1048576 バイトでなければなりません

所有権とロールバック

HPDFPreprocessScan はソースビットマップを決して編集しません。成功時は呼び出し側が OutputBitmap を解放し、失敗時は nil と診断エビデンスつきのステータスを返します

ディテクターはプライベートコピーを受け取ります。キャンセルは行、候補角度、プロセス待機、単語処理の各境界で協調的に行われます。渡された OCR エンジンは要求トークンと、自身のプロセス / 出力上限を尊重しなければなりません

ワークフローは失敗のたびに単語、セマンティックレイアウト、行クアッドをクリアします。アダプターは可変な last-report 状態を保持するため、直列に使ってください

ジオメトリーと構造化 OCR

ラスタ座標は左上原点とピクセル中心を使います。同次マトリクスは列ベクトル (X, Y, 1) に作用し、第 3 座標で割ります。変換の積 A × B は B を先に適用します

SourceToOutput と OutputToSource はアフィン / 射影操作全体を保持します。公開ヘルパーを使うときは、入力と出力のレコードを別々にマップしてください

OCR ラッパーは回転なしの一時 PDF 境界つきで補正済みラスタをエンジンに渡し、UTF-16 と有限な単語矩形を検証し、信頼度不足やマップ不可能な単語を落とし、矩形・ベースライン・4 隅を元のラスタへマップバックします

PageQuad とセマンティック境界は入力 PDF のページボックス、DPI、0 / 90 / 180 / 270 度のページ回転を考慮します。読み順は、ジオメトリーをマップバックする前に補正済み正立フレームで分析されます

文字区間は OCR 単語ボックスから補間され、近似的なままです。行の四辺形は、軸整列境界では表現できない回転とパースペクティブを保持します

HPDFScanOCRLayoutToDOM は分析順に所有可能な編集スタックを作成します。検出された見出しは見出しノードに、その他の行はテキストノードになります

例

Options := HPDFDefaultScanOCRWorkflowOptions;
Options.Preprocess.AutoOrientation := True;
Detector := HPDFCreateTesseractOrientationDetector(
  TesseractExecutable, OSDModelDirectory,
  HPDFDefaultTesseractOrientationOptions);
Adapter := HPDFCreateScanPreprocessingOCREngine(
  ExistingOCREngine, Options, Detector);
if Adapter.Recognize(Request, Words, Diagnostic) then
begin
  Report := Adapter.LastReport;
  DOM := HPDFScanOCRLayoutToDOM(Report);
  try
    // Consume the editable semantic output here
  finally
    DOM.Free;
  end;
end;

検証

非 GUI Delphi スイートは、明示的な向き、±179.25 度までの可逆連続角度、実際の Tesseract による自動 0 / 90 / 180 / 270 度向きと空白拒否、実際の 5 度自動スキュー補正、ノイズ / 影クリーンアップ、パースペクティブ隅、予算、キャンセル、ソース不変性、37.5 度スキャンを含む 6 ラスタ変種での実際の英語 OCR をチェックします

実際の OCR ケースで受け入れられた単語隅はすべて、逆変換を通じてマップバックされ、補正済みラスタ 1e-6 ピクセル以内でチェックされます。FPC スモークスイートはさらに、実際のデスキュー、キャンセル、割り当て上限、180 度 / 空白 OSD、実際の英語 OCR レイアウトを実行します

生成された公開ヘッダーは C++Builder Win32 / Win64x でコンパイルされます。管理 OCR レポート、デフォルトインターフェース引数、ジオメトリー変換、DOM 所有権を含みます

外部エンジン検証を有効にするには、OSD モデル用に HOTPDF_TESSERACT_EXE と HOTPDF_TESSDATA を、英語モデル用に HOTPDF_OCR_TESSDATA を設定します。省略可能なランタイム設定が欠けても実際の OCR 受け入れは成立しません