Перейти к основному содержанию
OpenAI сервис редактирования изображений позволяет передавать любое количество изображений и команд, выводя измененные изображения. Этот документ в основном описывает процесс использования OpenAI Images Edits API, с помощью которого мы можем легко использовать официальные функции редактирования изображений OpenAI.

Процесс заявки

Чтобы использовать OpenAI Images Edits API, сначала можно перейти на страницу OpenAI Images Edits API и нажать кнопку «Acquire», чтобы получить необходимые для запроса учетные данные: Если вы еще не вошли в систему или не зарегистрированы, вас автоматически перенаправит на страницу входа, пригласив зарегистрироваться и войти в систему, после чего вы автоматически вернетесь на текущую страницу. При первой подаче заявки будет предоставлен бесплатный лимит, который позволяет бесплатно использовать этот API.

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

Теперь можно использовать код для вызова, ниже приведен пример вызова с помощью CURL:
curl -s -D >(grep -i x-request-id >&2) \
  -o >(jq -r '.data[0].b64_json' | base64 --decode > gift-basket.png) \
  -X POST "https://api.acedata.cloud/v1/images/edits" \
  -H "Authorization: Bearer {token}" \
  -F "model=gpt-image-1" \
  -F "image[]=@test.png" \
  -F 'prompt=Create a lovely gift basket with these this items in it'
При первом использовании этого интерфейса нам необходимо заполнить как минимум четыре поля: одно из них — authorization, которое можно выбрать из выпадающего списка. Другой параметр — model, model — это категория модели, которую мы выбираем для использования на официальном сайте OpenAI, здесь у нас в основном есть 1 модель, подробности можно посмотреть в предоставленной модели. Еще один параметр — prompt, prompt — это подсказка, которую мы вводим для генерации изображения. Последний параметр — image, этот параметр требует путь к изображению, которое нужно редактировать, изображение для редактирования показано на следующем рисунке:

Пример кода для вызова с аналогичным эффектом на Python:
import base64
from openai import OpenAI
client = OpenAI()

prompt = """
Generate a photorealistic image of a gift basket on a white background 
labeled 'Relax & Unwind' with a ribbon and handwriting-like font, 
containing all the items in the reference pictures.
"""

result = client.images.edit(
    model="gpt-image-1",
    image=[
        open("test.png", "rb")
    ],
    prompt=prompt
)

image_base64 = result.data[0].b64_json
image_bytes = base64.b64decode(image_base64)

# Save the image to a file
with open("gift-basket.png", "wb") as f:
    f.write(image_bytes)
Для вызова с помощью Python нам нужно сначала импортировать две переменные окружения: одну OPENAI_BASE_URL, которую можно установить как https://api.acedata.cloud/openai, и другую переменную с учетными данными OPENAI_API_KEY, это значение получено из authorization, в Mac OS можно установить переменные окружения с помощью следующей команды:
export OPENAI_BASE_URL=https://api.acedata.cloud/openai
export OPENAI_API_KEY={token} 
После вызова мы обнаружим, что в текущем каталоге будет создано изображение gift-basket.png, конкретный результат будет следующим:

Таким образом, мы завершили операцию редактирования изображения, в настоящее время официальные задачи Edits поддерживают только две модели: dall-e-2, gpt-image-1.

Асинхронный обратный вызов

Поскольку время редактирования изображений с помощью OpenAI Images Edits API может быть относительно долгим, если API долго не отвечает, HTTP-запрос будет поддерживать соединение, что приведет к дополнительному потреблению системных ресурсов, поэтому этот API также предоставляет поддержку асинхронного обратного вызова. Общий процесс таков: когда клиент инициирует запрос, дополнительно указывается поле callback_url, после того как клиент инициирует API-запрос, API немедленно возвращает результат, содержащий информацию о поле task_id, представляющем текущий идентификатор задачи. Когда задача завершена, результат редактирования изображения будет отправлен на указанный клиентом callback_url в формате POST JSON, который также включает поле task_id, таким образом, результат задачи можно связать по ID. Давайте рассмотрим, как это работает на примере. Во-первых, Webhook обратный вызов — это служба, которая может принимать HTTP-запросы, разработчики должны заменить его на URL своего собственного HTTP-сервера. Для удобства демонстрации используется публичный пример сайта Webhook https://webhook.site/, открыв этот сайт, вы получите URL Webhook, как показано на рисунке: Скопировав этот URL, вы можете использовать его в качестве Webhook, пример здесь: https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab. Далее мы можем установить поле callback_url на указанный выше URL Webhook, а также заполнить соответствующие параметры, как показано в следующем коде:
curl -X POST "https://api.acedata.cloud/v1/images/edits" \
  -H "Authorization: Bearer {token}" \
  -F "model=gpt-image-1" \
  -F "image[]=@test.png" \
  -F "prompt=Create a lovely gift basket with these items in it" \
  -F "callback_url=https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
После вызова можно сразу получить результат, как показано ниже:
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
Через некоторое время мы можем наблюдать результат редактирования изображения по URL Webhook, содержание будет следующим:
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "b64_json": "iVBORw0KGgo..."
      }
    ]
  }
}
Можно увидеть, что в результате есть поле task_id, поле data содержит такие же результаты редактирования изображений, как и при синхронном вызове, с помощью поля task_id можно связать задачи.

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

При вызове API, если возникнут ошибки, API вернет соответствующий код ошибки и информацию. Например:
  • 400 token_mismatched: Неверный запрос, возможно, из-за отсутствующих или недействительных параметров.
  • 400 api_not_implemented: Неверный запрос, возможно, из-за отсутствующих или недействительных параметров.
  • 401 invalid_token: Неавторизованный, недействительный или отсутствующий токен авторизации.
  • 429 too_many_requests: Слишком много запросов, вы превысили лимит частоты.
  • 500 api_error: Внутренняя ошибка сервера, что-то пошло не так на сервере.

Пример ответа об ошибке

{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}

Заключение

С помощью этого документа вы уже узнали, как легко использовать функции редактирования изображений официального OpenAI с помощью API OpenAI Images Edits. Надеемся, что этот документ поможет вам лучше интегрировать и использовать этот API. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь обращаться в нашу техническую поддержку.