探索 Gemini API 的视觉功能

<ph type="x-smartling-placeholder"></ph>

前往 ai.google.dev 查看 试用 Colab 笔记本 在 GitHub 上查看笔记本

Gemini API 可以对传递给它的图片和视频进行推理。通过后 图片、一系列图片或视频,Gemini 可以:

  • 描述或回答与内容相关的问题
  • 总结内容
  • 根据内容推断

本教程演示了向 Gemini API 提示的一些可能方式, 图片和视频输入。所有输出均为纯文本。

准备工作:设置您的项目和 API 密钥

在调用 Gemini API 之前,您需要设置项目并配置 您的 API 密钥。

使用图片提示

在本教程中,您将使用 File API 或内嵌数据上传图片 并根据这些图片生成内容。

技术详情(图片)

Gemini 1.5 Pro 和 1.5 Flash 最多支持 3,600 个图片文件。

图片必须采用以下图片数据 MIME 类型之一:

  • PNG - image/png
  • JPEG - image/jpeg
  • WEBP - image/webp
  • HEIC - image/heic
  • HEIF - image/heif

每张图片相当于 258 个词元。

除了对图像中的像素数没有特定限制外, 在模型的上下文窗口中,较大的图像会按比例缩小到 3072x3072,同时保留原始宽高比, 较小的图片则放大到 768x768 像素。不会降低成本 以较低尺寸的图片(带宽或性能改进除外) 以更高分辨率显示图片

为了达到最佳效果,请注意以下事项:

  • 请先将图片旋转到正确的方向,然后再上传。
  • 避免使用模糊的图片。
  • 如果使用的是单张图片,请将文本提示放置在图片后面。

使用 File API 上传图片文件

使用 File API 上传任意大小的图片。(在以下情况下,请始终使用 File API: 您要发送的文件和系统指令的组合为 超过 20 MB)。

首先,下载此 喷气背包草图

!curl -o jetpack.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg

使用以下网址上传图片: media.upload 并输出 URI,该 URI 将用作 Gemini API 调用中的参考。

# Upload the file and print a confirmation.
sample_file = genai.upload_file(path="jetpack.jpg",
                            display_name="Jetpack drawing")

print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")

验证图片文件上传并获取元数据

您可以验证 API 是否已成功存储上传的文件,并获取 通过调用 files.get 获取元数据 。只有 name(以及 uri)才是唯一的。使用 display_name,以便仅在您自行管理唯一性时标识文件。

file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")

根据您的用例,您可以将 URI 存储在结构中,例如 dict 或数据库。

使用上传的图片和文字进行提示

上传文件后,您可以发出 GenerateContent 请求来引用 File API URI。选择生成模型并提供文本提示 和上传的图片

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Prompt the model with text and the previously uploaded image.
response = model.generate_content([sample_file, "Describe how this product might be manufactured."])

Markdown(">" + response.text)

上传一个或多个本地存储的图片文件

或者,您也可以上传自己的文件。您可以下载并使用我们的 绘画 食人鱼水域消防员和一只猫

当您打算发送的文件和系统说明组合时 超过 20MB 的文件,请使用 File API 上传这些文件,因为 。不过,您可以通过 Gemini API:

import PIL.Image

sample_file_2 = PIL.Image.open('piranha.jpg')
sample_file_3 = PIL.Image.open('firefighter.jpg')

请注意,这些内嵌数据调用并不包括 例如获取文件元数据、列出删除文件

使用多张图片进行提示

您可以向 Gemini API 提供图片和文字的任意组合, 适合模型的上下文窗口。此示例提供了一个简短的文本 和之前上传的三张图片。

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Write an advertising jingle showing how the product in the first image could solve the problems shown in the second two images."

response = model.generate_content([prompt, sample_file, sample_file_2, sample_file_3])

Markdown(">" + response.text)

获取对象的边界框

您可以向模型询问对象的边界框坐标 图片中。在对象检测方面,Gemini 模型经过训练, 将这些坐标表示为 [0,1] 范围内的相对宽度或高度,并按 1000 并转换为整数。实际上,给定的坐标代表的是 1000x1000 版本的原始图片,需要将其转换回 原始图片的尺寸。

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Return a bounding box for the piranha. \n [ymin, xmin, ymax, xmax]"
response = model.generate_content([piranha, prompt])

