Vertex AI から画像を生成して Google 広告にアップロードする方法

1. はじめに

作成するアプリの概要

この Codelab では、Vertex AI を使用して画像を生成し、Google 広告に送信して、アセットをキャンペーンの画像アセットとして使用する方法を学びます。

学習内容

  • GCP、Vertex AI から画像を生成する方法
  • Google 広告に画像をアップロードする方法
  • Google 広告での使用方法

必要なもの

  • Google 広告アカウント
  • GCP アカウント

2. Google 広告の認証情報を取得する

この部分は、Google 広告から画像アセットを取得するために必要です。Colab から Google 広告にアクセスするには、適切な認証情報が必要です。

[認証情報を作成] -> [OAuth クライアント ID を作成] -> [ウェブ アプリケーション]

Google 広告を接続するための適切な認証情報を取得するには、Cloud 認証情報にアクセスする必要があります。

同意画面を構成していない場合は、まず同意画面を設定します。

  1. ユーザータイプ: 外部
  2. 公開ステータス: 製品版

6ecf963c5957379d.png

[承認済みのリダイレクト URI] に次の URI を追加します

以下の URI を以下のスクリーンショットのように入力します。

https://developers.google.com/oauthplayground

b5d054a6cac40869.png

クライアント ID とクライアント シークレットをコピーする

クライアント ID とクライアント シークレットを取得できます。

c8578bf54ade7cee.png

3. 更新トークンを生成する

OAuth Playground へのアクセス

一時的な更新トークンは、OAuth Playground で簡単に発行できます。

設定に移動し、[Use your own OAuth credentials] をオンにします。前の章で OAuth クライアント ID とクライアント シークレットを取得したら、対応するテキスト ボックスに入力します。ace79f71603a922.png

ad82eca7a99c446c.png

スコープを追加する

以下の領域に https://www.googleapis.com/auth/adwords スコープを追加できます。

eff5408ba160aad1.png

[API を承認] をクリックすると、次の画面が表示されます。

更新トークンを生成

[Exchange authorization code for tokens] をクリックすると、更新トークンが表示されます。

e8c6860d61ad73fd.png

4. コードを実行するための Colab を準備する

Colab は、Python に付属している便利なコード ノートブックです。デフォルトのオプションでは、かなり大きなコンピューティング能力が提供されます。任意のプラットフォームを使用して、Google Cloud Vertex AI の REST API を呼び出すこともできます。

https://colab.research.google.com/ にアクセスしてご利用ください。

[ファイル] → [新しいメモ] に移動して、新しいコードの作成を開始します。

6b95020b3d3369ae.png

[新しいノートブック] をクリックすると、新しいシートが表示されます。

5. Google Cloud Vertex AI を介して画像を生成する

ライブラリをインポートする

!pip install requests google-ads

まず、Google 広告と API リクエストのライブラリをインストールします。ライブラリのインストール後にランタイムを再起動する必要があります。

必要なライブラリを読み込むこともできます。

import requests
import json
import base64

from google.ads import googleads
from google.colab import auth
from IPython.display import display, Image

Get Authentication

Google アカウントの承認を求められます。

auth.authenticate_user()

access_token = !gcloud auth print-access-token
access_token = access_token[0]

認証が完了すると、Google Cloud APIs を呼び出す準備が整います。

6. Vertex AI から画像を生成する

プロンプトと POST リクエストを準備する

まず、Google Cloud プロジェクト ID が必要です。これは Google Cloud から取得できます。テキスト プロンプトが必要です。必要な画像の数を設定することもできます。その他のオプションについては、公式のドキュメントをご覧ください。

PROJECT_ID = 'abcdefg' # Your GCP project ID
TEXT_PROMPT = 'cat computer' # Your prompt goes here.
IMAGE_COUNT = 4 # You will get 4 images as a result.

テキスト プロンプトには、任意のテキストを入力できます。ここでは、猫とコンピュータが一緒に写っている画像を生成します。

url = f"https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/imagegeneration:predict"

headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json; charset=utf-8"
}

data = {
    "instances": [
        {
            "prompt": TEXT_PROMPT
        }
    ],
    "parameters": {
        "sampleCount": IMAGE_COUNT
    }
}

画像生成をリクエストする

JSON の準備ができたら、画像生成をリクエストできます。一般的な HTTP リクエストは次のとおりです。

response = requests.post(url, headers=headers, data=json.dumps(data))

if response.status_code == 200:
    response_data = response.json()

    for prediction in response_data.get('predictions', []):
        image_data = base64.b64decode(prediction['bytesBase64Encoded'])
        display(Image(data=image_data))
else:
    print("Request failed:", response.status_code, response.text)

数秒待つと、結果が表示されます。とても簡単です。

dec38d2d3f7faab8.png

7. Google 広告に接続する

Google 広告アカウントに接続する

Google 広告のデベロッパー トークンが必要です。基本または標準のデベロッパー トークンを申請できますが、テスト目的であればテスト トークンも利用できます。クライアント センター アカウントに移動します。[ツールと設定] タブに API センターが表示されます。[API] セクションにトークンが表示されます。

前の章で、クライアント ID、クライアント シークレット、更新トークンが準備できているはずです。

credentials = {
    "developer_token": "ABCDEFG",
    "client_id": "123456789012-abcd1234.apps.googleusercontent.com",
    "client_secret": "GOCSPX-abcd1234-abcd1234-abcd1234",
    "refresh_token": "1//abcdefghijklmnopqrstuvwxyz",
    "use_proto_plus": True
}

認証情報を設定したら、GoogleAdsService API を読み込むことができます。お客様 ID は通常「xxx-xxxx-xxx」の形式ですが、「-」は削除する必要があります。

client = googleads.client.GoogleAdsClient.load_from_dict(credentials, version='v13')
googleads_service = client.get_service("GoogleAdsService")
customer_id = "1234567890"

Google 広告アカウントのクエリ

これで、googleads_service を使用してテストできるようになりました。広告アカウントにどのようなアセットがあるかをクエリしてみましょう。

query = (
'''
SELECT
    ad_group_ad.ad.id,
    ad_group_ad.ad.app_ad.headlines,
    ad_group_ad.ad.app_ad.descriptions,
    ad_group_ad.ad.app_ad.images
FROM ad_group_ad
''')
response = googleads_service.search(customer_id=customer_id, query=query)
for googleads_row in response:
    print(googleads_row)

Google 広告アカウントのアセットのリストが JSON 形式で表示されます。次のようなメッセージが表示された場合

ad_group_ad {

`images { asset: "customers/1234567890/assets/09876543210" }` 

}

8. Google 広告に画像アセットをアップロードする

アップロード

最後のステップでは、生成されたアセットを Google 広告にアップロードします。

for prediction in response_data.get('predictions', []):
    image_base64 = prediction['bytesBase64Encoded']

    image_bytes = base64.b64decode(image_base64)

    asset_service = client.get_service('AssetService')
    asset_operation = client.get_type('AssetOperation')

    asset = asset_operation.create
    asset.type_ = client.enums.AssetTypeEnum.IMAGE
    asset.image_asset.data = image_bytes
    asset.name = "cats"

    asset_service.mutate_assets(customer_id=customer_id, operations=[asset_operation])

数秒後に、Google 広告のフロントエンドでアップロードしたアセットを確認できるようになります。スクリーンショットの例を次に示します。

7f2fb6063e5ae675.png

9. 完了

既存の画像から美しい画像アセットを生成できました。

学習した内容

  • 生成 AI(Vertex AI)で画像アセットを生成する方法
  • Google 広告に画像をアップロードして画像アセットとして使用する方法