<ph type="x-smartling-placeholder">
前往 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)
要将这些坐标转换为原始图片的尺寸,请执行以下操作:
- 将每个输出坐标除以 1000。
- 将 x 坐标乘以原始图片宽度。
- 将 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
和
根据图片和视频输入生成文本输出。如需了解详情,
请参阅以下资源: