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 で簡単に発行できます。

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

ad82eca7a99c446c.png

スコープを追加する

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

eff5408ba160aad1.png

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

更新トークンを生成する

[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

認証を取得する

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.

テキスト プロンプトには何でも記述できます。ここでは、猫とコンピュータが一緒になった画像を 1 つの写真に生成します。

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 でテストできます。Google 広告アカウントにあるアセットの種類をクエリしてみましょう。

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 広告に画像をアップロードして画像アセットとして使用する方法