サーバー¶
YomiToku-Pro は REST API サーバーとして起動し、HTTP 経由でドキュメント解析を実行できます。
セットアップ¶
インストール¶
環境変数¶
| 変数名 | 必須 | 説明 |
|---|---|---|
YOMITOKU_LICENSE_KEY |
Yes | ライセンスキー |
YOMITOKU_SECRET_KEY |
Yes | シークレットキー |
YOMITOKU_DEVICE_TOKEN |
No | オフライン認証用デバイストークンファイルパス |
YOMITOKU_ENV |
No | 環境名 |
サーバー起動¶
Document Analyzer サーバー¶
Table Semantic Parser サーバー¶
オプション¶
| オプション | デフォルト | 説明 |
|---|---|---|
--host |
0.0.0.0 |
バインドするホスト |
--port |
8000 |
バインドするポート |
--device |
自動検出 | 使用デバイス (cuda, cpu) |
-l, --lite |
- | 軽量モデルを使用して高速に推論(CPU環境では自動的に有効) |
--request-timeout |
600 |
1リクエストあたりの処理タイムアウト(秒)。超過時は HTTP 504 を返却 |
--max-pages |
無制限 | 1リクエストで処理可能な PDF ページ数の上限。超過時は HTTP 400 を返却 |
--max-body-size-mb |
100 |
1リクエストのボディサイズ上限(MB)。超過時は HTTP 413 を返却 |
--max-long-side |
無制限 | 1ページ/画像あたりの長辺の最大ピクセル数。超過時は HTTP 400 を返却 |
--max-in-flight |
8 |
同時受付リクエスト数の上限。超過時は HTTP 503 を返却 |
並列実行とワーカー数について
GPU リソース競合を避けるため、サーバーは1プロセス内で asyncio.Lock を用いて
推論処理を直列化しています。このロックはプロセスを跨がないため、サーバーは
常に 1ワーカー(workers=1) で起動されます。スループットを上げる場合は、
複数プロセス(複数 GPU またはコンテナ)で水平スケールしてください。
リクエストの公平性
GPU ロックは ページ単位で release/再取得 されるため、大規模 PDF 処理中でも
後続の小さなリクエストが各ページの間に割り込めます(FIFO 順)。
また --max-in-flight で同時受付数を制限することで、滞留メモリと
待機時間の上限を制御できます。
HTTP ステータスコード¶
/invocations エンドポイントが返すステータスコード一覧:
| コード | 意味 | 発生条件 |
|---|---|---|
| 200 | OK | 解析成功 |
| 400 | Bad Request | 不正なファイル形式、--max-pages / --max-long-side 超過 |
| 413 | Payload Too Large | リクエストボディが --max-body-size-mb を超過 |
| 500 | Internal Server Error | サーバ内部エラー |
| 503 | Service Unavailable | 同時受付数 (--max-in-flight) 超過 |
| 504 | Gateway Timeout | 処理時間が --request-timeout を超過 |
| 507 | Insufficient Storage | GPU メモリ不足(エラーコード 5007 GPU_OUT_OF_MEMORY) |
API エンドポイント¶
GET /ping¶
ヘルスチェック用エンドポイント。
レスポンス:
POST /invocations¶
ドキュメント画像または PDF を解析します。
リクエスト:
Content-Typeヘッダーにファイル形式を指定- リクエストボディにバイナリデータを送信
サポートする Content-Type:
application/pdfimage/jpegimage/pngimage/tiff
リクエスト例:
curl -X POST http://localhost:8000/invocations \
-H "Content-Type: image/jpeg" \
--data-binary @sample.jpg
curl -X POST http://localhost:8000/invocations \
-H "Content-Type: application/pdf" \
--data-binary @document.pdf
クライアント CLI¶
yomitoku_client コマンドを使用すると、サーバーにファイルを送信し、処理結果を指定フォーマットでエクスポートできます。
使い方¶
yomitoku_client document_analyzer <入力ファイル> [オプション]
yomitoku_client table_semantic_parser <入力ファイル> [オプション]
オプション¶
| オプション | デフォルト | 説明 |
|---|---|---|
--url |
http://localhost:8000 |
サーバーの URL |
-f, --format |
json |
出力形式 (json, csv, html, md, dict)。カンマ区切りで複数指定可 |
-o, --outdir |
results |
出力ディレクトリ |
--encoding |
utf-8 |
出力ファイルのエンコーディング |
--combine |
- | PDF の全ページを1つのファイルにマージして出力 |
--figure |
- | 出力に図を含める |
--figure_letter |
- | 図内の文字も出力に含める |
--figure_width |
200 |
出力する図の幅(ピクセル) |
--figure_dir |
figures |
図画像の保存ディレクトリ |
-v, --vis |
- | 解析結果の可視化画像(レイアウト・OCR)を保存 |
--vis_dir |
"" |
可視化画像の保存サブディレクトリ(--outdir 配下) |
--font_path |
同梱フォント | OCR 可視化用フォントファイルのパス |
--ignore_line_break |
- | 出力から改行を除去 |
--dpi |
200 |
PDF 読み込み時の DPI |
--pages |
全ページ | 処理するページ指定(例: 1,2,5-10) |
使用例¶
# Document Analyzer: JSON 形式でエクスポート
yomitoku_client document_analyzer sample.jpg -f json -o results
# Document Analyzer: Markdown と HTML を同時にエクスポート
yomitoku_client document_analyzer document.pdf -f md,html -o results
# Document Analyzer: PDF の全ページを1つの Markdown にマージ
yomitoku_client document_analyzer document.pdf -f md --combine -o results
# Document Analyzer: 図を含めて Markdown でエクスポート
yomitoku_client document_analyzer sample.jpg -f md --figure -o results
# Document Analyzer: 可視化画像(レイアウト・OCR)も保存
yomitoku_client document_analyzer sample.jpg -f json -v -o results
# Table Semantic Parser: JSON と dict でエクスポート
yomitoku_client table_semantic_parser form.jpg -f json,dict -o results
# 別のホスト・ポートに接続
yomitoku_client document_analyzer sample.jpg --url http://192.168.1.100:8080
Document Analyzer の出力形式¶
| 形式 | 説明 |
|---|---|
json |
解析結果の完全な JSON |
csv |
表構造を CSV に変換 |
html |
段落・表を含む HTML ドキュメント |
md |
Markdown 形式 |
Table Semantic Parser の出力形式¶
| 形式 | 説明 |
|---|---|
json |
解析結果の完全な JSON |
dict |
テーブルのセルをキー・値の辞書形式に変換した JSON |
クライアント CLI のエラーコード¶
| コード | エラー名 | 説明 | 対処 |
|---|---|---|---|
| 7001 | CLIENT_FILE_NOT_FOUND |
入力ファイルが見つからない | ファイルパスを確認してください |
| 7002 | CLIENT_UNSUPPORTED_INPUT_FORMAT |
対応していない入力ファイル形式 | JPG, PNG, BMP, TIFF, PDF のいずれかを使用してください |
| 7003 | CLIENT_UNSUPPORTED_FILE_FORMAT |
Content-Type にマッピングできない拡張子 | 対応する拡張子のファイルを使用してください |
| 7004 | CLIENT_CONNECTION_ERROR |
サーバーに接続できない | サーバーが起動しているか、URL が正しいか確認してください |
| 7005 | CLIENT_TIMEOUT |
サーバーからの応答がタイムアウト(60秒) | サーバーの負荷状況を確認してください |
| 7006 | CLIENT_REQUEST_FAILED |
ネットワークエラーによりリクエスト失敗 | ネットワーク接続を確認してください |
| 7007 | CLIENT_SERVER_ERROR |
サーバーがエラーステータスを返した | サーバーのログを確認してください(400: リクエスト不正、500: 内部エラー) |
| 7008 | CLIENT_INVALID_JSON_RESPONSE |
サーバーの応答が不正な JSON | サーバーのバージョン・状態を確認してください |
| 7009 | CLIENT_EMPTY_RESULT |
サーバーの応答に解析結果が含まれていない | 入力ファイルの内容やサーバーのログを確認してください |
API ドキュメント¶
サーバー起動中は、以下の URL で API ドキュメントを参照できます。
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
サーバーを起動せずに静的な API リファレンスを確認する場合は以下を参照してください。
OpenAPI スキーマの再生成¶
API の定義を変更した場合は、以下のスクリプトで docs/ 配下の OpenAPI JSON を更新してください。
Docker での利用¶
Docker を利用する場合は、まずリポジトリを clone してください。
1. リポジトリの clone¶
2. 環境変数の設定¶
.env ファイルを docker/ ディレクトリに作成するか、環境変数を直接設定します。
3. ビルド & 起動¶
各プラットフォームに対して Document Analyzer (_da なし) と Table Semantic Parser (_tsp) のサービスが用意されています。
| サービス名 | Dockerfile | プラットフォーム | Analyzer | ポート |
|---|---|---|---|---|
arm64_cpu |
Dockerfile.cpu |
linux/arm64 | Document Analyzer | 8000 |
arm64_cpu_tsp |
Dockerfile.cpu |
linux/arm64 | Table Semantic Parser | 8001 |
amd64_cpu |
Dockerfile.cpu |
linux/amd64 | Document Analyzer | 8000 |
amd64_cpu_tsp |
Dockerfile.cpu |
linux/amd64 | Table Semantic Parser | 8001 |
amd64_gpu |
Dockerfile.gpu |
linux/amd64 | Document Analyzer | 8000 |
amd64_gpu_tsp |
Dockerfile.gpu |
linux/amd64 | Table Semantic Parser | 8001 |
ARM64 CPU (Apple Silicon):
# Document Analyzer のみ
docker compose up arm64_cpu --build
# Table Semantic Parser のみ
docker compose up arm64_cpu_tsp --build
# 両方同時起動
docker compose up arm64_cpu arm64_cpu_tsp --build
AMD64 CPU:
AMD64 GPU (NVIDIA):
Note
GPU サービス (amd64_gpu, amd64_gpu_tsp) は NVIDIA CUDA ベースイメージを使用するため、AMD64 環境でのみ動作します。ARM64 や GPU なしの環境では CPU サービスを利用してください。
デバイストークンの設定(オフライン認証)¶
オフライン環境でデバイストークンを使用して認証する場合は、Dockerfile を直接編集する必要があります。
手順:
- デバイストークンファイル (
device_token.txt) をリポジトリルートに配置します - 使用する Dockerfile (
docker/Dockerfile.gpuまたはdocker/Dockerfile.cpu) を開き、末尾付近のコメントアウトされた行を有効化します
# 変更前(コメントアウト状態)
#COPY device_token.txt ${server_dir}/device_token.txt
#ENV YOMITOKU_DEVICE_TOKEN=${server_dir}/device_token.txt
#ENV YOMITOKU_ENV=${ENVIRONMENT}
# 変更後(コメントを外す)
COPY device_token.txt ${server_dir}/device_token.txt
ENV YOMITOKU_DEVICE_TOKEN=${server_dir}/device_token.txt
ENV YOMITOKU_ENV=production
YOMITOKU_ENV には使用する環境名を設定してください。
カスタムコマンド¶
ANALYZER_TYPE ビルド引数を使って、ビルド時に Analyzer の種類を切り替えることもできます。