NDLOCR-LiteをPythonスクリプトからライブラリとして呼び出す方法
NDLOCR-Lite は、国立国会図書館が公開している日本語OCRです。図書・雑誌等のデジタル化画像からテキストを抽出でき、レイアウト認識(DEIM)と文字認識(PARSeq)を組み合わせた構成になっています。 ndlocr-lite コマンドでCLIから使えますが、バッチ処理パイプラインに組み込んだり、認識結果をプログラム内で直接扱いたい場合には、Pythonからライブラリとして呼び出す方がやりやすいです。 ただし、NDLOCR-Lite はライブラリとしてのAPIが公開されておらず、CLIのエントリポイントを内部的に呼び出す形になります。この記事ではその方法を記録します。 環境構築 Python 3.10 以上が必要です。macOS の場合、システムの Python は 3.9 系のことがあるため、Homebrew 等で 3.12 をインストールしておきます。 brew install python@3.12 pip でのインストール時に externally-managed-environment エラーが出るため、venv 環境を使います。 python3.12 -m venv venv source venv/bin/activate pip install git+https://github.com/ndl-lab/ndlocr-lite.git 初回インストール時に ONNX モデル(約160MB)も含めてダウンロードされます。 CLIの構造 NDLOCR-Lite のCLIエントリポイント(ndlocr-lite コマンド)は、内部的には ocr.main() を呼んでいます。main() は argparse で引数をパースし、ocr.process(args) に渡すだけのラッパーです。 ndlocr-lite コマンド → ocr.main() → argparse で Namespace を構築 → ocr.process(args) を実行 つまり、argparse.Namespace を自前で組み立てれば、ocr.process() を直接呼び出せます。 スクリプトからの呼び出し import argparse import os from pathlib import Path import ocr def run(image_path: str, output_dir: str, viz: bool = False): base_dir = Path(ocr.__file__).parent args = argparse.Namespace( sourcedir=None, sourceimg=image_path, output=output_dir, viz=viz, det_weights=str(base_dir / "model" / "deim-s-1024x1024.onnx"), det_classes=str(base_dir / "config" / "ndl.yaml"), det_score_threshold=0.2, det_conf_threshold=0.25, det_iou_threshold=0.2, simple_mode=False, rec_weights30=str(base_dir / "model" / "parseq-ndl-16x256-30-tiny-192epoch-tegaki3.onnx"), rec_weights50=str(base_dir / "model" / "parseq-ndl-16x384-50-tiny-146epoch-tegaki2.onnx"), rec_weights=str(base_dir / "model" / "parseq-ndl-16x768-100-tiny-165epoch-tegaki2.onnx"), rec_classes=str(base_dir / "config" / "NDLmoji.yaml"), device="cpu", ) ocr.process(args) if __name__ == "__main__": os.makedirs("output", exist_ok=True) run("input.jpg", "output") モデルや設定ファイルのパスは、ocr.__file__(パッケージのインストール先)を起点に解決しています。これにより、venv の場所に依存しません。 ...