Skip to content

Генерация изображений

Научитесь создавать или изменять изображения с помощью DALL·E.

Введение

API изображения предоставляет три метода взаимодействия с изображениями:

  1. Создание изображений с нуля по текстовому запросу (DALL·E 3 и DALL·E 2).
  2. Создание отредактированных версий изображений, заменяя некоторые области на основе нового текстового запроса (DALL·E 2 только).
  3. Создание вариаций существующего изображения (DALL·E 2 только).

В этом руководстве основное внимание уделяется использованию трех этих конечных точек API с полезными примерами кода. Чтобы попробовать DALL·E 3, перейдите в ChatGPT.

Использование

Генерации

Конечная точка генерации изображений позволяет создавать оригинальное изображение по текстовому запросу. При использовании DALL·E 3 изображения могут иметь размер 1024x1024, 1024x1792 или 1792x1024 пикселей.

По умолчанию изображения создаются в стандартном качестве, но при использовании DALL·E 3 вы можете задать качество: "hd" для улучшенной детализации. Квадратные изображения стандартного качества — самые быстрые для генерации.

Вы можете запросить 1 изображение за раз с DALL·E 3 (запросите больше, делая параллельные запросы) или до 10 изображений за раз, используя DALL·E 2 с параметром n.

Генерация изображения

Пример кода генерации изображений с помощью DALL·E 3

Python
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
js
const response = await openai.images.generate({
  model: "dall-e-3",
  prompt: "a white siamese cat",
  n: 1,
  size: "1024x1024",
});
image_url = response.data[0].url;
bash
curl https://api.openai.com/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "dall-e-3",
    "prompt": "a white siamese cat",
    "n": 1,
    "size": "1024x1024"
  }'

Подсказки

С выходом DALL·E 3, теперь модель принимает заранее заданный запрос и автоматически переписывает его для повышения безопасности и добавления большего количества деталей (более детализированные запросы обычно приводят к более качественным изображениям).

Хотя эту функцию в настоящее время отключить невозможно, вы можете использовать подсказки, чтобы получить результаты, более близкие к вашему запросу, добавив следующее в ваш запрос: Я должен проверить, как инструмент работает с предельно простыми запросами. НЕ добавляйте никаких деталей, используйте как есть.

Обновленный запрос виден в поле revised_prompt объекта ответа данных.

Пример генераций DALL·E 3

ЗапросГенерация
Фотография белого сиамского кота.Фотография белого сиамского кота

Каждое изображение может быть возвращено либо в виде URL, либо в формате данных Base64, используя параметр response_format. URL-ы истекают через час.

Редактирование (только DALL·E 2)

Также известная как "перекрашивание", конечная точка редактирования изображений позволяет редактировать или расширять изображение путем загрузки изображения и маски, указывающей, какие области должны быть заменены. Прозрачные области маски указывают на то, где изображение должно быть отредактировано, и запрос должен описать новое полное изображение, а не только удаленную часть. Эта конечная точка может включить такие функции, как редактирование изображений с DALL·E в ChatGPT Plus.

Редактирование изображения

Python
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
js
const response = await openai.images.edit({
  model: "dall-e-2",
  image: fs.createReadStream("sunlit_lounge.png"),
  mask: fs.createReadStream("mask.png"),
  prompt: "A sunlit indoor lounge area with a pool containing a flamingo",
  n: 1,
  size: "1024x1024"
});
image_url = response.data[0].url;
bash
curl https://api.openai.com/v1/images/edits \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F model="dall-e-2" \
  -F image="@sunlit_lounge.png" \
  -F mask="@mask.png" \
  -F prompt="A sunlit indoor lounge area with a pool containing a flamingo" \
  -F n=1 \
  -F size="1024x1024"

Prompt: солнечная внутренняя зона отдыха с бассейном, в котором находится фламинго

ИзображениеМаскаРезультат
измененное оригинаольное изображениеизменение маскирезультат изменения изображения

Загруженные изображения и маску должны быть квадратными PNG изображениями размером менее 4 МБ, и должны иметь одинаковые размеры. Непрозрачные области маски не используются при генерации изображения, поэтому они необязательно должны совпадать с оригинальным изображением, как в приведенном примере.

Вариации (только DALL·E 2)

Конечная точка вариантов изображений позволяет создавать вариации заданного изображения.

Создание вариации изображения