print(response.text)

要将这些坐标转换为原始图片的尺寸,请执行以下操作:

  1. 将每个输出坐标除以 1000。
  2. 将 x 坐标乘以原始图片宽度。
  3. 将 y 坐标乘以原始图片高度。

使用视频提示

在本教程中,您将使用 File API 上传视频并生成 根据这些图片生成内容。

技术详情(视频)

Gemini 1.5 Pro 和 Flash 最多支持一小时的视频数据。

视频必须采用以下某种视频格式 MIME 类型:

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

File API 服务以每秒 1 帧的速度从视频中提取图片帧 (FPS) 和 1Kbps 的音频(单通道),每秒添加时间戳。 为了改进推理,这些比率未来可能会发生变化。

各个帧包含 258 个词元,而音频的帧速率为每秒 32 个词元。包含 元数据,视频每秒生成约 300 个词元,这意味着 100 万个词元。 窗口可以容纳略短于一小时的视频。

若要询问关于带有时间戳的地点的问题,请使用以下格式:MM:SS,其中 前两位数字代表分钟,最后两位数字代表 秒。

为了达到最佳效果,请注意以下事项:

  • 每个提示使用一个视频。
  • 如果使用的是单个视频,请将文本提示放置在视频后面。

使用 File API 上传视频文件

File API 直接接受视频文件格式。此示例使用 NASA 短片 “木星的大红斑收缩和增长”。 图片来源:戈达德太空飞行中心 (GSFC)/大卫·拉德 (David Ladd)(2018 年)。

“木星的大红斑收缩和增长”属于公共领域,并且没有 不显示可识别个人身份。 (NASA 图像和媒体使用指南。)

首先检索短视频:

!wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4

使用 File API 上传视频并输出 URI。

# Upload the video and print a confirmation.
video_file_name = "GreatRedSpot.mp4"

print(f"Uploading file...")
video_file = genai.upload_file(path=video_file_name)
print(f"Completed upload: {video_file.uri}")

验证文件上传并检查状态

通过调用 files.get 方法。

import time

# Check whether the file is ready to be used.
while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

使用视频和文字提示

在上传的视频处于 ACTIVE 状态后,您可以将 GenerateContent 请求指定该视频的 File API URI。选择 并为其提供上传的视频和文本提示。

# Create the prompt.
prompt = "Summarize this video. Then create a quiz with answer key based on the information in the video."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([video_file, prompt],
                                  request_options={"timeout": 600})

# Print the response, rendering any Markdown
Markdown(response.text)

参考内容中的时间戳

您可以使用 MM:SS 形式的时间戳来引用 视频。

# Create the prompt.
prompt = "What are the examples given at 01:05 and 01:19 supposed to show us?"

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

转录视频并提供视觉说明

如果视频不是快节奏视频(采样每秒仅 1 帧), 您可以转录视频,并为每个镜头添加视觉描述。

# Create the prompt.
prompt = "Transcribe the audio, giving timestamps. Also provide visual descriptions."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

列出文件

您可以使用 File API 列出使用 File API 上传的所有文件及其 URI files.list_files()

# List all files
for file in genai.list_files():
    print(f"{file.display_name}, URI: {file.uri}")

删除文件

使用 File API 上传的文件会在 2 天后自动删除。您 也可以使用 files.delete() 手动删除它们。

# Delete file
genai.delete_file(video_file.name)
print(f'Deleted file {video_file.uri}')

后续步骤

本指南介绍了如何使用 generateContent和 根据图片和视频输入生成文本输出。如需了解详情, 请参阅以下资源:

  • 提示使用媒体文件: Gemini API 支持根据文本、图片、音频和视频数据生成提示,还支持 称为多模态提示。
  • 系统说明:系统 可让您根据自己的具体使用偏好, 需求和用例。
  • 安全指南:有时是生成式 AI 模型会产生意外的输出,例如不准确、 有偏见或令人反感的内容。后期处理和人工评估对于 以限制此类输出造成伤害的风险。