Analyser des images avec un modèle Gemini Vision

Ce tutoriel explique comment créer un modèle distant BigQuery ML basé sur le modèle gemini-1.0-pro-vision de Vertex AI, puis comment utiliser ce modèle avec la fonction ML.GENERATE_TEXT pour analyser un ensemble d'images d'affiches de films.

Ce tutoriel couvre les tâches suivantes :

  • Créer une table d'objets BigQuery sur des données d'image dans un bucket Cloud Storage.
  • Créer un modèle distant BigQuery ML qui cible le modèle gemini-1.0-pro-vision de Vertex AI (preview)
  • Utiliser le modèle distant avec la fonction ML.GENERATE_TEXT pour identifier les films associés à un ensemble d'affiches de film

Les données sur les affiches de films sont disponibles dans le bucket Cloud Storage public gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters.

Rôles requis

  • Pour créer une connexion, vous devez disposer du rôle d'administrateur de connexion BigQuery (roles/bigquery.connectionAdmin).

  • Pour accorder des autorisations au compte de service de la connexion, vous devez disposer du rôle Administrateur IAM du projet (roles/resourcemanager.projectIamAdmin).

  • Pour créer des ensembles de données, des modèles et des tables, vous devez disposer du rôle Éditeur de données BigQuery (roles/bigquery.dataEditor).

  • Pour exécuter des tâches BigQuery, vous devez disposer du rôle Utilisateur BigQuery (roles/bigquery.user).

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI model that is represented by the BigQuery remote model.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour en savoir plus sur les tarifs de BigQuery, consultez la page Tarifs de BigQuery dans la documentation BigQuery.

Pour en savoir plus sur les tarifs de l'IA générative Vertex AI, consultez la page Tarifs de Vertex AI.

Avant de commencer

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

Créer un ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

  1. Dans la console Google Cloud, accédez à la page "BigQuery".

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Créer une connexion

Créez une connexion de ressource cloud et obtenez le compte de service de la connexion.

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour créer une connexion, cliquez sur Ajouter, puis sur Connexions aux sources de données externes.

  3. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez tutorial.

  5. Cliquez sur Créer une connexion.

  6. Cliquez sur Accéder à la connexion.

  7. Copiez l'ID du compte de service dans le volet Informations de connexion pour l'utiliser à une étape ultérieure.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

    bq mk --connection --location=us --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE tutorial

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.us.tutorial

    Le résultat ressemble à ce qui suit :

    name                properties
    1234.us.tutorial    {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Ajoutez la section suivante à votre fichier main.tf.

 ## This creates a Cloud Resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "tutorial"
    project = "PROJECT_ID"
    location = "us"
    cloud_resource {}
}        

Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

Accorder des autorisations au compte de service de la connexion

Attribuez au compte de service de la connexion les rôles appropriés pour accéder aux services Cloud Storage et Vertex AI. Vous devez accorder ces rôles dans le projet que vous avez créé ou sélectionné dans la section Avant de commencer. L'attribution du rôle dans un autre projet génère l'erreur bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Pour accorder les rôles appropriés, procédez comme suit :

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis Utilisateur Vertex AI.

  5. Cliquez sur Ajouter un autre rôle.

  6. Dans le champ Sélectionner un rôle, sélectionnez Cloud Storage, puis Lecteur des objets Storage.

  7. Cliquez sur Enregistrer.

Créer la table d'objets

