引言
随着人工智能技术的快速发展,OpenAI API 提供了强大的图像生成和处理能力,使开发者能够构建多模态应用程序。本文是OpenAI API系列的第一篇,将重点介绍如何使用OpenAI API生成图像,包括相关API端点、模型选择、代码实现以及成本计算等内容。通过本文,您将了解如何利用OpenAI的最新图像生成技术,为您的应用程序添加视觉内容生成功能。
正文内容
1. OpenAI图像生成概述
OpenAI API提供了多个端点来处理图像作为输入或生成图像作为输出,使开发者能够构建强大的多模态应用程序。主要的API端点包括:
- Responses API:分析图像并将其用作输入和/或生成图像作为输出
- Images API:生成图像作为输出,可选择使用图像作为输入
- Chat Completions API:分析图像并将其用作生成文本或音频的输入
OpenAI最新的图像生成模型gpt-image-1是一种原生多模态大型语言模型。它可以理解文本和图像,并利用其广泛的世界知识来生成具有更好指令遵循和上下文感知的图像。相比之下,OpenAI还提供专门的图像生成模型DALL·E 2和3,它们对世界没有与GPT Image相同的内在理解。
2. 使用Responses API生成图像
Responses API是生成图像的主要方式之一。以下是一个使用Python调用Responses API生成图像的示例代码:
from openai import OpenAI
import base64
client = OpenAI()
response = client.responses.create(
model="gpt-4.1-mini",
input="Generate an image of gray tabby cat hugging an otter with an orange scarf",
tools=[{"type": "image_generation"}],
)
# Save the image to a file
image_data = [
output.result
for output in response.output
if output.type == "image_generation_call"
]
if image_data:
image_base64 = image_data[0]
with open("cat_and_otter.png", "wb") as f:
f.write(base64.b64decode(image_base64))
这段代码会生成一张灰虎斑猫戴着橙色围巾拥抱水獭的图像,并将结果保存为PNG文件。
3. 世界知识在图像生成中的应用
GPT Image与DALL·E模型的关键区别在于,原生多模态语言模型可以利用其对世界的视觉理解来生成逼真的图像,包括现实生活中的细节,而无需参考。例如,如果您提示GPT Image生成一张玻璃柜的图像,上面装有最受欢迎的半宝石,模型就会知道足够的知识来选择紫水晶、玫瑰石英、玉石等宝石,并以逼真的方式描绘它们。
4. 分析图像内容
OpenAI的模型具有"视觉"能力,能够"看到"和理解图像。如果图像中有文本,模型也可以理解文本。它可以理解大多数视觉元素,包括物体、形状、颜色和纹理,尽管存在一些限制。
开发者可以通过多种方式将图像作为生成请求的输入提供:
- 提供图像文件的完全限定URL
- 提供Base64编码的数据URL形式的图像
- 提供文件ID(使用Files API创建)
以下是一个分析图像内容的代码示例:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4.1-mini",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "what's in this image?"},
{
"type": "input_image",
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
},
],
}],
)
print(response.output_text)
5. 图像输入要求
输入图像必须满足以下要求才能在API中使用:
- 支持的文件类型:PNG (.png)、JPEG (.jpeg和.jpg)、WEBP (.webp)、非动画GIF (.gif)
- 大小限制:每个请求的总有效负载大小高达50MB,每个请求最多500个单独的图像输入
- 其他要求:无水印或徽标,无NSFW内容,足够清晰,人类可以理解
6. 指定图像输入细节级别
detail参数告诉模型在处理和理解图像时要使用的细节级别(低、高或自动让模型决定)。如果跳过该参数,则模型将使用auto。
示例:
{
"type": "input_image",
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
"detail": "high"
}
开发者可以使用"detail": "low"来保存令牌并加快响应速度。这允许模型以85个令牌的预算处理图像。模型接收图像的低分辨率512px x 512px版本。如果您的用例不需要模型查看高分辨率细节(例如,如果您询问图像中的主要形状或颜色),这很好。
另一方面,如果您希望模型更好地理解图像,您可以使用"detail": "high"。
7. 图像生成的局限性
虽然具有视觉功能的模型功能强大并且可以在许多情况下使用,但了解这些模型的局限性非常重要。以下是一些已知的限制:
- 医学图像:该模型不适合解释CT扫描等专业医学图像,不应用于医疗建议
- 非英语:在处理带有非拉丁字母文本(例如日语或韩语)的图像时,模型可能无法发挥最佳性能
- 小文本:放大图像中的文本以提高可读性,但避免裁剪重要细节
- 旋转:模型可能会误解旋转或颠倒的文本和图像
- 视觉元素:模型可能难以理解颜色或样式(如实线、虚线或虚线)变化的图形或文本
- 空间推理:该模型难以完成需要精确空间定位的任务,例如识别国际象棋位置
- 准确性:在某些情况下,模型可能会生成不正确的描述或标题
- 图像形状:模型在处理全景和鱼眼图像时遇到困难
- 元数据和调整大小:模型不处理原始文件名或元数据,并且在分析之前会调整图像大小,从而影响其原始尺寸
- 计数:模型可以给出图像中物体的近似计数
- 验证码:出于安全原因,系统会阻止提交验证码
8. 计算成本
图像输入按令牌计量并收费,就像文本输入一样。图像转换为文本标记输入的方式因模型而异。您可以在定价页面的常见问题解答部分找到视觉定价计算器。
对于GPT-4.1-mini、GPT-4.1-nano、o4-mini模型,图像输入根据其尺寸以令牌计量和收费。图像的代币成本确定如下:
- 计算完全覆盖图像所需的32px x 32px色块数
- 如果补丁数量超过1536个,缩小图像使其被不超过1536个补丁覆盖
- 代币成本为补丁数量,上限为1536个代币
- 根据模型应用乘数来获得总代币
示例计算:
- 1024 x 1024图像是1024个代币
- 1800 x 2400图像是1452个代币
对于GPT 4o、GPT-4.1、GPT-4o-mini、CUA和o系列(除o4-mini外),图像的代币成本由两个因素决定:大小和细节。
- 任何带有"detail": "low"的图像都需要花费一组基本数量的令牌
要计算具有"detail": "high"的图像的成本:
- 缩放以适合2048px x 2048px的正方形,保持原始纵横比
- 缩放,使图像的最短边长为768px
- 计算图像中512px方块的数量——每个方块需要一定数量的代币
- 将基本代币添加到总数中
9. GPT Image 1的特殊处理
对于GPT Image 1,计算图像输入成本的方式与上述类似,只是缩小图像使最短边为512px而不是768px。价格取决于图像的尺寸和输入保真度:
- 当输入保真度设置为低时,基本成本为65个图像令牌,每个图块花费129个图像令牌
当使用高输入保真度时,除了上述图像标记之外,还会根据图像的纵横比添加一定数量的标记:
- 如果图像是方形的,添加4096个额外的输入图像令牌
- 如果更接近纵向或横向,添加6144个额外的标记
结论
本文详细介绍了如何使用OpenAI API生成图像,包括可用的API端点、模型选择、代码实现、图像输入要求、细节级别控制以及成本计算等方面。OpenAI提供的图像生成能力,特别是gpt-image-1模型,能够利用其对世界的视觉理解生成包含现实生活细节的逼真图像,为开发者构建多模态应用程序提供了强大工具。
通过合理选择模型和参数,开发者可以平衡图像质量与成本,创建满足特定需求的视觉内容生成解决方案。同时,了解模型的局限性对于设计健壮的应用程序至关重要。在后续文章中,我们将深入探讨OpenAI API的其他图像处理功能和应用场景。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。