コンテンツにスキップ

Studio API接続設定

YomiToku-Proには、YomiToku Studioとの接続に必要な認証、CORS、Request IDの仕組みが実装されています。

Studio APIは、Document Analyzer APIおよびTable Semantic Parser APIとは別のプロセスとして起動します。文書解析と帳票解析の両方を1つの接続先から利用できます。

yomitoku_server studio --host 127.0.0.1 --port 8000
エンドポイント 処理
GET /ping 死活確認
GET /studio/v1/capabilities 対応機能と制限値の取得
POST /studio/v1/document/analyze 文書OCR・レイアウト解析
POST /studio/v1/form/analyze 帳票・表解析(?mode=ocr_onlyで文字検出・認識のみ)
POST /studio/v1/ocr/recognize-regions 指定文字領域の部分再OCR(追加計上なし)
POST /studio/v1/form/analyze-regions 指定表領域のセル・構造再解析(追加計上なし)

モデルと軽量モード

Studioサーバーは、Document Analyzer・Table Semantic Parserの各サーバーと同じモデル選択オプションで起動できます。指定は文書解析・帳票解析の両パイプラインに適用され、Text DetectorとText Recognizerは2つのパイプラインで共有されます。

# CPU向けの軽量モデルで起動(CPU環境では --lite は自動的に有効)
yomitoku_server studio --lite --host 127.0.0.1 --port 8000

# モデル名を明示して起動
yomitoku_server studio --tr_name parseqv4-large --td_name dbnetv2_1 --host 127.0.0.1 --port 8000
オプション 説明
-l, --lite 軽量モデル(parseqv4-tiny 動的幅認識)で高速に推論。CPUでは検出もONNXで実行
--tr_name テキスト認識モデル名(例: parseqv4, parseqv4-large, parseqv4-tiny)。デフォルト/--liteの認識モデルより優先
--td_name テキスト検出モデル名(例: dbnetv2_1, dbnet)。デフォルトの検出モデルより優先

起動オプションの全一覧はAPIサーバーを参照してください。

APIキーを設定する

通常はYOMITOKU_STUDIO_API_KEYSにStudio用APIキーを設定します。

export YOMITOKU_STUDIO_API_KEYS="studio-user:0123456789abcdef"
yomitoku_server studio --host 127.0.0.1 --port 8000

StudioからのAPI呼び出しには、Proライセンスキーとは別のAPIキーを使用します。YOMITOKU_LICENSE_KEYYOMITOKU_SECRET_KEYはProサーバー内だけに配置してください。

flowchart LR
    B[YomiToku Studio] -->|Bearer APIキー| P[YomiToku-Pro API]
    P -->|ライセンス確認・利用量| L[ライセンスサーバー]
    K[Proサーバーの環境変数・Secret<br/>ライセンスキー/シークレットキー] -->|Proプロセスだけが読み込む| P

APIキーはProサーバー側とStudio側の接続設定にそれぞれ保存します。localhostや社内LAN内で利用する場合でも、意図しないクライアントからのアクセスを防ぐため、認証を有効にしてください。

キーの形式

複数のキーはカンマで区切ります。

export YOMITOKU_STUDIO_API_KEYS="team-a:0123456789abcdef,team-b:abcdefghijklmnop"

name:は省略できます。省略したキーにはkey-1key-2のような名前が付きます。

export YOMITOKU_STUDIO_API_KEYS="0123456789abcdef,abcdefghijklmnop"
  • キー:16文字以上。使用できる文字は英数字、_-
  • 名前:1~32文字。使用できる文字は英数字、_-

形式が不正な場合や名前が重複した場合、サーバーは起動しません。

一時キーを生成する

環境変数を設定せずに対話端末から起動すると、一時キーが端末に一度だけ表示されます。キーはサーバー停止時に失効します。

非対話環境では、--api-key-fileに生成したキーの出力先を指定できます。このオプションは、既存キーの読み込みには使用できません。

yomitoku_server studio \
  --host 127.0.0.1 \
  --api-key-file /run/yomitoku/studio-api-key

ファイルはパーミッション0600で新規作成されます。既存ファイルは上書きしないため、同じパスが存在すると起動エラーになります。固定キーを継続利用する場合はYOMITOKU_STUDIO_API_KEYSを使用してください。

