设置 Google Generative AI API
要在 Python 中开始使用 Imagen 3,我们需要先完成几个关键步骤。首先,创建一个 Google Cloud 项目。项目就绪后,需要生成一个 API 密钥。该密钥将允许我们的 Python 代码与 Imagen 3 服务交互。
创建 Google Cloud 项目
创建 Google 的 AI API 所需的第一步是新建一个 Google Cloud 项目。让我们一起完成这个流程:
- 访问 Google Cloud 控制台: 我们先前往Google Cloud Console。您需要使用 Google 账号登录。
- 选择或创建新项目: 在控制台顶部导航栏找到项目下拉菜单。点击后可选择现有项目或创建新项目。我们选择 "New Project" 继续。
- 填写项目信息: 将出现一个简要表单,要求填写基本信息。项目名称可自定,但选择描述性名称更有帮助,后续也可更改。我们将使用
Imagen-tutorial。Organization 可留空。

创建 API 密钥
现在 Google Cloud 项目已创建,我们可以前往 Google AI Studio 的API 密钥页面创建一个 API 密钥。
要创建密钥,点击 "Create API key" 按钮:

在弹窗中,输入我们上面创建的项目名称,选择它,然后点击 "Create API key in existing project":

复制密钥,并在我们将编写 Python 脚本的同一文件夹中创建一个名为 .env 的文件。.env 文件的内容应为:
GEMINI_API_KEY=<paste_your_key_here>
结算账户
如果我们现在尝试使用该 API 密钥,会收到错误提示 "Imagen API is only accessible to billed users at this time."。这是因为该 API 并非免费使用,我们需要先将一个结算账户关联到项目,才能使用它。
在撰写本文时,使用 Imagen 3 生成一张图像的价格为 $0.03。更多信息请查看其定价页面。
要添加结算账户,请在 Google AI Studio 中 API 密钥旁边点击 "Set up Billing" 按钮。

这会将我们重定向到 Google Cloud 官网,我们可以点击 "Link a billing account" 选择现有结算账户,或点击 "Manage billing accounts" 创建新账户。

假设我们还没有结算账户,于是选择 "Manage billing accounts"。在页面左上角有一个 "Create account" 按钮。创建账户需要填写个人信息并添加信用卡以处理付款。
使用 Python 通过 Imagen 3 生成图像
使用 Anaconda 搭建环境
在本教程中,我们使用 Anaconda。这是一款流行的平台,可简化包管理和项目搭建,使运行 Python 脚本更加容易。
您可以从其官方网站安装 Anaconda。
要设置 Anaconda 环境,打开终端并:
- 创建环境:
conda create -n imagen python=3.9。该命令会创建一个名为imagen的环境,使用 Python 3.9 版本。 - 激活环境:
conda activate imagen。 - 安装 Google 生成式 AI 包:
pip install -q -U google-genai。 - 安装图像处理包以处理生成的图像:
pip install pillow。 - 安装用于加载 API 密钥的包:
pip install python-dotenv
我们也可以在不使用 Anaconda 的情况下直接安装这些包,但可能会与现有包产生冲突,或当前的 Python 安装使用了不同的版本。使用 Anaconda 可以避免这些潜在问题。
生成我们的第一张图像
现在我们已准备好开始使用 Imagen 3。请在与 .env. 文件相同的文件夹中创建一个新的 Python 脚本,例如 gen_image.py。
首先,我们导入必要的包:
# Google generative AI:
from google import genai
from google.genai import types
# Packages to process the generated image:
from PIL import Image
from io import BytesIO
# Packages to load the .env file:
import os
from dotenv import load_dotenv
接着,从 .env 文件加载 API 密钥:
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")
然后,初始化 Google 生成式 AI 客户端。该对象用于与 Google API 通信:
client = genai.Client(api_key=api_key)
要生成图像,我们使用 client.models.generate_images() 函数:
prompt="""
A dog surfing at the beach
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=1,
)
)
最后,使用 Image 对象显示生成的图像:
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
效果如下:

文本生成
与其他文生图模型相比,Imagen 3 的一个有趣特性是具备生成文字的能力。让我们试试用新鲜茶叶拼出单词 “Tea”:
prompt="""
Word "tea" made from fresh tea leaves, white background
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
)
效果如下:

