使用 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 Admin (
roles/bigquery.admin
)。 - 为连接的服务账号授予权限:Project IAM Admin (
roles/resourcemanager.projectIamAdmin
)。
这些预定义角色包含执行本文档中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
- 创建数据集:
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
费用
在本文档中,您将使用 Trusted Cloud by S3NS的以下收费组件:
- 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.
您可使用价格计算器根据您的预计使用情况来估算费用。
如需详细了解 BigQuery 价格,请参阅 BigQuery 文档中的 BigQuery 价格。
如需详细了解 Vertex AI 生成式 AI 价格,请参阅 Vertex AI 价格页面。
准备工作
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
创建数据集
创建 BigQuery 数据集以存储机器学习模型。
控制台
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在 创建数据集 页面上,执行以下操作:
在数据集 ID 部分,输入
bqml_tutorial
。在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。
保持其余默认设置不变,然后点击创建数据集。
bq
如需创建新数据集,请使用带有 --location
标志的 bq mk
命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset
命令参考文档。
创建一个名为
bqml_tutorial
的数据集,并将数据位置设置为US
,说明为BigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
该命令使用的不是
--dataset
标志,而是-d
快捷方式。如果省略-d
和--dataset
,该命令会默认创建一个数据集。确认已创建数据集:
bq ls
API
使用已定义的数据集资源调用 datasets.insert
方法。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC。
创建对象表
基于公开 Cloud Storage 存储桶中的电影海报图片创建对象表。对象表让您无需从 Cloud Storage 中移动图片即可分析图片。
在 Trusted 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/*']);
创建远程模型
创建一个代表 Vertex AI gemini-2.5-flash
模型的远程模型:
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,运行以下查询以创建远程模型:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini-vision` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'gemini-2.5-flash');
查询需要几秒钟才能完成,之后
gemini-vision
模型会显示在探索器窗格的bqml_tutorial
数据集中。 由于查询使用CREATE MODEL
语句来创建模型,因此没有查询结果。
分析电影海报
使用远程模型分析电影海报,确定每张海报代表哪部电影,然后将此数据写入表中。
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,运行以下查询以分析电影海报图片:
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)));
在查询编辑器中,运行以下语句以查看表数据:
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 | | | } | | |
| +--------------------------------------------+----------------------------------+
设置模型输出格式
设置模型返回的电影分析数据的格式,使电影标题和年份数据更易读。
在 Trusted Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,运行以下查询以格式化数据:
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 );
在查询编辑器中,运行以下语句以查看表数据:
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 | | | +--------------------------------------------+----------------------------+------+
清理
- In the Trusted Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.