LM StudioとPaddleOCR-VLで構築するローカルOCRツール
30秒でわかる内容解説
開発者cobaltnaが2026年9月30日にGitHubで公開したlocal-ocrは、テキスト専用LLMにオフラインのOCR能力を付与するPythonスクリプトだ。LM Studio上で動作するPaddleOCR-VL-1.5モデルを呼び出し、スキャンPDFや画像から文章や数式、表を抽出する。自作エージェントやコードエディタに組み込めるため、データを送信しないままドキュメント処理を完結できる。ローカル環境で完結する仕組みは、プライバシー重視の技術者に即座に受け入れられる設計となっている。
単一スクリプトでエディタにOCR能力を付与する仕組み
本ツールの核となるのは標準ライブラリのみを用いた単一ファイルのocr.pyである。
外部パッケージのインストール不要な設計は、Python 3.7以上が導入された環境であればすぐに動作する。
テキストLLMがシェルコマンドを実行できる環境に配置すれば、ZCodeやtrae、QoderといったAIエージェントが自動的に呼び出す仕組みだ。
CursorやCopilot、Clineなどのエディタ拡張とも連携可能である。
実行するとLM Studio上のローカルサーバーへ画像データを渡し、認識結果を返す。
出力形式は文章をそのまま残し、数式をLaTeX形式、表をMarkdown形式で整形する。
APIエンドポイントはhttp://127.0.0.1:1234/v1/chat/completionsで、モデルIDはpaddleocr-vl-1.5と固定される。
環境変数で温度やリトライ回数を調整でき、温度は0.45がデフォルトである。
スキャンPDFを処理する際は、まずPyMuPDFでページを150DPIのPNG画像に変換する。
変換した画像をバッチ処理スクリプトでocr.pyに渡せば、ページ順にテキストファイルが生成される。
| タスク | プロンプト |
|---|---|
| General text | OCR: |
| Math formulas | Formula Recognition: |
| Tables | Table Recognition: |
| Charts | Chart Recognition: |
GGUFモデルの弱点を補うガード機能と設定要件
GGUFの視覚モデルを素直に呼び出すと、出力が無限ループしたり文脈途中で切れたりする現象が頻発する。
このスクリプトはモデルの弱点を補うガード機能を実装している。
出力されたテキストに完全に重複するブロックや極端に長い行が含まれると退化判定し、異なる温度とシードで再実行する。
最もクリーンな結果を採用する仕組みだ。
数式が密集したページでは約30%の確率で静かに出力が途切れる。
対策として--passesオプションで2〜3回実行し、最長の結果を採用する。
複数回実行すれば処理時間はN倍になるが、見落としを確実に補完できる。
公式タスクプロンプトにはコロンが含まれるため、OCR:やFormula Recognition:のように正確に入力する必要がある。
処理速度はRTX 4060搭載ノートPCのGPU環境で1ページあたり1〜8秒で完了する。
CPUでも動作するが処理時間は伸びる。
モデルを読み込む際、コンテキストを16k未満に設定すると約1200トークン出力で途中の文章が切り捨てられる。
16384以上の値で再読み込みすればこの問題は解消する。
バッチ処理フローとJSON形式の品質検証
公式GGUFモデルのセットアップには約10分と約1.8GBのディスク容量が必要である。
インストールガイドではmmprojファイルの命名規則や16kコンテキストの設定手順が解説されている。
環境構築が完了すれば、スキャンPDFをPNGに変換するスクリプトと組み合わせるだけでバッチ処理が開始できる。
出力結果の品質はJSON形式で取得できる。
テキストの他にトークン使用量、経過時間、degenerateフラグが含まれる。
エージェントはこのデータ使って結果を検証し、信頼性が低い場合は再度処理を走らせる。
機械可読な形式であるため、シェルスクリプトやPythonパイプラインとも相性が良い。
処理対象のページによっては図形が多い場合にGGUFモデルの出力ループが発生する。
幾何図形や回路図などの空間構造は読み取れず、ラベルや記号のみが抽出される。
表のグリッド構造が崩れる場合も、領域を切り取ってTable Recognition:プロンプトで処理すれば精度が向上する。
接続エラーが発生した場合はLM Studioのローカルサーバーが起動しているか確認する。
エージェント連携の標準化と次世代モデルへの対応
2026年9月30日の公開時点では、公式PaddleOCRパイプラインほど複雑なドキュメントのレイアウト分析には対応していない。
このツールは軽量な生VLモデル呼び出しに特化した位置づけだ。
テキスト主体の文書では高信頼性で動作するが、図表が混在するページでは領域指定が推奨される。
今後の展開として、エージェント側のスキルディレクトリへの配置手順がCROSS_EDITOR.mdで詳細に定義されている。
ZCodeやtrae CNのグローバルフォルダパスが明記され、他のエディタ向けにも設定が公開される予定だ。
モデルのバージョンアップに伴いmmprojファイルの命名規則が変更される可能性がある。
12ページの数学プレプリントで24回のテストを実施した結果、90%以上のキーワード一致率を記録した。
単一ファイルで依存関係がゼロな設計は、限られたリソースでローカル推論を回す環境に適合する。
次世代の視覚モデルがリリースされれば、コンテキスト長や温度パラメータの最適値も更新される見込みだ。
用語の注釈
- GGUF
- llama.cppで使われるモデルファイル形式で、量子化によりメモリ使用量を削減し、ローカルPCでのAI実行を可能にする。(参考:GGUF量子化ってなんだ?〜ローカルLLMを爆速で動かすための ...)
- LaTeX
- 数式や参考文献の書き方に対応したドキュメント記述言語である。(参考:LaTeXとは?読み方・TeXとの違い・使い方を解説)
- Markdown
- プレーンテキストを構造化されたHTMLに変換する軽量マークアップ言語。文章の装飾や階層付けに用いる。(参考:マークダウン (Markdown)記法完全チートシート - Qiita)
- context
- AIが文脈を理解する際、参照できる過去のトークン数までの範囲。(参考:コンテキストとは?意味とビジネスやAI文脈における使い方)