Skip to content

クラウド深度推定 API

概要

2D動画をAIで深度推定し、Looking Glass 立体表示用の RGBD SBS 動画に変換するクラウドAPIです。Modal(サーバーレスGPU)上にデプロイ済みで、iPad 等あらゆるデバイスから HTTP POST するだけで利用可能です。

何が変わったか:

Before(従来)After(クラウドAPI化)
実行環境GPU搭載 Windows PC のみどのデバイスからでも
セットアップCUDA + Python 環境構築が必要URLにPOSTするだけ
待機コストPCの電気代ゼロ(使った秒数だけ課金)

システム構成

┌──────────────┐        HTTPS (POST)         ┌──────────────────────────┐
│              │   動画ファイル送信            │  Modal Cloud (自動起動)   │
│  iPad / PC   │ ──────────────────────────→ │                          │
│  (任意端末)  │                              │  NVIDIA A10G GPU (24GB)  │
│              │ ←────────────────────────── │  Video-Depth-Anything    │
│              │   RGBD SBS動画 返却          │  (深度推定AI)             │
└──────────────┘                              └──────────────────────────┘

処理の流れ

  1. クライアント(iPad等)が動画ファイルをAPIにPOST送信
  2. Modal がクラウドGPUコンテナを自動起動(未起動時は約30秒のウォームアップ)
  3. Video-Depth-Anything(VDA-Large)でフレームごとに深度推定
  4. カラー映像と深度マップを左右に並べた「RGBD SBS形式」のMP4を生成
  5. 元動画の音声も自動で引き継ぎ
  6. 完成した動画をレスポンスとして返却
  7. 2分間リクエストがなければコンテナ自動停止(課金停止)

API エンドポイント(デプロイ済み)

用途MethodURL
深度推定POSThttps://soichiro-xse--am3d-vda-api-vdainference-infer.modal.run
モデル予熱POSThttps://soichiro-xse--am3d-vda-api-vdainference-warm.modal.run
死活監視GEThttps://soichiro-xse--am3d-vda-api-health.modal.run

リクエストパラメータ(/infer)

パラメータ必須デフォルト説明
file動画ファイル(MP4, AVI, MOV等)
encodervitlモデルサイズ: vits(小), vitb(中), vitl(大・高品質)
depth_typerelative深度種別: relative(相対) or metric(メートル)
input_size518推論解像度(大きいほど高精度・低速)
max_res1280出力の長辺最大ピクセル
target_fps-1出力FPS(-1 = 元動画と同じ)
p_low / p_high1.0 / 99.0深度の正規化範囲(外れ値除去)
white_neartrue近い物体を白で表現するか

レスポンス

  • Content-Type: video/mp4
  • ヘッダー:
    • X-Processing-Time: サーバー側処理時間(秒)
    • X-Job-Id: ジョブ識別子
    • Content-Disposition: ファイル名付きダウンロード

出力形式(RGBD SBS)

┌─────────────────────────────────────┐
│  カラー映像     │   深度マップ       │
│  (そのまま)     │ (白=近い 黒=遠い)  │
│                 │                    │
│  ← 左半分 →   │   ← 右半分 →      │
└─────────────────────────────────────┘
  • フォーマット: MP4(コーデック mp4v)
  • 幅: 出力解像度 × 2(左右が同じ解像度で横並び)
  • 深度値: 8bit グレースケール(0〜255)、相対深度
  • 音声: 元動画から引き継ぎ(AAC)

AI モデル選定

複数の深度推定AIを検証した結果、Video-Depth-Anything(VDA) を採用しています。

モデル速度品質時間的安定性採用
FlashDepth速い良い不安定(プルプルする)
Depth-Anything-V2とても速い良い不安定(プルプルする)
Video-Depth-Anything普通非常に良い安定

Looking Glass で表示する場合、フレーム間の深度のブレ(プルプル・歪み)が目立つため、時間的整合性を最優先して VDA を選定しました。事前処理版なので速度はあまり関係ありません。

AI補完