Imagen 3 的图像生成选项
图像生成选项通过 types.GenerateImagesConfig 提供。在上面的示例中,我们只指定了要生成的图像数量:
config=types.GenerateImagesConfig(
number_of_images=1,
)
本节我们将探索 Imagen 3 API 提供的其他选项。更多信息请查看官方文档。
生成多张图像
我们可以使用 number_of_images 参数在一次提示中生成多张图像。默认会生成四张图像。
让我们为一本漫画生成两张图像试试。
prompt="""
Single comic book panel of two people overlooking a destroyed city.
A speech bubble points from one of them and says: I guess this is the end.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=2,
)
)
效果如下:

这也是在图像中生成文本的另一个示例。尽管左侧图像包含了一些多余且不需要的文字,但通过生成多张图像,我们可以提高获得期望输出的概率。右侧图像几乎完全符合我们的提示。
控制纵横比
默认情况下,生成的图像是 1:1 的正方形。该模型支持以下纵横比:1:1、3:4、4:3、9:16 和 16:9。
让我们生成一张 9:16 的图像,用作手机壁纸:
prompt="""
A drone shot of a river flowing between mountains with a stormy sky.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
aspect_ratio="9:16",
)
)
效果如下:

安全级别过滤
文档提到我们可以使用 safety_filter_level 指定图像过滤级别。每张生成的图像都会获得一个概率分数,用于衡量图像不安全(如不当内容)的可能性。
设置安全级别过滤很重要,因为它有助于确保生成的内容恰当且符合用户偏好,从而为各类应用维护一个安全且尊重的环境。
文档称其支持三个级别:
BLOCK_LOW_AND_ABOVE:即使概率分数较低也会拦截图像。BLOCK_MEDIUM_AND_ABOVE:仅拦截概率分数为中或高的图像。BLOCK_ONLY_HIGH:仅拦截概率分数高的图像。
不过,经过实际测试,目前 API 只支持 BLOCK_LOW_AND_ABOVE 选项。提供其他值将导致报错。
人物生成功能
我们可以通过 person_generation 选项控制模型是否允许生成包含人物的图像。它提供两个选项:
DONT_ALLOW:包含人物的图像会被拦截。ALLOW_ADULT:允许生成包含人物(仅限成人)的图像。
默认选项为允许人物。例如,如果我们设置为不允许人物,并尝试生成一张有人做饭的图像,将不会得到任何结果。
prompt="""
A person cooking.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
person_generation="DONT_ALLOW",
)
)
print(response.generated_images)
输出如下:
None
为 Imagen 3 编写优质提示词
官方文档提供了全面的提示词指南,这里不再重复。以下是编写优质提示词的关键要点:
- 提示词写作基础:
- 主题: 聚焦于您想呈现的主体、人物或场景。
- 情境与背景: 描述主体所处的设置或环境。
- 风格: 指定您想要的艺术或摄影风格(如速写、绘画、照片)。
- 使用描述性语言: 借助细致的形容词与上下文来明确期望的输出。
- 参考特定风格: 使用知名艺术家或艺术流派来引导审美取向。
- 图像中的文字: 将文本限制在 25 个字符以内,并使用简洁明确的短语补充信息。
- 提示词参数化: 如果需要以相同风格生成多张图像,建议创建可复用的提示词模板,只把变化的部分作为输入。
- 摄影: 指定相机设置、镜头类型和光线以影响结果。
- 艺术: 使用诸如 "a painting of..." 或特定技法如 "watercolor painting of..." 等描述。
- 图像质量修饰词: 使用 "high-quality" 或 "4K" 等关键词以提升输出质量。
- 照片级真实感: 包含镜头类型与焦距等技术细节以增强真实感。
图像编辑与自定义
Imagen 3 还具备图像编辑和图像自定义的能力。遗憾的是,这些功能目前仍未全面开放,仅对特定用户可用。
例如,自定义功能允许我们根据提示对参考图像进行定制。在示例中,给出一张女性的照片,提示将其修改为同一人物手持橙子的图像。
关于这些功能及访问申请表的更多信息可在其网站上查看。
结语
在本教程中,我们学习了如何使用 Python 与 Google 的 Generative API 配合 Imagen 3 生成图像。总体来说,我对在测试 API 时获得的输出很满意。我认为结果质量高、AI 痕迹更少,更不易与真实图像区分。
在图像中处理文字的能力对品牌与营销很有用。总体而言,我认为该模型表现出色。我唯一的遗憾是功能尚未全部开放,因为我认为图像编辑甚至比图像生成更实用。


Imagen 3 是一款文本生成图像模型,能够以多种风格精准呈现细节丰富的场景,甚至可在图像中融入文字,适合用于广告与媒体内容创作等应用场景。
我们可以通过 Vertex AI Studio 界面使用 Imagen 3,或通过 API 将其直接集成到应用程序中。
在本教程中,我将解释如何使用 Google Generative API 与 Python 结合 Imagen 3 生成图像。我将通过实际示例带您完成环境搭建、编写必要代码,并将这项技术集成到您的项目中。无论您是想为应用加入动态图像,还是单纯出于好奇,本指南都将提供一条清晰的途径,帮助您以编程方式理解并使用 Imagen 3。