Générer une image à partir de Vertex AI et l'importer dans Google Ads

1. Introduction

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez apprendre à générer des images à l'aide de Vertex AI et à les envoyer à Google Ads afin que les composants puissent être utilisés comme composants Image dans les campagnes.

Points abordés

  • Générer des images à partir de GCP et de Vertex AI
  • Importer des images dans Google Ads
  • Comment l'utiliser dans Google Ads

Prérequis

  • Compte Google Ads
  • Compte GCP

2. Obtenir des identifiants Google Ads

Cette étape est nécessaire pour obtenir des composants Image à partir de Google Ads. Pour accéder à Google Ads depuis Colab, vous avez besoin d'identifiants appropriés.

Créer des identifiants -> Créer un "ID client OAuth" -> Application Web

Pour obtenir les bons identifiants et associer Google Ads, vous devez accéder aux identifiants Cloud.

Si vous n'avez pas configuré l'écran de consentement, configurez-le d'abord.

  1. Type d'utilisateur: externe
  2. État de la publication: En production

6ecf963c5957379d.png

Ajoutez l'URI suivant à "URI de redirection autorisés"

Saisissez l'URI ci-dessous comme dans la capture d'écran ci-dessous.

https://developers.google.com/oauthplayground

b5d054a6cac40869.png

Copier l'ID client et le code secret du client

Vous pouvez obtenir l'ID et le code secret du client.

c8578bf54ade7cee.png

3. Générer un jeton d'actualisation

Accès à OAuth Playground

Vous pouvez facilement émettre un jeton d'actualisation temporaire sur OAuth Playground.

Accédez aux paramètres et cochez la case "User your own OAuth credentials" (Utilisez vos propres identifiants OAuth). Après avoir obtenu l'ID et le code secret du client OAuth dans le chapitre précédent, vous pouvez les placer dans les zones de texte correspondantes. ace79f71603a922.png

ad82eca7a99c446c.png

Ajouter le niveau d'accès

Vous pouvez ajouter le champ d'application https://www.googleapis.com/auth/adwords dans la section ci-dessous.

eff5408ba160aad1.png

Cliquez sur "Authorize APIs" (Autoriser les API). L'écran suivant s'affiche.

Générer un jeton d'actualisation

Cliquez sur "Exchange authorization code for tokens" (Échanger le code d'autorisation contre des jetons).

e8c6860d61ad73fd.png

4. Préparer Colab pour exécuter le code

Colab est le notebook de code pratique fourni avec Python. L'option par défaut fournit une puissance de calcul assez généreuse. Vous pouvez également utiliser n'importe quelle plate-forme pour appeler l'API REST de Google Cloud Vertex AI.

Veuillez accéder à https://colab.research.google.com/ pour l'utiliser.

Accédez à [File → New note] (Fichier → Nouvelle note) et commencez à écrire de nouveaux codes.

6b95020b3d3369ae.png

Si vous cliquez sur "Nouveau notebook", la nouvelle feuille de calcul sera prête.

5. Générer une image avec Google Cloud Vertex AI

Importer des bibliothèques

!pip install requests google-ads

Commencez par installer des bibliothèques pour Google Ads et des requêtes API. Vous devez redémarrer l'environnement d'exécution après avoir installé les bibliothèques.

Vous pouvez également charger les bibliothèques essentielles.

import requests
import json
import base64

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

Obtenir l'authentification

Vous serez invité à autoriser votre compte Google.

auth.authenticate_user()

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

Après vous être autorisé, vous êtes prêt à appeler les API Google Cloud.

6. Générer une image à partir de Vertex AI

Préparer votre requête et votre requête POST

Tout d'abord, vous devez connaître l'ID de votre projet Google Cloud. Vous pouvez l'obtenir dans Google Cloud. Vous avez besoin d'une requête textuelle et vous pouvez également définir le nombre d'images dont vous avez besoin. Pour plus d'options, consultez la documentation officielle.

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.

Vous pouvez écrire ce que vous voulez dans la requête textuelle. Ici, nous voulons générer les images regroupant un chat et un ordinateur.

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
    }
}

Demander la génération d'images

Une fois que vous êtes prêt pour le fichier JSON, vous pouvez demander la génération d'images. Vous trouverez ci-dessous une requête HTTP type.

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)

Si vous attendez plusieurs secondes, vous obtiendrez le résultat. C'est très simple !

dec38d2d3f7faab8.png

7. Connectez-vous à Google Ads

Associer votre compte Google Ads

Vous avez besoin d'un jeton de développeur Google Ads. Vous pouvez demander un jeton de développement de base ou standard, mais un jeton de test est également disponible à des fins de test. Accédez à votre compte CM. Dans l'onglet "Outils et paramètres", vous trouverez le centre API. Vous trouverez votre jeton dans la section "API".

L'ID client, le code secret du client et les jetons d'actualisation doivent être prêts au chapitre précédent.

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
}

Après avoir défini les identifiants, vous pouvez charger l'API GoogleAdsService. Le numéro client est généralement au format xxx-xxxx-xxx, mais vous devez supprimer "-".

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

Interroger un compte Google Ads

Vous pouvez maintenant effectuer des tests avec googleads_service. Recherchons à présent les types d'assets présents dans votre compte Ads.

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)

La liste des composants du compte Google Ads s'affiche au format JSON. Si vous voyez quelque chose comme

ad_group_ad {

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

}

8. Importer un composant Image dans Google Ads

Importer

La dernière étape consiste à importer les composants générés dans Google Ads.

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])

Après quelques secondes, vous pourrez vérifier l'asset importé via l'interface Google Ads. Voici un exemple de capture d'écran.

7f2fb6063e5ae675.png

9. Félicitations

Félicitations ! Vous venez de générer de superbes composants Image à partir de l'image existante.

Ce que vous avez appris

  • Générer des composants Image à l'aide de l'IA générative (Vertex AI)
  • Importer des images dans Google Ads et les utiliser comme composants Image