Video-Depth-Anything (VDA) は Depth-Anything-V2 をベースに、動画フレーム間の時間的一貫性(Temporal Consistency)を改善したモデルです。隣接フレーム間の深度マップの整合性を保つ仕組みを持っており、動画再生時の「ちらつき」を大幅に低減します。論文・リポジトリは GitHub - DepthAnything/Video-Depth-Anything で公開されています。

インフラ構成

項目仕様
プラットフォームModal(modal.com)— サーバーレスGPUクラウド
GPUNVIDIA A10G(VRAM 24GB)
OSDebian Linux (Python 3.10)
フレームワークPyTorch 2.1.1 + CUDA 12.1
動画処理OpenCV + FFmpeg
モデル保存Modal Volume(永続ストレージ)
タイムアウト1リクエストあたり最大10分
自動停止2分間アイドルでコンテナ自動停止

実測データ

テスト①(2月24日 — 短尺)

項目
入力動画davis_rollercoaster.mp4(1.73MB、数秒)
モデルウォームアップ51.3秒(うちGPU処理22.8秒)
推論処理39.4秒(うちサーバー処理34.5秒)
出力cloud_test_result.mp4(4.19MB、RGBD SBS)
合計コスト$0.07(約10円)

テスト②(2月25日 — 実用長)

項目
動画長約15秒(226フレーム)
クラウド処理時間112秒
コスト約$0.034(≒5円)

Modal ダッシュボード - 関数呼び出し

Modal ダッシュボード - コスト推移

Modal ダッシュボード - 月間コスト

項目
今月の使用量$1.28(約190円)
プランの無料枠$30/月
残クレジット$3.72

コスト

項目単価
NVIDIA A10G GPU$0.000306/秒(≒ 165円/時間)
待機中$0(ゼロ)
無料枠$30/月(Starter プラン)

詳細なコスト早見表は クラウド処理コスト概算 を参照してください。

運用手順

デプロイ(再デプロイ時)

bash
# プロジェクトフォルダで
.venv\Scripts\activate
modal deploy vda_modal_api.py

初回は5〜10分(Docker イメージビルド)。2回目以降は数秒(キャッシュ済み)。

テスト

bash
python test_cloud_api.py

Health → Warm → Infer の3ステップを自動テストします。

監視

スケーリング

  • リクエストが増えれば Modal が自動でコンテナを追加起動(手動設定不要)
  • 1コンテナ1リクエスト制(GPU メモリ保護)
  • Starter プランで最大10 GPU同時起動、Team プラン($250/月)で50 GPU

停止・削除

bash
# APIを停止(コンテナ削除・課金完全停止)
modal app stop am3d-vda-api

# 再デプロイで復旧
modal deploy vda_modal_api.py

セキュリティ

  • エンドポイントはHTTPS
  • 現状は認証なし(URLを知っている人は誰でもアクセス可能)
  • 必要に応じて Modal の認証機能(Bearer Token)を追加可能

Unity (iPad) クライアント実装例

csharp
IEnumerator ConvertVideo(byte[] videoBytes) {
    var form = new WWWForm();
    form.AddBinaryData("file", videoBytes, "input.mp4", "video/mp4");
    form.AddField("encoder", "vitl");
    form.AddField("white_near", "true");

    string url = "https://soichiro-xse--am3d-vda-api-vdainference-infer.modal.run";
    var request = UnityWebRequest.Post(url, form);
    request.timeout = 600;

    yield return request.SendWebRequest();

    if (request.result == UnityWebRequest.Result.Success) {
        byte[] rgbdVideo = request.downloadHandler.data;
        // → Looking Glass表示 or ローカル保存
    }
}

ファイル一覧

ファイル説明
vda_modal_api.pyクラウドAPI本体(Modal デプロイ用)
test_cloud_api.pyAPIテストスクリプト
app/vda_gui_app.pyローカルGUIアプリ(既存・安定)
app/rgbd_player_app.pyRGBDプレイヤー(Unity移行予定)

関連記事


Author: 山本颯一郎 | Sources: 0224クラウド検証, 0225クラウド処理, AM3D_Cloud_API_Report.md AI Enhanced: Claude — 2026-03-06