python
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
js
const response = await openai.images.createVariation({
  model: "dall-e-2",
  image: fs.createReadStream("corgi_and_cat_paw.png"),
  n: 1,
  size: "1024x1024"
});
image_url = response.data[0].url;
bash
curl https://api.openai.com/v1/images/variations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F model="dall-e-2" \
  -F image="@corgi_and_cat_paw.png" \
  -F n=1 \
  -F size="1024x1024"
ИзображениеРезультат
Вариация оригинального изображенияРезультат вариации изобрежения

Как и в случае с конечной точкой редактирования, входное изображение должно быть квадратным PNG изображением размером менее 4 МБ.

Проверка контента

Запросы и изображения фильтруются на основе нашей политики контента и возвращают ошибку, если запрос или изображение отмечены.

Советы по конкретным языкам

Node.js

Использование данных изображений из памяти

Примеры на Node.js, приведенные выше, используют модуль fs для чтения данных изображений с диска. В некоторых случаях у вас могут быть данные изображения в памяти. Вот пример вызова API, который использует данные изображения, сохраненные в объекте Buffer в Node.js:

javascript
import OpenAI from "openai";

const openai = new OpenAI();

// Это объект Buffer, который содержит ваши данные изображения
const buffer = [your image data];

// Установите `name`, оканчивающийся на .png, чтобы API знал, что это PNG изображение
buffer.name = "image.png";

async function main() {
  const image = await openai.images.createVariation({ model: "dall-e-2", image: buffer, n: 1, size: "1024x1024" });
  console.log(image.data);
}
main();

Работа с TypeScript

Если вы используете TypeScript, вы можете столкнуться с некоторыми особенностями аргументов файлов изображений. Вот пример обхода несоответствия типов, явно преобразовав аргумент:

typescript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  // Преобразуйте ReadStream в `any`, чтобы удовлетворить компилятор TypeScript
  const image = await openai.images.createVariation({
    image: fs.createReadStream("image.png") as any,
  });

  console.log(image.data);
}
main();

А вот похожий пример для данных изображений из памяти:

typescript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

// Это объект Buffer, который содержит ваши данные изображения
const buffer: Buffer = [your image data];

// Преобразуйте буфер в `any`, чтобы мы могли установить свойство `name`
const file: any = buffer;

// Установите `name`, оканчивающийся на .png, чтобы API знал, что это PNG изображение
file.name = "image.png";

async function main() {
  const image = await openai.images.createVariation({
    file,
    n: 1,
    size: "1024x1024"
  });
  console.log(image.data);
}
main();

Обработка ошибок

Запросы к API потенциально могут возвращать ошибки из-за неверных вводов, ограничений скорости или других проблем. Эти ошибки можно обработать с помощью оператора try...catch, и подробности ошибки можно найти либо в error.response, либо в error.message:

javascript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
    try {
        const image = await openai.images.createVariation({
            image: fs.createReadStream("image.png"),
            n: 1,
            size: "1024x1024",
        });
        console.log(image.data);
    } catch (error) {
        if (error.response) {
            console.log(error.response.status);
            console.log(error.response.data);
        } else {
            console.log(error.message);
        }
    }
}

main();
Python

Использование данных изображений из памяти (Python)

Примеры на Python, приведенные выше, используют функцию open для чтения данных изображений с диска. В некоторых случаях у вас могут быть данные изображения в памяти. Вот пример вызова API, который использует данные изображения, хранящиеся в объекте BytesIO:

python
from io import BytesIO
from openai import OpenAI
client = OpenAI()

# Это объект BytesIO, содержащий ваши данные изображения
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 для изменения размера изображения:

python
from io import BytesIO
from PIL import Image
from openai import OpenAI
client = OpenAI()

# Чтение файла изображения с диска и изменение его размера
image = Image.open("image.png")
width, height = 256, 256
image = image.resize((width, height))

# Преобразование изображения в объект BytesIO
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"
)

Обработка ошибок (Python)

Запросы к API потенциально могут возвращать ошибки из-за неверных вводов, ограничений скорости или других проблем. Эти ошибки можно обработать с помощью оператора try...except, и подробности ошибки можно найти в e.error:

python
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)

Все указанные примеры демонстрируют возможности и использууются для вашего удобства в разработке приложений с DALL·E.

Создано при поддержке AITUNNEL