2025年8月26日火曜日

GoogleのVirtual Try-On APIを呼び出すAPEXアプリケーションを作成する

GoogleよりVirtual Try-Onというモデルがリリースされています。日本語ではバーチャルでお試しAPIと、なんとなく楽しそうな名前になっています。最近MCPサーバーばかりでAPEXアプリケーションを作っていなかったので、Virtual Try-On APIを呼び出すアプリを作ってみました。

作成したアプリは以下のように動作します。


作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/google-virtual-try-on.zip

Virtual Try-On APIは、ブラウザにasapさんによる「Virtual Try-On APIをPythonで試す方法」の記事がお勧めされたので知りました。Oracle APEX(正確にはOracle Database)でPythonは実行できないので、認証も含めてすべてPL/SQLで記述する必要があります。

Googleのサービスを呼び出すためのAPI認証については、以前の記事「GoogleのGemini APIをOracle APEXから呼び出す」でパッケージUTL_CRED_GOOGLEを紹介しています。

Virtual Try-OnはVertex AIのサービスのようなので、プロジェクトにサービス・アカウントを作ってAPI認証を行ないます。サービス・アカウントに作成した秘密キーをダウンロードし、その秘密キーよりAPI認証に使用するトークンを生成します。

以下は、秘密キーからトークンを生成してAPEXのWeb資格証明として登録するスクリプトです。APEXアプリケーションや公開するスクリプトに秘密キーを埋め込むと手違いで公開してしまうこともありえるので、手元のPCからSQLclやsqlplusでAPEXのワークスペース・スキーマに接続して実行することを想定しています。


作成したAPEXアプリケーションですが、ホーム・ページにすべての機能を実装しています。

Google Virtual Try-On APIに送信する画像を選択するページ・アイテムとして、P1_PERSON(人物の画像)とP1_PRODUCT(服の画像)を作成しています。タイプイメージ・アップロードストレージタイプ表APEX_APPLICATION_TEMP_FILESとします。選択した画像を送信せずにプレビューするため、記事「画像ビューワーのアプリを改良する」で紹介している動的アクションを実装しています。

ボタンTRY_ONをクリックすると、ページ・アイテムP1_PERSONP1_PRODUCTに設定した画像がサーバーに送信されます。

サーバーでは以下のコードを実行し、GoogleのVirtual Try-On APIを呼び出します。呼び出しに使用した人物の画像、服の画像およびお試しの結果である画像は、APEXコレクションに保存します。


処理結果はページ・アイテムP1_PERSON_IMAGEP1_PRODUCT_IMAGEP1_TRY_ONに表示します。タイプとしてイメージの表示を選択し、設定基準SQLで戻されたBLOB列SQL文として以下を記述します。c001の条件はPERSONPRODUCTTRYONのどれかになります。

select blob001 from apex_collections where collection_name = 'VIRTUAL_TRY_ON' and c001 = 'PERSON'


作成したアプリケーションの説明は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。