Gemini モデルを使用して画像を分析する

このチュートリアルでは、gemini-2.5-flash モデルに基づいて BigQuery ML リモートモデルを作成する方法を説明します。このモデルを ML.GENERATE_TEXT 関数と組み合わせて使用し、映画のポスター画像を分析します。

このチュートリアルでは、次のタスクについて説明します。

  • Cloud Storage バケット内の画像データに対して BigQuery オブジェクト テーブルを作成する。
  • Vertex AI gemini-2.5-flash モデルをターゲットとする BigQuery ML リモートモデルを作成する。
  • ML.GENERATE_TEXT 関数でリモートモデルを使用して、一連の映画ポスターに関連付けられた映画を特定する。

映画のポスターデータは、公開の Cloud Storage バケット gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters から入手できます。

必要なロール

このチュートリアルを実行するには、次の Identity and Access Management(IAM)ロールが必要です。

  • BigQuery データセット、接続、モデルを作成して使用する: BigQuery 管理者(roles/bigquery.admin)。
  • 接続のサービス アカウントに権限を付与する: Project IAM 管理者(roles/resourcemanager.projectIamAdmin)。

これらの事前定義ロールには、このドキュメントのタスクを実行するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

  • データセットを作成する: bigquery.datasets.create
  • 接続を作成、委任、使用する: bigquery.connections.*
  • デフォルトの接続を設定する: bigquery.config.*
  • サービス アカウントの権限を設定する: resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
  • オブジェクト テーブルを作成する: bigquery.tables.createbigquery.tables.update
  • モデルを作成して推論を実行する
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

費用

このドキュメントでは、課金対象である次の 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.

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

BigQuery の料金の詳細については、BigQuery ドキュメントの BigQuery の料金をご覧ください。

Vertex AI の生成 AI の料金の詳細については、Vertex AI の料金のページをご覧ください。

始める前に

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

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

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

    Enable the APIs

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

コンソール

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. [アクションを表示] > [データセットを作成] をクリックします。

    [データセットを作成] のメニュー オプション。

  4. [データセットを作成] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

bq

新しいデータセットを作成するには、--location フラグを指定した bq mk コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset コマンドのリファレンスをご覧ください。

  1. データの場所が US に設定され、BigQuery ML tutorial dataset という説明の付いた、bqml_tutorial という名前のデータセットを作成します。

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

  2. データセットが作成されたことを確認します。

    bq ls

API

定義済みのデータセット リソースを使用して datasets.insert メソッドを呼び出します。

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

BigQuery DataFrames

このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

オブジェクト テーブルを作成する

公開 Cloud Storage バケットにある映画のポスター画像に対してオブジェクト テーブルを作成します。オブジェクト テーブルを使用すると、Cloud Storage から画像を移動せずに分析できます。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで、次のクエリを実行してオブジェクト テーブルを作成します。

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

リモートモデルを作成する

Vertex AI gemini-2.5-flash モデルを表すリモートモデルを作成します。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで、次のクエリを実行してリモートモデルを作成します。

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini-vision`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-2.5-flash');

    クエリが完了するまでに数秒かかります。完了後、gemini-vision モデルが [エクスプローラ] ペインの bqml_tutorial データセットに表示されます。クエリは CREATE MODEL ステートメントを使用してモデルを作成するため、クエリの結果はありません。

映画のポスターを分析する

リモートモデルを使用して映画のポスターを分析し、各ポスターが表す映画を特定してから、そのデータをテーブルに書き込みます。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のクエリを実行して、映画のポスター画像を分析します。

    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-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. クエリエディタで、次のステートメントを実行してテーブルデータを表示します。

    SELECT * FROM `bqml_tutorial.movie_posters_results`;

    出力は次のようになります。

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

モデルの出力をフォーマットする

モデルから返された映画分析データをフォーマットして、映画のタイトルと公開年を読みやすくします。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで、次のクエリを実行してデータをフォーマットします。

    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. クエリエディタで、次のステートメントを実行してテーブルデータを表示します。

    SELECT * FROM `bqml_tutorial.movie_posters_results_formatted`;

    出力は次のようになります。

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

クリーンアップ

  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.