分析圖片

本教學課程說明如何整合 BigQuery ML 與 Gemini,從非結構化圖片資料中取得洞察資訊。在本教學課程中,您將根據 gemini-2.5-flash 建立遠端模型,並使用 AI.GENERATE_TEXT 函式,自動從一系列電影海報中擷取中繼資料,例如片名和上映年份。

目標

  • 在 Cloud Storage bucket 中,為圖片資料建立 BigQuery 物件資料表。
  • 建立 BigQuery ML 遠端模型,指定 Gemini Enterprise Agent Platform gemini-2.5-flash 模型。
  • 使用遠端模型搭配 AI.GENERATE_TEXT 函式,找出與一組電影海報相關聯的電影。

費用

本教學課程使用下列 Google Cloud計費元件:

您可以使用 Pricing Calculator 根據預測用量估算費用。

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。

事前準備

  1. 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需具備特定 IAM 角色,只要您已獲派某個專案的角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。

    前往專案選取器

  2. 確認 Google Cloud 專案已啟用計費功能。

  3. 啟用 BigQuery、BigQuery Connection 和 Agent Platform API (如有尚未啟用的 API)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

必要的角色

如要執行本教學課程,您必須具備下列 Identity and Access Management (IAM) 角色:

  • 建立及使用 BigQuery 資料集、連結和模型:BigQuery 管理員 (roles/bigquery.admin)。
  • 將權限授予連線的服務帳戶:專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin)。

這些預先定義的角色具備執行本文件所述工作所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

  • 建立資料集:bigquery.datasets.create
  • 建立、委派及使用連線: bigquery.connections.*
  • 設定預設連線:bigquery.config.*
  • 設定服務帳戶權限:resourcemanager.projects.getIamPolicy和resourcemanager.projects.setIamPolicy
  • 建立物件資料表:bigquery.tables.create 和 bigquery.tables.update
  • 建立模型並執行推論:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

準備環境

如要使用 gemini-2.5-flash 對物件資料表執行 BigQuery ML 推論,您必須為專案指派 BigQuery 預留項目。如果專案已有指派的預留項目,可以略過這個步驟。

建立預留項目

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在導覽選單中,按一下「Workload management」(工作負載管理)。

  3. 點選「Create reservation」(建立預留項目)。

  4. 在「Create reservation」(建立預留項目) 頁面執行下列操作:

    1. 在「Reservation name」(預留項目名稱) 輸入 bqml-tutorial-reservation。
    2. 在「位置」部分,選取「us (多個美國區域)」。
    3. 其餘設定均保留預設值,然後點選「儲存」。

指派預留項目

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在導覽選單中,按一下「Workload management」(工作負載管理)。

  3. 在「Slot reservations」(運算單元預留項目) 表格中,找出要指派給專案的預留項目。

  4. 依序點選「查看動作」圖示 「建立作業」。

  5. 在「Create an assignment」(建立指派作業) 中,按一下「Browse」(瀏覽),然後選取您的專案。

  6. 在「工作類型」部分,選取「查詢」。這項設定可確保 SQL 查詢使用這個預留項目的運算單元。

  7. 點選「建立」。

建立資料集

如要建立 BigQuery 資料集,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 點選左側窗格中的 「Explorer」。

    醒目顯示的「Explorer」窗格按鈕。

    如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。

  3. 在「Explorer」中展開專案,然後按一下「資料集」。

  4. 在「Datasets」(資料集) 頁面,按一下「Create dataset」(建立資料集)。

  5. 在「建立資料集」窗格中,執行下列操作:

    • 在「Dataset ID」(資料集 ID) 中輸入 bqml_tutorial。

    • 在「資料位置」部分,選取「US」。

    其餘預設設定則保持不變。

  6. 點選「建立資料集」。

bq

如要建立新的資料集,請使用 bq mk --dataset 指令。

  1. 建立名為 bqml_tutorial 的資料集,並將資料位置設為 US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 確認資料集已建立:

    bq ls

API

使用定義的資料集資源呼叫 datasets.insert 方法:

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

建立物件資料表

在公開 Cloud Storage bucket 中,為電影海報圖片建立物件資料表。您可以使用物件資料表分析圖片,不必從 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/*']);

建立遠端模型

建立代表 Agent Platform 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 模型會顯示在「Explorer」窗格的 bqml_tutorial 資料集中。由於查詢使用 CREATE MODEL 陳述式建立模型,因此不會有查詢結果。

分析電影海報

使用遠端模型分析電影海報,判斷每張海報代表哪部電影,然後將這項資料寫入資料表。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中執行下列查詢,分析電影海報圖片:

    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. 在查詢編輯器中執行下列陳述式,查看資料表資料:

    SELECT * FROM `bqml_tutorial.movie_posters_results`;

    輸出結果大致如下:

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

設定模型輸出內容格式

為方便閱讀電影名稱和年份資料,請設定模型傳回資料的格式。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在查詢編輯器中,執行下列查詢來設定資料格式:

    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. 在查詢編輯器中執行下列陳述式,查看資料表資料:

    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. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除個別資源

如要重複使用專案,請刪除您為教學課程建立的資源。

刪除資料集

控制台

執行下列 SQL 指令,刪除整個 bqml_tutorial 資料集及其所有內容:

DROP SCHEMA IF EXISTS `bqml_tutorial` CASCADE;

bq

刪除整個 bqml_tutorial 資料集和所有內容:

bq rm -r bqml_tutorial

刪除保留項目

控制台

如果您在本教學課程中建立了 BigQuery 預留項目,請務必移除,以免持續產生運算單元費用。

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在導覽選單中,按一下「Workload management」(工作負載管理)。

  3. 在「Slot reservations」(運算單元預留項目) 表格中,找出 bqml-tutorial-reservation。

  4. 依序點選 「View actions」(查看動作) >「Delete」(刪除)。

bq

如果您在 us 位置建立了名為 bqml-tutorial-reservation 的 BigQuery 預留項目,請使用下列指令移除該項目:

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

刪除連結

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往「BigQuery」

  2. 在左側窗格中,按一下 「Explorer」,找到您的專案,然後按一下「連線」。

  3. 在表格中找出連線。

  4. 依序點選 「View actions」(查看動作) >「Delete」(刪除)。

bq

刪除連結:

bq rm --connection --location=us CONNECTION_ID

將 CONNECTION_ID 替換為連線的實際 ID。

後續步驟