学习如安在API中运用DALLE生成或操作图画。

想要在ChatGPT中生成图画吗?请访问chat.openai.com。

介绍

图画API供给了三种与图画交互的办法:

  1. 依据文本提示从头开始创立图画(适用于DALLE 3和DALLE 2)
  2. 经过让模型替换预先存在图画的某些区域,根据新的文本提示来创立修改版本的图画(仅适用于DALLE 2)
  3. 创立现有图画的变体(仅适用于DALLE 2)

本指南涵盖了运用这三个API端点的基础知识,并供给了有用的代码示例。想要测验DALLE 3,请前往ChatGPT。想要测验DALLE 2,请查看DALLE预览应用。

用法

生成

图画生成端点答应您依据文本提示创立原始图画。在运用DALLE 3时,图画能够是1024×1024、1024×1792或1792×1024像素巨细。

默许情况下,图画以规范质量生成,但在运用DALLE 3时,您能够设置quality:”hd”以获得增强的细节。方形、规范质量的图画生成速度最快。

您能够运用DALLE 3一次恳求1张图画(经过进行并行恳求来恳求更多),或者运用DALLE 2并经过n参数一次恳求最多10张图画。

from openai import OpenAI
client = OpenAI()
response = client.images.generate(
  model="dall-e-3",
  prompt="a white siamese cat",
  size="1024x1024",
  quality="standard",
  n=1,
)
image_url = response.data[0].url

提示

随着DALLE 3的发布,出于安全考虑和为了增加更多细节(更详细的提示通常会产生更高质量的图画),模型现在会承受供给的默许提示,并主动重新编写它。

虽然目前无法禁用此功用,但您能够运用提示将输出更挨近您恳求的图画,办法是在提示中增加以下内容:I NEED to test how the tool works with extremely simple prompts. DO NOT add any detail, just use it AS-IS:

更新后的提示在数据呼应目标的 revised_prompt 字段中可见。

示例DALLE 3生成

PROMPT GENERATION
一张白色暹罗猫的照片。
[AI OpenAI-doc] 图画生成

每个图画能够作为URL或Base64数据回来,运用response_format参数。URL将在一小时后过期。

修改(仅适用于DALLE 2)

也称为“修补”,图画修改端点答应您经过上传图画和掩码来修改或扩展图画,指示应该替换哪些区域。掩码的通明区域指示图画应该进行修改的位置,提示应该描绘完整的新图画,而不仅仅是被擦除的区域。该端点能够完成咱们的DALLE预览应用程序中的修改器等体验。

from openai import OpenAI
client = OpenAI()
response = client.images.edit((
  model="dall-e-2",
  image=open("sunlit_lounge.png", "rb"),
  mask=open("mask.png", "rb"),
  prompt="A sunlit indoor lounge area with a pool containing a flamingo",
  n=1,
  size="1024x1024"
)
image_url = response.data[0].url
图画 掩码 输出
[AI OpenAI-doc] 图画生成
[AI OpenAI-doc] 图画生成
[AI OpenAI-doc] 图画生成

提示:一个阳光明媚的室内歇息区,里边有一个含有火烈鸟的游泳池。

上传的图画和掩码都必须是小于4MB的正方形PNG图画,而且它们的尺寸必须互相相同。掩码的非通明区域在生成输出时不会被运用,因而它们不一定需求像上面的示例相同与原始图画匹配。

变体(仅适用于DALLE 2)

图画变体端点答应您生成给定图画的变体。

from openai import OpenAI
client = OpenAI()
response = client.images.create_variation(
  model="dall-e-2",
  image=open("corgi_and_cat_paw.png", "rb"),
  n=1,
  size="1024x1024"
)
image_url = response.data[0].url
图画 输出
[AI OpenAI-doc] 图画生成
[AI OpenAI-doc] 图画生成

与修改端点相似,输入图画必须是小于4MB的正方形PNG图画。

内容管理

根据咱们的内容政策,对提示和图画进行过滤,当提示或图画被标记时回来过错。

特定言语的提示

运用内存中的图画数据

上面指南中的Python示例运用open函数从磁盘读取图画数据。在某些情况下,您可能将图画数据存储在内存中。下面是一个运用存储在BytesIO目标中的图画数据的示例API调用:

from io import BytesIO
from openai import OpenAI
client = OpenAI()
# This is the BytesIO object that contains your image data
byte_stream: BytesIO = [your image data]
byte_array = byte_stream.getvalue()
response = client.images.create_variation(
  image=byte_array,
  n=1,
  model="dall-e-2",
  size="1024x1024"
)

处理图画数据

在将图画传递给API之前进行操作可能很有用。以下是一个运用PIL调整图画巨细的示例:

from io import BytesIO
from PIL import Image
from openai import OpenAI
client = OpenAI()
# Read the image file from disk and resize it
image = Image.open("image.png")
width, height = 256, 256
image = image.resize((width, height))
# Convert the image to a BytesIO object
byte_stream = BytesIO()
image.save(byte_stream, format='PNG')
byte_array = byte_stream.getvalue()
response = client.images.create_variation(
  image=byte_array,
  n=1,
  model="dall-e-2",
  size="1024x1024"
)

过错处理

因为无效输入、速率限制或其他问题,API恳求可能会回来过错。能够运用try…except句子处理这些过错,而且过错概况能够在e.error中找到:

import openai
from openai import OpenAI
client = OpenAI()
try:
  response = client.images.create_variation(
    image=open("image_edit_mask.png", "rb"),
    n=1,
    model="dall-e-2",
    size="1024x1024"
  )
  print(response.data[0].url)
except openai.OpenAIError as e:
  print(e.http_status)
  print(e.error)