Docker、systemdなどの非対話環境でキーを設定しない場合、/pingは利用できますが、/studio/v1/*は無効になります。Document Analyzer API・Table Semantic Parser APIの起動状態には影響しません。

認証を無効にする

開発環境で認証を無効にする場合は--no-authを指定します。

yomitoku_server studio --host 127.0.0.1 --no-auth

Danger

--no-authは、127.0.0.1などのloopbackアドレスにbindした開発環境でのみ使用し、LANやインターネットへ公開しないでください。

認証ヘッダー

Studio APIではBearerヘッダーを使用します。

Authorization: Bearer 0123456789abcdef

APIキーが指定されていない場合、または一致しない場合はHTTP 401、Studio APIが無効な場合はHTTP 404になります。

CORSを設定する

ブラウザ版StudioからPro APIへ直接接続する場合は、StudioのOriginを許可します。

yomitoku_server studio \
  --cors-origin https://studio.example.com

複数のOriginを許可する場合は、--cors-originを繰り返し指定します。

yomitoku_server studio \
  --cors-origin https://studio-a.example.com \
  --cors-origin https://studio-b.example.com

環境変数でも設定できます。

export YOMITOKU_CORS_ORIGINS="https://studio-a.example.com,https://studio-b.example.com"
sequenceDiagram
    participant B as Studio(ブラウザ)
    participant P as YomiToku-Pro API
    B->>P: OPTIONS(接続可否の確認)
    P-->>B: 許可Origin・Method・Header
    B->>P: Authorization + 文書
    P-->>B: 解析レスポンス

Originはスキーム、ホスト、ポートの組み合わせです。https://studio.example.comhttp://studio.example.comは別Originとして扱われます。CORSは未設定の場合は無効です。ワイルドカード*は指定できません。

CORSはブラウザ向けのアクセス制御であり、APIキー認証とは別に設定します。環境によってはブラウザのPrivate Network Access制限により、CORSに加えてHTTPSや同一Origin Proxyが必要になる場合があります。

Request IDを確認する

Pro APIはすべてのHTTPレスポンスにX-Request-IDを付与します。Studio、Access Proxy、Proの間でリクエストを追跡するために使用します。

sequenceDiagram
    participant S as Studio
    participant P as Access Proxy(任意)
    participant A as YomiToku-Pro API
    S->>P: X-Request-ID: client-request-123
    P->>A: 同じIDを転送
    A-->>P: X-Request-ID: client-request-123
    P-->>S: X-Request-ID: client-request-123
  • 有効なX-Request-IDを送信した場合は、レスポンスにも同じ値を返します
  • X-Request-IDが未指定の場合、または形式が不正な場合はUUIDを生成します
  • 使用できる文字は英数字、._-で、最大128文字です
  • CORSプリフライトや認証エラーにも付与されます

障害やエラーについて問い合わせる際は、レスポンスのX-Request-IDを共有してください。Request IDはログ追跡専用で、認証や冪等性制御には使用されません。

解析リクエスト

解析APIはJPEG、PNG、TIFFの画像を1リクエストにつき1枚受け取ります。PDFは受け取りません。X-Yomitoku-Operation-IDX-Yomitoku-Document-IDX-Yomitoku-Page-IDを必ず指定してください。同じOperation IDを同じリクエストで再送しても二重計上されません。別のリクエストへ使い回すとHTTP 409を返します。

curl -X POST http://127.0.0.1:8000/studio/v1/document/analyze \
  -H "Authorization: Bearer 0123456789abcdef" \
  -H "Content-Type: image/png" \
  -H "X-Yomitoku-Operation-ID: operation-1" \
  -H "X-Yomitoku-Document-ID: document-1" \
  -H "X-Yomitoku-Page-ID: page-1" \
  --data-binary @page.png

レスポンスは解析結果と、後続の部分解析で使用するanalysis_idを返します。契約から残量を取得できる場合だけremaining_pagesも含まれます。Request IDはレスポンス本文ではなくX-Request-IDヘッダーで確認します。

{
  "analysis_id": "opaque-server-issued-id",
  "remaining_pages": 4213,
  "rotation": 90,
  "result": {}
}

解析前にページの回転(90 / -90 / 180度)を自動で検出・補正します。補正した場合はレスポンスにrotation(適用した角度)が含まれ、resultの座標は補正後の画像を基準とします(±90度では幅と高さが入れ替わります)。補正がない場合、rotationは省略されます。部分解析API(recognize-regions / analyze-regions)には、送信済みの元画像・補正後の画像のどちらを送っても構いません。元画像を送った場合はサーバーが記録済みの角度で補正してから処理します(領域座標は常に補正後の画像基準で指定します)。

帳票解析ではパスを/studio/v1/form/analyzeへ変更します。テンプレート適用時は?mode=ocr_onlyを指定すると、独立OCRパイプラインで回転補正、文字検出、文字認識だけを実行します。補正した角度と座標の扱いは通常の解析と同じです。この処理も全体解析として計上され、新しいanalysis_idを返します。

GET /studio/v1/capabilitiesは、上限のあるsubscription契約で利用状況を取得できる場合にusage_limitusage_countを返します。Studioの接続設定では、この値を上限・現在利用数・残数のメーターとして表示します。値はライセンスサーバー側の集計遅延を含む概算です。

部分再OCRは/studio/v1/ocr/recognize-regions、表領域再解析は/studio/v1/form/analyze-regionsを使用します。詳しいリクエスト形式はReDocを参照してください。

モデル共有と利用量計上

Studioプロセスでは、Document AnalyzerとTable Semantic Parserが同じText DetectorとText Recognizerを使用します。Document固有・帳票固有のモデルは共有しません。別プロセスで起動した他のAPIサーバーともモデルを共有しません。

利用量は内部モデルの呼び出し回数ではなく、全体解析APIの成功単位で確定します。

操作 計上
文書解析の成功 1
帳票解析の成功 1
解析失敗 0
同じOperation ID・同じ入力の再送 追加0
同じOperation IDを別入力や別操作へ使用 推論前にHTTP 409、追加0
outrightライセンス 0

明示的なUsage Scope内では従来のモジュール単位計上を抑止するため、共有OCRモデルを複数回呼び出しても二重計上されません。重複記録はプロセスメモリに保持するため、サーバー再起動後をまたぐ重複排除は保証されません。