Analysez des images

Ce tutoriel vous explique comment obtenir des insights à partir de données d'image non structurées en intégrant BigQuery ML à Gemini. Dans ce tutoriel, vous allez créer un modèle distant basé sur gemini-2.5-flash et utiliser la fonction AI.GENERATE_TEXT pour extraire automatiquement des métadonnées, telles que les titres et les années de sortie, à partir d'une collection d'affiches de films.

Objectifs

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

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Dans la console Google Cloud , sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.

    Accéder au sélecteur de projet

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  3. Activez les API BigQuery, BigQuery Connection et Vertex AI.

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer les API

Rôles requis

Pour exécuter ce tutoriel, vous devez disposer des rôles IAM (Identity and Access Management) suivants :

  • Créer et utiliser des ensembles de données, des connexions et des modèles BigQuery : administrateur BigQuery (roles/bigquery.admin).
  • Accordez des autorisations au compte de service de la connexion : Administrateur IAM du projet (roles/resourcemanager.projectIamAdmin).

Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce document. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

  • Créez un ensemble de données : bigquery.datasets.create
  • Créer, déléguer et utiliser une connexion : bigquery.connections.*
  • Définissez la connexion par défaut : bigquery.config.*
  • Définissez les autorisations du compte de service : resourcemanager.projects.getIamPolicy et resourcemanager.projects.setIamPolicy.
  • Créez une table d'objets : bigquery.tables.create et bigquery.tables.update
  • Créez un modèle et exécutez l'inférence :
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Préparer l'environnement

Pour effectuer une inférence BigQuery ML sur des tables d'objets à l'aide de gemini-2.5-flash, vous devez attribuer une réservation BigQuery à votre projet. Si une réservation est déjà attribuée à votre projet, vous pouvez ignorer cette étape.

Créer une réservation

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

    Accéder à BigQuery

  2. Dans le menu de navigation, cliquez sur Gestion de la capacité.

  3. Cliquez sur Créer une réservation.

  4. Sur la page Créer une réservation, procédez comme suit :

    1. Dans le champ Nom de la réservation, saisissez bqml-tutorial-reservation.
    2. Pour Emplacement, sélectionnez us (plusieurs régions aux États-Unis).
    3. Conservez les autres paramètres par défaut, puis cliquez sur Enregistrer.

Attribuer la réservation

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

    Accéder à BigQuery

  2. Dans le menu de navigation, cliquez sur Gestion de la capacité.

  3. Dans le tableau Réservations d'emplacements, recherchez la réservation que vous souhaitez attribuer à votre projet.

  4. Cliquez sur Afficher les actions > Créer un devoir.

  5. Dans Créer une attribution, cliquez sur Parcourir et sélectionnez votre projet.

  6. Dans le champ Type de job, sélectionnez QUERY. Cette sélection garantit que vos requêtes SQL utilisent les emplacements de cette réservation.

  7. Cliquez sur Créer.

Créer un ensemble de données

Créez un ensemble de données BigQuery pour stocker votre modèle de ML.

Console

  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.

  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 États-Unis.

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

bq

Pour créer un ensemble de données, utilisez la commande bq mk --dataset.

  1. Créez un ensemble de données nommé bqml_tutorial et définissez l'emplacement des données sur US.

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Vérifiez que l'ensemble de données a été créé :

    bq ls

API

Appelez la méthode datasets.insert avec une ressource d'ensemble de données définie.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

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 vous 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 DEFAULT
      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-2.5-flash 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-vision`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-2.5-flash');

    L'exécution de la requête peut prendre quelques minutes. Le modèle gemini-vision apparaît ensuite dans l'ensemble de données bqml_tutorial du 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,
       result
      FROM
        AI.GENERATE_TEXT( MODEL `bqml_tutorial.gemini-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)));
        
  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                                        | 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

Pour rendre le titre et l'année du film plus lisibles, mettez en forme les données renvoyées par le modèle.

  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.result, " ```json"), "```"), "$.title") AS title,
        JSON_QUERY(RTRIM(LTRIM(results.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            |                            |      |
    +--------------------------------------------+----------------------------+------+
    

Supprimer le projet

  1. Dans la console Google Cloud , accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des ressources individuelles

Si vous souhaitez réutiliser le projet, supprimez les ressources que vous avez créées pour le tutoriel.

Supprimer l'ensemble de données

Console

Supprimez l'intégralité de l'ensemble de données bqml_tutorial et tout son contenu en exécutant la commande SQL suivante :

DROP SCHEMA IF EXISTS `bqml_tutorial` CASCADE;

bq

Supprimez l'intégralité de l'ensemble de données bqml_tutorial et tout son contenu :

bq rm -r bqml_tutorial

Supprimer la réservation

Console

Si vous avez créé une réservation BigQuery dans le cadre de ce tutoriel, vous devez la supprimer pour éviter de continuer à payer des frais d'emplacement.

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

    Accéder à BigQuery

  2. Dans le menu de navigation, cliquez sur Gestion de la capacité.

  3. Dans le tableau Réservations d'emplacements, recherchez bqml-tutorial-reservation.

  4. Cliquez sur Afficher les actions > Supprimer.

bq

Si vous avez créé une réservation BigQuery nommée bqml-tutorial-reservation dans l'emplacement us, utilisez la commande suivante pour la supprimer :

bq rm --reservation --location=us bqml-tutorial-reservation

Supprimer la connexion

Console

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

    Accéder à BigQuery

  2. Dans le volet de gauche, cliquez sur Explorateur, recherchez votre projet, puis cliquez sur Connexions.

  3. Dans le tableau, recherchez votre connexion.

  4. Cliquez sur Afficher les actions > Supprimer.

bq

Supprimez la connexion :

bq rm --connection --location=us CONNECTION_ID

Remplacez CONNECTION_ID par l'ID réel de votre connexion.

Étapes suivantes