分析圖片
本教學課程說明如何整合 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 根據預測用量估算費用。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
-
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時,不需具備特定 IAM 角色,只要您已獲派某個專案的角色,即可選取該專案。
-
建立專案:如要建立專案,您必須具備專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
啟用 BigQuery、BigQuery Connection 和 Agent Platform API (如有尚未啟用的 API)。
啟用 API 所需的角色
您必須具備
serviceusage.services.enable權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過 Service Usage 管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
必要的角色
如要執行本教學課程,您必須具備下列 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.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
準備環境
如要使用 gemini-2.5-flash 對物件資料表執行 BigQuery ML 推論,您必須為專案指派 BigQuery 預留項目。如果專案已有指派的預留項目,可以略過這個步驟。
建立預留項目
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Workload management」(工作負載管理)。
點選「Create reservation」(建立預留項目)。
在「Create reservation」(建立預留項目) 頁面執行下列操作:
- 在「Reservation name」(預留項目名稱) 輸入
bqml-tutorial-reservation。 - 在「位置」部分,選取「us (多個美國區域)」。
- 其餘設定均保留預設值,然後點選「儲存」。
- 在「Reservation name」(預留項目名稱) 輸入
指派預留項目
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Workload management」(工作負載管理)。
在「Slot reservations」(運算單元預留項目) 表格中,找出要指派給專案的預留項目。
依序點選「查看動作」圖示 「建立作業」。
在「Create an assignment」(建立指派作業) 中,按一下「Browse」(瀏覽),然後選取您的專案。
在「工作類型」部分,選取「查詢」。這項設定可確保 SQL 查詢使用這個預留項目的運算單元。
點選「建立」。
建立資料集
如要建立 BigQuery 資料集,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
點選左側窗格中的 「Explorer」。

如果沒有看到左側窗格,請按一下 「Expand left pane」(展開左側窗格),開啟窗格。
在「Explorer」中展開專案,然後按一下「資料集」。
在「Datasets」(資料集) 頁面,按一下「Create dataset」(建立資料集)。
在「建立資料集」窗格中,執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial。在「資料位置」部分,選取「US」。
其餘預設設定則保持不變。
點選「建立資料集」。
bq
如要建立新的資料集,請使用 bq mk --dataset 指令。
建立名為
bqml_tutorial的資料集,並將資料位置設為US:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
確認資料集已建立:
bq ls
API
使用定義的資料集資源呼叫 datasets.insert 方法:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
建立物件資料表
在公開 Cloud Storage bucket 中,為電影海報圖片建立物件資料表。您可以使用物件資料表分析圖片,不必從 Cloud Storage 移動圖片。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器執行下列查詢,建立物件資料表:
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 模型的遠端模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器執行下列查詢,建立遠端模型:
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陳述式建立模型,因此不會有查詢結果。
分析電影海報
使用遠端模型分析電影海報,判斷每張海報代表哪部電影,然後將這項資料寫入資料表。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中執行下列查詢,分析電影海報圖片:
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)));
在查詢編輯器中執行下列陳述式,查看資料表資料:
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 | | | } | | || +--------------------------------------------+----------------------------------+
設定模型輸出內容格式
為方便閱讀電影名稱和年份資料,請設定模型傳回資料的格式。
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中,執行下列查詢來設定資料格式:
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 );
在查詢編輯器中執行下列陳述式,查看資料表資料:
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 | | | +--------------------------------------------+----------------------------+------+
刪除專案
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除個別資源
如要重複使用專案,請刪除您為教學課程建立的資源。
刪除資料集
控制台
執行下列 SQL 指令,刪除整個 bqml_tutorial 資料集及其所有內容:
DROP SCHEMA IF EXISTS `bqml_tutorial` CASCADE;
bq
刪除整個 bqml_tutorial 資料集和所有內容:
bq rm -r bqml_tutorial
刪除保留項目
控制台
如果您在本教學課程中建立了 BigQuery 預留項目,請務必移除,以免持續產生運算單元費用。
前往 Google Cloud 控制台的「BigQuery」頁面。
在導覽選單中,按一下「Workload management」(工作負載管理)。
在「Slot reservations」(運算單元預留項目) 表格中,找出
bqml-tutorial-reservation。依序點選 「View actions」(查看動作) >「Delete」(刪除)。
bq
如果您在 us 位置建立了名為 bqml-tutorial-reservation 的 BigQuery 預留項目,請使用下列指令移除該項目:
bq rm --reservation --location=us bqml-tutorial-reservation
刪除連結
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在左側窗格中,按一下 「Explorer」,找到您的專案,然後按一下「連線」。
在表格中找出連線。
依序點選 「View actions」(查看動作) >「Delete」(刪除)。
bq
刪除連結:
bq rm --connection --location=us CONNECTION_ID
將 CONNECTION_ID 替換為連線的實際 ID。
後續步驟
- 進一步瞭解 BigQuery 的生成式 AI 函式。
- 瞭解如何調整及評估模型。
- 查看 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的 Cloud Architecture Center。