Перейти до основного вмісту
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 відразу повертає результат, що містить інформацію про поле task_id, яке представляє поточний 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 на вказаний Webhook URL, а також заповнити відповідні параметри, як показано в наступному коді:
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. Якщо у вас є будь-які питання, будь ласка, звертайтеся до нашої команди технічної підтримки.