Créez une table d'objets sur les images de l'affiche de film dans le bucket public de Cloud Storage. La table d'objets permet d'analyser les images sans les déplacer depuis Cloud Storage.

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requêtes, exécutez la requête suivante pour créer la table d'objets :

    CREATE OR REPLACE EXTERNAL TABLE `bqml_tutorial.movie_posters`
      WITH CONNECTION `us.tutorial`
      OPTIONS (
        object_metadata = 'SIMPLE',
        uris =
          ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']);

Créer le modèle distant

Créez un modèle distant représentant un modèle Vertex AI gemini-1.0-pro-vision hébergé :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez la requête suivante pour créer un modèle distant :

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini-pro-vision`
      REMOTE WITH CONNECTION `us.tutorial`
      OPTIONS (ENDPOINT = 'gemini-pro-vision');

    L'exécution de la requête prend plusieurs secondes, après quoi le modèle gemini-pro-vision apparaît dans l'ensemble de données bqml_tutorial dans le volet Explorateur. Étant donné que la requête utilise une instruction CREATE MODEL pour créer un modèle, il n'y a aucun résultat de requête.

Analyser les affiches de films

Utilisez le modèle distant pour analyser les affiches de film et déterminer le film qu'elles représentent, puis écrivez ces données dans un tableau.

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requêtes, exécutez la requête suivante pour analyser les images d'affiches de films :

    CREATE OR REPLACE TABLE
      `bqml_tutorial.movie_posters_results` AS (
      SELECT
        uri,
        ml_generate_text_llm_result
      FROM
        ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-pro-vision`,
          TABLE `bqml_tutorial.movie_posters`,
          STRUCT( 0.2 AS temperature,
            'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer.' AS PROMPT,
            TRUE AS FLATTEN_JSON_OUTPUT)));
        
  3. Dans l'éditeur de requêtes, exécutez l'instruction suivante pour afficher les données de la table :

    SELECT * FROM `bqml_tutorial.movie_posters_results`;

    Le résultat ressemble à ce qui suit :

    +--------------------------------------------+----------------------------------+
    | uri                                        | ml_generate_text_llm_result      |
    +--------------------------------------------+----------------------------------+
    | gs://cloud-samples-data/vertex-ai/dataset- | ```json                          |
    | management/datasets/classic-movie-         | {                                |
    | posters/little_annie_rooney.jpg            |  "title": "Little Annie Rooney", |
    |                                            |  "year": 1912                    |
    |                                            | }                                |
    |                                            | ```                              |
    +--------------------------------------------+----------------------------------+
    | gs://cloud-samples-data/vertex-ai/dataset- | ```json                          |
    | management/datasets/classic-movie-         | {                                |
    | posters/mighty_like_a_mouse.jpg            |  "title": "Mighty Like a Moose", |
    |                                            |  "year": 1926                    |
    |                                            | }                                |
    |                                            | ```                              |
    +--------------------------------------------+----------------------------------+
    | gs://cloud-samples-data/vertex-ai/dataset- | ```json                          |
    | management/datasets/classic-movie-         | {                                |
    | posters/brown_of_harvard.jpeg              |  "title": "Brown of Harvard",    |
    |                                            |  "year": 1926                    |
    |                                            | }                                |
    |                                            | ```                              |
    +--------------------------------------------+----------------------------------+
    

Mettre en forme la sortie du modèle

Mettez en forme les données d'analyse de film renvoyées par le modèle pour rendre le titre et l'année du film plus lisibles.

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requêtes, exécutez la requête suivante pour mettre en forme les données :

    CREATE OR REPLACE TABLE
      `bqml_tutorial.movie_posters_results_formatted` AS (
      SELECT
        uri,
        JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.title") AS title,
        JSON_QUERY(RTRIM(LTRIM(results.ml_generate_text_llm_result, " ```json"), "```"), "$.year") AS year
      FROM
        `bqml_tutorial.movie_posters_results` results );
  3. Dans l'éditeur de requêtes, exécutez l'instruction suivante pour afficher les données de la table :

    SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;

    Le résultat ressemble à ce qui suit :

    +--------------------------------------------+----------------------------+------+
    | uri                                        | title                      | year |
    +--------------------------------------------+----------------------------+------+
    | gs://cloud-samples-data/vertex-ai/dataset- | "Barque sortant du port"   | 1895 |
    | management/datasets/classic-movie-         |                            |      |
    | posters/barque_sortant_du_port.jpeg        |                            |      |
    +--------------------------------------------+----------------------------+------+
    | gs://cloud-samples-data/vertex-ai/dataset- | "The Great Train Robbery"  | 1903 |
    | management/datasets/classic-movie-         |                            |      |
    | posters/the_great_train_robbery.jpg        |                            |      |
    +--------------------------------------------+----------------------------+------+
    | gs://cloud-samples-data/vertex-ai/dataset- | "Little Annie Rooney"      | 1912 |
    | management/datasets/classic-movie-         |                            |      |
    | posters/little_annie_rooney.jpg            |                            |      |
    +--------------------------------------------+----------------------------+------+
    

Effectuer un nettoyage

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.