图像与视觉
了解如何理解或生成图像。
概述
在本指南中,您将了解如何使用OpenAI API构建涉及图像的应用程序。如果您已知自己想要构建的内容,请在下方找到您的用例以开始。如果您不确定从何开始,请继续阅读以获取概述。
图像相关用例概览
最新的语言模型可以处理图像输入并分析它们——这种能力被称为视觉。使用gpt-image-1,它们既可以分析视觉输入,也可以创建图像。
OpenAI API提供了多个端点,可以将图像作为输入进行处理或将其作为输出生成,从而使您能够构建强大的多模态应用程序。
| API | 支持的用例 |
|---|---|
| 响应API | 分析图像并将其用作输入和/或生成图像作为输出 |
| 图像API | 生成图像作为输出,可选地使用图像作为输入 |
| 聊天完成API | 分析图像并将其用作输入以生成文本或音频 |
要了解有关我们的模型支持的输入和输出模态的更多信息,请参阅我们的模型页面。
生成或编辑图像
您可以使用图像API或响应API生成或编辑图像。
我们最新的图像生成模型gpt-image-1是一个原生多模态大型语言模型。它可以理解文本和图像,并利用其广泛的世界知识生成具有更好指令遵循和上下文意识的图像。
相比之下,我们还提供专门的图像生成模型——DALL·E 2和3,它们不具备与GPT图像相同的内在世界理解能力。
使用世界知识进行图像生成
DALL·E模型和GPT图像之间的区别在于,原生多模态语言模型可以利用其对世界的视觉理解,在没有参考的情况下生成逼真的图像。
例如,如果您提示GPT图像生成一个放置最受欢迎的半宝石的玻璃柜,该模型知道足够的信息来选择紫水晶、玫瑰石英、翡翠等宝石,并以逼真的方式描绘它们。
分析图像
视觉是模型“看到”和理解图像的能力。如果图像中有文本,模型也可以理解该文本。它可以理解大多数视觉元素,包括对象、形状、颜色和纹理,尽管存在某些限制。
将图像作为输入提供给模型
您可以通过多种方式在生成请求中提供图像作为输入:
- 提供图像文件的完全限定URL
- 提供以Base64编码的数据URL形式的图像
- 提供文件ID(通过文件API创建)
您可以通过在content数组中包含多个图像,在单个请求中提供多个图像作为输入,但请记住,图像计为令牌并将相应计费。
通过URL传递
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-mini",
"input": [
{
"role": "user",
"content": [
{"type": "input_text", "text": "这张图片里有什么?"},
{
"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"
}
]
}
]
}'
通过Base64编码的图像传递
import base64
from openai import OpenAI
client = OpenAI()
# 编码图像的函数
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# 您的图像路径
image_path = "path_to_your_image.jpg"
# 获取Base64字符串
base64_image = encode_image(image_path)
response = client.responses.create(
model="gpt-4.1-mini",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "这张图片里有什么?"},
{
"type": "input_image",
"image_url": f"data:image/jpeg;base64,{base64_image}",
},
],
}
],
)
print(response.output_text)
#### 通过文件ID传递
```python
from openai import OpenAI
client = OpenAI()
# 使用文件API创建文件的函数
def create_file(file_path):
with open(file_path, "rb") as file_content:
result = client.files.create(
file=file_content,
purpose="vision",
)
return result.id
# 获取文件ID
file_id = create_file("path_to_your_image.jpg")
response = client.responses.create(
model="gpt-4.1-mini",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "这张图片里有什么?"},
{
"type": "input_image",
"file_id": file_id,
},
],
}],
)
print(response.output_text)
图像输入要求
输入图像必须满足以下要求才能在API中使用。
| 支持的文件类型 | PNG (.png)、JPEG (.jpeg和.jpg)、WEBP (.webp)、非动画GIF (.gif) |
|---|---|
| 大小限制 | 每个请求的总有效负载大小最多为50 MB,每个请求最多500个图像输入 |
| 其他要求 | 无水印或标志、无NSFW内容、足够清晰以便人类理解 |
指定图像输入详细级别
detail参数告诉模型在处理和理解图像时使用的详细程度(low、high或auto以让模型决定)。如果您跳过该参数,模型将使用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"。
限制
虽然具有视觉功能的模型功能强大且可用于多种情况,但了解这些模型的局限性也很重要。以下是一些已知的限制:
- 医学图像:模型不适合解释专业医学图像(如CT扫描),不应用于医疗建议。
- 非英语:模型在处理包含非拉丁字母(如日语或韩语)的图像时可能表现不佳。
- 小字体:放大图像中的文本以提高可读性,但避免裁剪重要细节。
- 旋转:模型可能会误解旋转或倒置的文本和图像。
- 视觉元素:模型可能难以理解颜色或样式(如实线、虚线或点线)变化的图形或文本。
- 空间推理:模型在需要精确空间定位的任务(如识别棋盘位置)上表现不佳。
- 准确性:模型在某些情况下可能会生成不正确的描述或标题。
- 图像形状:模型在处理全景和鱼眼图像时表现不佳。
- 元数据和调整大小:模型不处理原始文件名或元数据,图像在分析前会被调整大小,影响其原始尺寸。
- 计数:模型可能会对图像中的对象数量给出近似值。
- CAPTCHAS:出于安全原因,我们的系统会阻止提交CAPTCHAS。
计算成本
图像输入以令牌计量和收费,与文本输入相同。图像如何转换为文本令牌输入取决于模型。您可以在定价页面的常见问题部分找到视觉定价计算器。
GPT-4.1-mini、GPT-4.1-nano、o4-mini
图像输入以令牌计量和收费,基于其尺寸。图像的令牌成本确定如下:
A. 计算覆盖图像所需的32px x 32px补丁数量(补丁可能超出图像边界;超出边界的像素被视为黑色)。
raw_patches = ceil(width/32) × ceil(height/32)
B. 如果补丁数量超过1536,我们会缩小图像,使其可以用不超过1536个补丁覆盖。
r = √(32²×1536/(width×height))
r = r × min( floor(width×r/32) / (width×r/32), floor(height×r/32) / (height×r/32) )
C. 令牌成本是补丁数量,上限为1536个令牌。
image_tokens = ceil(resized_width/32) × ceil(resized_height/32)
D. 根据模型应用乘数以获得总令牌数。
| 模型 | 乘数 |
|---|---|
gpt-5-mini | 1.62 |
gpt-5-nano | 2.46 |
gpt-4.1-mini | 1.62 |
gpt-4.1-nano | 2.46 |
o4-mini | 1.72 |
GPT-4o、GPT-4.1、GPT-4o-mini、CUA和o系列(o4-mini除外)
图像的令牌成本由两个因素决定:大小和细节。
任何带有"detail": "low"的图像都会花费一组固定的基本令牌数。此数量因模型而异(见下表)。要计算带有"detail": "high"的图像的成本,我们执行以下操作:
- 缩放以适应2048px x 2048px的正方形,保持原始纵横比
- 缩放使图像的最短边长为768px
- 计算图像中512px正方形的数量——每个正方形花费一定数量的令牌(见下表)
- 将基本令牌添加到总数中
| 模型 | 基本令牌 | 图块令牌 |
|---|---|---|
| gpt-5, gpt-5-chat-latest | 70 | 140 |
| 4o, 4.1, 4.5 | 85 | 170 |
| 4o-mini | 2833 | 5667 |
| o1, o1-pro, o3 | 75 | 150 |
| computer-use-preview | 65 | 129 |
GPT Image 1
对于GPT Image 1,我们以与上述相同的方式计算图像输入的成本,只是我们将图像缩小,使最短边为512px而不是768px。价格取决于图像的尺寸和输入保真度。
当输入保真度设置为低时,基本成本为65个图像令牌,每个图块成本为129个图像令牌。使用高输入保真度时,除了上述描述的图像令牌外,我们还会根据图像的纵横比添加一定数量的令牌。
- 如果您的图像是正方形,我们会额外添加4160个输入图像令牌。
- 如果它更接近竖向或横向,我们会额外添加6240个令牌。
我们在令牌级别处理图像,因此我们处理的每个图像都会计入您的每分钟令牌(TPM)限制。
有关图像处理的最精确和最新估计,请使用我们的图像定价计算器,点此查看。