1. はじめに
作成するアプリの概要
この Codelab では、Vertex AI を使用して画像を生成し、Google 広告に送信して、キャンペーンで画像アセットとして使用できるようにする方法を学びます。
学習内容
- GCP、Vertex AI から画像を生成する方法
- Google 広告に画像をアップロードする方法
- Google 広告での使用方法
必要なもの
- Google 広告アカウント
- GCP アカウント
2. Google 広告のクルデンシャルを取得する
この部分は、Google 広告から画像アセットを取得するために必要です。Colab から Google 広告にアクセスするには、適切な認証情報が必要です。
認証情報を作成する ->「OAuth クライアント ID」を作成する->ウェブ アプリケーション
Google 広告を接続するための適切な認証情報を取得するには、Cloud の認証情報にアクセスする必要があります。
同意画面を設定していない場合は、まず同意画面を設定してください。
- ユーザータイプ: 外部
- 公開ステータス: 製品版
[承認済みのリダイレクト URI] に次の URI を追加します。
以下のスクリーンショットのように、以下の URI を入力します。
https://developers.google.com/oauthplayground
クライアント ID とクライアント シークレットをコピーする
クライアント ID とクライアント シークレットを取得できます。
3. 更新トークンを生成
OAuth Playground へのアクセス
一時的な更新トークンは、OAuth Playground で簡単に発行できます。
設定に移動し、[User your own OAuth credentials] チェックボックスをオンにします。前の章で取得した OAuth クライアント ID とクライアント シークレットを、対応するテキスト ボックスに入力します。
スコープを追加する
下の領域にスコープ https://www.googleapis.com/auth/adwords を追加できます。
[Authorize APIs] をクリックすると、次の画面が表示されます。
更新トークンを生成する
[Exchange authorization code for tokens] をクリックすると、更新トークンが表示されます。
4. コードを実行するために Colab を準備する
Colab は、Python に付属の便利なコード ノートブックです。デフォルトのオプションでは、十分なコンピューティング能力が得られます。任意のプラットフォームを使用して、Google Cloud Vertex AI の REST API を呼び出すこともできます。
https://colab.research.google.com/ にアクセスしてご利用ください。
[ファイル] → [新しいメモ] に移動して、新しいコードの記述を開始します。
[新しいノートブック] をクリックすると、新しいシートが表示されます。
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)
数秒待つと結果が表示されます。とてもシンプルです。
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 広告の管理画面で確認できるようになります。こちらがサンプルのスクリーンショットです。
9. 完了
これで、既存の画像から美しい画像アセットを生成できました。
学習した内容
- 生成 AI を使用して画像アセットを生成する方法(Vertex AI)
- Google 広告に画像をアップロードして画像アセットとして使用する方法