메인 콘텐츠로 건너뛰기
DALL-E 3는 OpenAI가 개발한 두 가지 버전의 이미지 생성 모델로, 텍스트 설명에 따라 고품질 이미지를 생성할 수 있습니다. 이 문서는 OpenAI 이미지 생성 API의 사용 흐름을 주로 설명하며, 이를 통해 공식 OpenAI DALL-E의 이미지 생성 기능을 쉽게 사용할 수 있습니다.

신청 흐름

OpenAI 이미지 생성 API를 사용하려면 먼저 OpenAI 이미지 생성 API 페이지에서 “Acquire” 버튼을 클릭하여 요청에 필요한 자격 증명을 얻습니다: 로그인 또는 등록이 되어 있지 않으면 자동으로 로그인 페이지로 이동하여 등록 및 로그인을 초대합니다. 로그인 및 등록 후에는 자동으로 현재 페이지로 돌아옵니다. 첫 번째 신청 시 무료 크레딧이 제공되어 해당 API를 무료로 사용할 수 있습니다.

기본 사용

다음으로 인터페이스에 해당 내용을 입력할 수 있습니다, 아래 그림과 같이:

이 API를 처음 사용할 때는 최소한 세 가지 내용을 입력해야 합니다. 하나는 authorization으로, 드롭다운 목록에서 선택하면 됩니다. 또 다른 매개변수는 model로, model은 OpenAI DALL-E 공식 모델 카테고리를 선택하는 것입니다. 여기서는 주로 1종의 모델이 있으며, 자세한 내용은 제공된 모델을 참조할 수 있습니다. 마지막 매개변수는 prompt로, prompt는 우리가 생성할 이미지의 힌트 단어를 입력하는 것입니다. 또한 오른쪽에 해당 호출 코드 생성이 있으며, 코드를 복사하여 직접 실행할 수 있고, “Try” 버튼을 클릭하여 테스트할 수도 있습니다.

Python 샘플 호출 코드:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
호출 후, 반환 결과는 다음과 같습니다:
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "A delightful image showcasing a young sea otter, who is born brown, with wide charming eyes. It is delightfully lying on its back, paddling in the calm sea waters. Its dense, velvety fur appears wet and shimmering, capturing the essence of its habitat. The small creature curiously plays with a sea shell with its small paws, looking absolutely innocent and charming in its natural environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/5d98aa7c-80c6-4523-b571-fc606ad455b9/generated_00.png?se=2024-07-23T05%3A34%3A48Z&sig=GAz%2Bi3%2BkHOQwAMhxcv22tBM%2FaexrxPgT9V0DbNrL4ik%3D&ske=2024-07-23T08%3A41%3A10Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T08%3A41%3A10Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
반환 결과는 여러 필드를 포함하며, 설명은 다음과 같습니다:
  • created는 이번 이미지 생성의 ID로, 이번 작업을 고유하게 식별하는 데 사용됩니다.
  • data는 이미지 생성의 결과 정보를 포함합니다.
그 중 data는 모델이 생성한 이미지의 구체적인 정보를 포함하고 있으며, 그 안의 url은 생성된 이미지의 세부 링크입니다. 아래 그림과 같이 확인할 수 있습니다.

이미지 품질 매개변수 quality

다음으로 이미지 생성 결과의 일부 세부 매개변수를 설정하는 방법을 소개합니다. 이미지 품질 매개변수 quality는 두 가지가 있습니다. 첫 번째 standard는 표준 이미지를 생성하는 것을 의미하고, 두 번째 hd는 생성된 이미지가 더 세밀한 세부 사항과 더 큰 일관성을 갖는 것을 의미합니다. 아래는 이미지 품질 매개변수를 standard로 설정하는 방법입니다. 구체적인 설정은 아래 그림과 같습니다:

또한 오른쪽에 해당 호출 코드 생성이 있으며, 코드를 복사하여 직접 실행할 수 있고, “Try” 버튼을 클릭하여 테스트할 수도 있습니다.

Python 샘플 호출 코드:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "quality": "standard"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
호출 후, 반환 결과는 다음과 같습니다:
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter is lying playfully on its back in the water, with its fur looking glossy and soft. One of its tiny paws is reaching out curiously, and it has an expression of pure joy and warmth on its face as it looks up to the sky. Its body is surrounded by bubbles from its playful twirling in the water. A gentle breeze is playing with its fur making it look more charming. The scene portrays the tranquility and charm of marine life.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/a93ee5e7-3abd-4923-8d79-dc9ef126da46/generated_00.png?se=2024-07-23T08%3A13%3A55Z&sig=wTXGYvUOwUIkaB2CxjK9ww%2FHjS8OwYUWcYInXYKwcAM%3D&ske=2024-07-23T11%3A32%3A05Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T11%3A32%3A05Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
반환된 결과는 기본 사용의 내용과 일치하며, 이미지 품질 매개변수가 standard인 생성 이미지는 아래 그림과 같습니다:

