Skip to content

ponpaku/GLM-OCR-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GLM-OCR Server

zai-org/GLM-OCR を使ったローカルOCRサーバーです。
FastAPI + シンプルなWeb UIで、画像/PDFをページ単位でOCRできます。

GLM-OCR UI

主な機能

  • GLM-OCR推論(text / table / formula / extract_json
  • PDF入力(pypdfium2 でページを画像化してOCR)
  • 進捗表示(事前処理中 -> i/nページをOCR中
  • 実行中断(中断API + UIボタン)
  • 改行後処理モード(none / paragraph / compact
  • ページ表示切替(ドロップダウン + ALL合算表示)
  • 表示中結果のコピー(raw はコピー対象外)
  • モデル/キャッシュはプロジェクト配下に保存

動作環境

  • Python 3.10+
  • Windows または Linux/macOS
  • CUDA使用時は対応GPU + ドライバ

クイックスタート

Windows

run.bat

Linux / macOS

chmod +x run.sh
./run.sh

起動後:

  • UI: http://localhost:8000/
  • API Docs: http://localhost:8000/docs

補足:

  • run.sh / run.bat は初回のみ依存関係をインストールし、以後は既存 .venv を再利用します
  • 依存を入れ直したい場合は FORCE_INSTALL=1 を指定して起動します
  • 開発版 transformers が必要な場合のみ USE_TRANSFORMERS_DEV=1 を指定してください
  • TORCH_CHANNEL / INSTALL_LAYOUT_DEPS / USE_TRANSFORMERS_DEV を変更した場合も、反映には FORCE_INSTALL=1 が必要です

.env で設定

プロジェクト直下に .env を置くと、run.sh / run.bat 起動時に読み込みます。

例:

HOST=0.0.0.0
PORT=9000
TORCH_CHANNEL=cu126

主な設定値:

  • HOST: バインドアドレス(既定 0.0.0.0
  • PORT: 起動ポート(既定 8000
  • TORCH_CHANNEL: PyTorch配布チャネル(例 cu126, cpu
  • FORCE_INSTALL: 1 で依存関係を再インストール
  • INSTALL_LAYOUT_DEPS: 既定 01 で PaddleOCR 系の追加インストールを有効化
  • USE_TRANSFORMERS_DEV: 1transformers を GitHub 開発版に置き換え
  • PRELOAD_MODEL: 1 / 00 のとき起動時にモデルを事前ロードせず、初回推論時にロード
  • CORS_ALLOW_ORIGINS: カンマ区切りの許可Origin一覧。未指定時は localhost 系のみ許可
  • PROGRESS_TTL_SECONDS: 実行中 progress 情報の保持秒数
  • TERMINAL_PROGRESS_TTL_SECONDS: done / error / canceled 状態の保持秒数

依存関係

アプリ本体の依存定義は requirements.txt にあります。
PyTorch は環境依存のため launcher / scripts/install.* 側で TORCH_CHANNEL に応じてインストールします。

  • 通常: PyPI の transformers
  • 必要時のみ: USE_TRANSFORMERS_DEV=1 で GitHub 開発版 transformers
  • レイアウト依存: 既定では入れません。必要な場合だけ INSTALL_LAYOUT_DEPS=1

モデル保存先

モデルキャッシュはプロジェクト内に保存されます。

  • models/hf_cache
  • models/hf_home

環境変数 GLM_MODEL_CACHE で明示可能です。

API

GET /api/status

CUDA可否やモデルID、キャッシュディレクトリを返します。

POST /api/analyze

マルチパートフォームでOCR実行。

フォーム項目:

  • file (required): 画像/PDF
  • device: auto / cuda / cpu
  • dpi: PDFレンダリングDPI
  • task: text / table / formula / extract_json
  • linebreak_mode: none / paragraph / compact
  • schema: task=extract_json のとき必須
  • max_new_tokens
  • temperature
  • use_layout: true / false
  • layout_backend: ppdoclayoutv3 / none
  • reading_order: auto / ltr_ttb / rtl_ttb / vertical_rl
  • region_padding: layout OCR 時の領域余白
  • max_regions: 1ページあたりの領域処理上限
  • region_parallelism: layout OCR 時の並列度。現状は 1 推奨
  • include_layout_preview: layout preview画像をレスポンスに含めるか
  • request_id(任意。未指定時は自動採番)

補足:

  • task=extract_json は現状 use_layout=true をサポートしていません。指定すると 400 を返します
  • include_layout_preview=true は便利ですが、多ページPDFではレスポンスが大きくなります
  • region_parallelism を上げても、モデル生成自体は安全のため直列化されています
  • linebreak_mode は主に text タスク向けです。table / formula / extract_json では出力保全を優先します

GET /api/progress/{request_id}

進捗状態を取得します。 一定時間経過後の古い進捗状態は自動削除されます。

POST /api/cancel/{request_id}

中断要求を送信します。
生成中はトークン生成ステップ単位で停止判定します。

ライセンス

  • このプロジェクト: LICENSE(MIT)
  • サードパーティ情報: THIRD_PARTY_NOTICES.md