Bilder mit einem Gemini-Vision-Modell analysieren

In dieser Anleitung erfahren Sie, wie Sie ein BigQuery ML-Remote-Modell erstellen, das auf dem Vertex AIgemini-1.0-pro-vision Modell basiert, und dieses Modell dann mit der ML.GENERATE_TEXT Funktion zum Analysieren einer Reihe von Filmposterbildern verwenden.

In dieser Anleitung werden die folgenden Aufgaben behandelt:

  • BigQuery-Objekttabelle über Bilddaten in einem Cloud Storage-Bucket erstellen
  • Erstellen eines BigQuery ML-Remote-Modells, das auf das Vertex AI-gemini-1.0-pro-vision-Modell ausgerichtet ist (Vorschau).
  • Mithilfe des Remote-Modells mit der ML.GENERATE_TEXT-Funktion die Filme identifizieren, die mit einer Reihe von Filmpostern verknüpft sind.

Die Daten des Filmposters sind im öffentlichen Cloud Storage-Bucket gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters verfügbar.

Erforderliche Rollen

  • Zum Erstellen einer Verbindung benötigen Sie die Rolle „BigQuery-Verbindungsadministrator“ (roles/bigquery.connectionAdmin).

  • Zum Erteilen von Berechtigungen für das Dienstkonto der Verbindung benötigen Sie die Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin).

  • Zum Erstellen von Datasets, Modellen und Tabellen benötigen Sie die Rolle "BigQuery-Datenbearbeiter" (roles/bigquery.dataEditor).

  • Zum Ausführen von BigQuery-Jobs benötigen Sie die Rolle „BigQuery-Nutzer“ (roles/bigquery.user).

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von 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.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen zu den Preisen von BigQuery finden Sie unter BigQuery: Preise in der BigQuery-Dokumentation.

Weitere Informationen zu den Preisen für generative AI von Vertex AI finden Sie auf der Seite Vertex AI: Preise.

Hinweise

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

    Go to project selector

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  3. BigQuery, BigQuery Connection, and Vertex AI APIs aktivieren.

    Aktivieren Sie die APIs

Dataset erstellen

Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:

  1. Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.

    Zur Seite „BigQuery“

  2. Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.

  3. Klicken Sie auf Aktionen ansehen > Dataset erstellen.

    Dataset erstellen

  4. Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.

      Die öffentlichen Datasets sind am multiregionalen Standort US gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.

    • Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.

      Seite "Dataset erstellen"

Verbindung herstellen

Erstellen Sie eine Cloud-Ressourcenverbindung und rufen Sie das Dienstkonto der Verbindung ab.

Console

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Hinzufügen und dann auf Verbindungen zu externen Datenquellen, um eine Verbindung zu erstellen.

  3. Wählen Sie in der Liste Verbindungstyp die Option Vertex AI-Remote-Modelle, Remote-Funktionen und BigLake (Cloud Resource) aus.

  4. Geben Sie im Feld Verbindungs-ID tutorial ein.

  5. Klicken Sie auf Verbindung erstellen.

  6. Klicken Sie auf Zur Verbindung.

  7. Kopieren Sie die Dienstkonto-ID aus dem Bereich Verbindungsinformationen zur Verwendung in einem späteren Schritt.

bq

  1. Erstellen Sie in einer Befehlszeilenumgebung eine Verbindung:

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

    Der Parameter --project_id überschreibt das Standardprojekt.

    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

    Wenn Sie eine Verbindungsressource herstellen, erstellt BigQuery ein eindeutiges Systemdienstkonto und ordnet es der Verbindung zu.

    Fehlerbehebung:Wird der folgende Verbindungsfehler angezeigt, aktualisieren Sie das Google Cloud SDK:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Rufen Sie die Dienstkonto-ID ab und kopieren Sie sie zur Verwendung in einem späteren Schritt:

    bq show --connection PROJECT_ID.us.tutorial
    

    Die Ausgabe sieht in etwa so aus:

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

Terraform

Hängen Sie folgenden Abschnitt an Ihre main.tf-Datei an.

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

Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

Dem Dienstkonto der Verbindung Berechtigungen gewähren

So weisen Sie dem Dienstkonto der Verbindung die entsprechenden Rollen für den Zugriff auf die Cloud Storage- und Vertex AI-Dienste zu:

  1. Zur Seite IAM & Verwaltung.

    IAM & Verwaltung aufrufen

  2. Klicken Sie auf Zugriff gewähren.

  3. Geben Sie im Feld Neue Hauptkonten die Dienstkonto-ID ein, die Sie zuvor kopiert haben.

  4. Wählen Sie im Feld Rolle auswählen die Option Vertex AI und dann Vertex AI-Nutzer aus.

  5. Klicken Sie auf Weitere Rolle hinzufügen.

  6. Wählen Sie im Feld Rolle auswählen die Option Cloud Storage und dann Storage-Objekt-Betrachter aus.

  7. Klicken Sie auf Speichern.

Objekttabelle erstellen

Erstellen Sie im öffentlichen Cloud Storage-Bucket eine Objekttabelle über die Filmposterbilder. Mit der Objekttabelle können die Bilder analysiert werden, ohne sie aus Cloud Storage zu verschieben.

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus, um die Objekttabelle zu erstellen:

    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/*']);
    

Remote-Modell erstellen

Erstellen Sie ein Remote-Modell, das ein Vertex AI-gemini-1.0-pro-vision-Modell darstellt:

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor die folgende Abfrage aus, um das Remote-Modell zu erstellen:

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

    Die Abfrage dauert mehrere Sekunden. Anschließend wird das Modell gemini-pro-vision im bqml_tutorial-Dataset des Bereichs Explorer angezeigt. Da die Abfrage eine CREATE MODEL-Anweisung zum Erstellen eines Modells verwendet, gibt es keine Abfrageergebnisse.

Filmposter analysieren

Verwenden Sie das Remote-Modell, um die Filmposter zu analysieren und zu bestimmen, welchen Film jedes Poster darstellt. Schreiben Sie diese Daten dann in eine Tabelle.

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor die folgende Abfrage aus, um die Posterbilder von Filmen zu analysieren:

    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. Führen Sie im Abfrageeditor folgende Anweisung aus, um die Tabellendaten aufzurufen:

    SELECT * FROM `bqml_tutorial.movie_posters_results`;
    

    Die Ausgabe sieht in etwa so aus:

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

Modellausgabe formatieren

Formatieren Sie die vom Modell zurückgegebenen Filmanalysedaten, um den Filmtitel und die Jahresdaten besser lesbar zu machen.

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Führen Sie im Abfrageeditor folgende Abfrage aus, um die Daten zu formatieren:

    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. Führen Sie im Abfrageeditor folgende Anweisung aus, um die Tabellendaten aufzurufen:

    SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;
    

    Die Ausgabe sieht in etwa so aus:

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

Bereinigen

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.