위와 동일한 작업을 수행하여 이미지 품질 매개변수를 hd로 설정하면 아래 그림과 같은 이미지를 얻을 수 있습니다:

hdstandard보다 더 세밀한 세부 사항과 더 큰 일관성을 가진 이미지를 생성하는 것을 확인할 수 있습니다.

이미지 크기 매개변수 size

우리는 생성된 이미지의 크기를 설정할 수 있으며, 아래와 같은 설정을 할 수 있습니다. 아래에서 이미지의 크기를 1024 * 1024로 설정하며, 구체적인 설정은 아래 그림과 같습니다:

또한 오른쪽에 해당 호출 코드 생성이 있음을 주목할 수 있으며, 코드를 복사하여 직접 실행할 수도 있고, 「Try」 버튼을 클릭하여 테스트할 수도 있습니다.

Python 샘플 호출 코드:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
호출 후, 우리는 반환된 결과가 다음과 같음을 발견했습니다:
{
  "created": 1721636652,
  "data": [
    {
      "revised_prompt": "A delightful depiction of a baby sea otter. The small mammal is captured in its natural habitat in the ocean, floating on its back. It has thick brown fur that is sleek and wet from the sea water. Its eyes are closed as if it is enjoying a moment of deep relaxation. The water around it is calm, reflecting the peacefulness of the scene. The background should hint at a diverse marine ecosystem, with visible strands of kelp floating on the surface, suggesting the baby otter's preferred environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/9d625ac6-fd2b-42a9-84a6-8c99eb357ccf/generated_00.png?se=2024-07-23T08%3A24%3A24Z&sig=AXtYXowEakGxfRp8LhC2DwqL%2F07LhEDW40oCP%2BdTO8s%3D&ske=2024-07-23T18%3A00%3A45Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T18%3A00%3A45Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
반환된 결과는 기본 사용 내용과 일치하며, 이미지의 크기가 1024 * 1024인 생성된 이미지는 아래 그림과 같습니다:

위와 동일한 작업을 수행하여 이미지의 크기를 1792 * 1024로 설정하면 아래 그림과 같은 이미지를 얻을 수 있습니다: 이미지의 크기가 확연히 다름을 볼 수 있으며, 추가적인 크기도 설정할 수 있습니다. 자세한 정보는 저희 공식 문서를 참조하시기 바랍니다.

이미지 스타일 매개변수 style

이미지 스타일 매개변수 style은 두 가지 매개변수를 포함합니다. 첫 번째는 vivid로, 생성된 이미지가 더 생동감 있게 표현됨을 의미하며, 두 번째는 natural로, 생성된 이미지가 더 자연스럽게 표현됨을 의미합니다. 아래에서 이미지 스타일 매개변수를 vivid로 설정하며, 구체적인 설정은 아래 그림과 같습니다:

또한 오른쪽에 해당 호출 코드 생성이 있음을 주목할 수 있으며, 코드를 복사하여 직접 실행할 수도 있고, 「Try」 버튼을 클릭하여 테스트할 수도 있습니다.

Python 샘플 호출 코드:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "style": "vivid"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
호출 후, 우리는 반환된 결과가 다음과 같음을 발견했습니다:
{
  "created": 1721637086,
  "data": [
    {
      "revised_prompt": "A baby sea otter with soft, shiny fur and sparkling eyes floating playfully on calm ocean waters. This adorable creature is trippingly frolicking amidst small, gentle waves under a bright, clear, sunny sky. The tranquility of the sea contrasts subtly with the delightful energy of this young otter. The critter gamely clings to a tiny piece of driftwood, its small paws adorably enveloping the floating object.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/6e48f701-7fd3-4356-839e-a2f6f0fe82d9/generated_00.png?se=2024-07-23T08%3A31%3A37Z&sig=4percxqTbUR1j3BQmkhvj%2FAhHzInKI%2FqiTo1MP69coI%3D&ske=2024-07-27T10%3A39%3A55Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-20T10%3A39%3A55Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
반환된 결과는 기본 사용 내용과 일치하며, 이미지 스타일 매개변수가 vivid인 생성된 이미지는 아래 그림과 같습니다:

위와 동일한 작업을 수행하여 이미지 스타일 매개변수를 natural로 설정하면 아래 그림과 같은 이미지를 얻을 수 있습니다:

vividnatural보다 더 생동감 있고 사실적인 이미지를 생성하는 것을 볼 수 있습니다.

이미지 링크의 형식 매개변수 response_format

마지막 이미지 링크의 형식 매개변수 response_format도 두 가지가 있습니다. 첫 번째는 b64_json으로, 이미지 링크를 Base64로 인코딩하며, 두 번째는 url로, 일반 이미지 링크로 직접 이미지를 확인할 수 있습니다. 아래에서 이미지 링크의 형식 매개변수를 url로 설정하며, 구체적인 설정은 아래 그림과 같습니다:

또한 오른쪽에 해당 호출 코드 생성이 있음을 주목할 수 있으며, 코드를 복사하여 직접 실행할 수도 있고, 「Try」 버튼을 클릭하여 테스트할 수도 있습니다.

Python 샘플 호출 코드:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "response_format": "url"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
호출 후, 우리는 반환된 결과가 다음과 같음을 발견했습니다:
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "아기 바다 수달의 매력적인 묘사. 수달은 부드러운 푸른 바다 물결 속에서 평화롭게 등을 대고 쉬고 있다. 아기 수달의 털은 부드러운 회색과 갈색의 사랑스러운 혼합으로, 부드러운 햇빛 아래에서 미세하게 반짝인다. 작은 발은 하늘을 향해 약간 들어올려져 있으며, 보이지 않는 물체와 놀고 있는 듯하다. 둥글고 표현력이 풍부한 눈은 호기심으로 가득 차 있으며, 생명과 순수함이 넘친다. 수달의 자연 서식지와 사랑스럽게 푹신한 외관을 불러일으키기 위해 사실적인 스타일을 사용하라.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/87792c5f-8b6d-412e-81dd-f1a1baa19bd2/generated_00.png?se=2024-07-23T08%3A39%3A47Z&sig=zzRAn30TqIKHdLVqZPUUuSJdjCYpoJdaGU6BeoA76Jo%3D&ske=2024-07-23T13%3A32%3A13Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T13%3A32%3A13Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
반환된 결과는 기본 사용 내용과 일치하며, 이미지 링크의 형식 매개변수인 url의 생성된 이미지 링크는 이미지 URL로 직접 접근할 수 있으며, 이미지 내용은 아래 그림과 같다:

위와 동일한 작업을 수행하면, 이미지 링크의 형식 매개변수인 b64_json으로 Base64 인코딩된 이미지 링크를 얻을 수 있으며, 구체적인 결과는 아래 그림과 같다:
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "아기 바다 수달의 매력적인 이미지. 수달은 잔잔한 푸른 바다 위에서 부드러운 햇빛이 쏟아지는 맑은 하늘 아래에서 따뜻한 황금빛 햇살을 받으며 떠 있다. 수달의 털은 풍부한 초콜릿 갈색이며, 믿을 수 없을 만큼 부드럽고 푹신해 보인다. 수달의 눈은 밝고 표현력이 풍부하며, 어린아이 같은 호기심과 기쁨으로 가득 차 있다. 작은 뾰족한 귀와 단추 같은 코는 전체적인 귀여움을 더해준다. 그 주위의 바다에서는 햇빛에 반짝이는 물방울들이 보이며, 그 모습은 확실히 즐거운 광경이다."
    }
  ]
}

비동기 콜백

OpenAI 이미지 생성 API가 이미지를 생성하는 데 시간이 다소 걸릴 수 있으므로, API가 오랜 시간 응답하지 않으면 HTTP 요청이 연결을 유지하여 추가 시스템 리소스를 소모하게 된다. 따라서 이 API는 비동기 콜백 지원도 제공한다. 전체 프로세스는 다음과 같다: 클라이언트가 요청을 시작할 때 추가로 callback_url 필드를 지정하고, 클라이언트가 API 요청을 시작하면 API는 즉시 결과를 반환하며, 현재 작업 ID를 나타내는 task_id 필드 정보를 포함한다. 작업이 완료되면 생성된 이미지 결과가 POST JSON 형식으로 클라이언트가 지정한 callback_url로 전송되며, 여기에도 task_id 필드가 포함되어 있어 작업 결과를 ID로 연결할 수 있다. 아래 예제를 통해 구체적으로 어떻게 작업하는지 알아보자. 먼저, Webhook 콜백은 HTTP 요청을 수신할 수 있는 서비스로, 개발자는 자신이 구축한 HTTP 서버의 URL로 교체해야 한다. 여기서는 편리한 시연을 위해 공개 Webhook 샘플 사이트인 https://webhook.site/를 사용하며, 해당 사이트를 열면 Webhook URL을 얻을 수 있다. 아래 그림과 같다: 이 URL을 복사하여 Webhook으로 사용할 수 있으며, 여기서의 샘플은 https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab이다. 다음으로, callback_url 필드를 위의 Webhook URL로 설정하고, 아래 코드와 같이 해당 매개변수를 입력할 수 있다:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "귀여운 아기 바다 수달",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
실행하면 즉시 결과를 얻을 수 있으며, 아래와 같다:
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
잠시 기다리면 Webhook URL에서 생성된 이미지 결과를 확인할 수 있으며, 내용은 다음과 같다:
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "revised_prompt": "젊은 바다 수달을 보여주는 즐거운 이미지...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
결과에서 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 Images Generations API를 사용하여 공식 OpenAI DALL-E의 이미지 생성 기능을 쉽게 사용하는 방법을 이해하셨습니다. 이 문서가 API를 더 잘 연동하고 사용하는 데 도움이 되기를 바랍니다. 질문이 있으시면 언제든지 저희 기술 지원 팀에 문의해 주십시오.