8.3 DALL·E API로 이미지 생성/편집

OpenAI의 DALL·E는 텍스트만으로 이미지를 생성하거나, 기존 이미지를 기반으로 편집할 수 있는 혁신적인 생성형 AI 모델입니다. GPT-4와 마찬가지로 대형 Transformer 아키텍처 기반으로 훈련되었으며, 텍스트와 시각 정보를 결합한 "텍스트-이미지" 멀티모달 생성에 특화되어 있습니다. OpenAI가 제공하는 DALL·E API를 통해 개발자는 손쉽게 고품질 이미지를 생성하거나 수정할 수 있으며, 이를 활용해 썸네일 생성, 제품 디자인, 콘텐츠 제작 등 다양한 용도의 서비스를 구축할 수 있습니다.

이 절에서는 DALL·E API의 주요 기능과 호출 방식, 그림 생성과 편집(use of “inpainting”)의 실습 예제를 중심으로 DALL·E API의 실전 활용 방법을 상세히 설명합니다.

8.3.1 DALL·E란 무엇인가?

DALL·E는 ‘달리(Dalí)’ + ‘WALL·E’에서 따온 조어로, 창의적인 이미지 생성 능력에 초점을 둔 이미지 생성 AI입니다. 처음에는 CLIP과 VQGAN 등 Transformer 기반 아키텍처로 연구가 시작되었고, 현재는 DALL·E 3 버전이 GPT-4 기반 Chat Completions API에 통합되어 사용 가능해졌습니다.

특징

  • 텍스트를 보고 이미지를 생성 (Text-to-Image)

  • 특정 위치나 객체의 세부 묘사 가능 (e.g., “a panda surfing on Mars during sunset”)

  • 이미지 수정(Inpainting) 기능 지원

  • GPT-4와 통합된 프롬프트 이해력 — 장문의 지시(prompt)를 더 정밀하게 처리

8.3.2 DALL·E API 개요

현재 OpenAI의 DALL·E 기능은 다음 두 가지 방식으로 사용할 수 있습니다:

  • DALL·E 이미지 생성 API (v1 엔드포인트)

  • Chat Completions API를 통한 GPT-4와 DALL·E 연계 (v2, DALL·E 3 활용)

DALL·E 3는 GPT-4를 기반으로 더 정밀하게 텍스트를 해석하기 때문에 결과물의 품질과 정확도가 크게 향상되었으며, 백엔드 전환 이후에는 Chat Completions API로만 사용할 수 있습니다.

대표 API 형식

POST https://api.openai.com/v1/images/generations

그러나 최신 사용 방식은 다음과 같이 GPT 호출로 이미지 요청:

response = client.chat.completions.create(
    model="gpt-4-vision-preview",  # 또는 gpt-4-turbo 사용 가능
    messages=[
        {"role": "user", "content": "Create an image of a cozy cabin in snowy mountains during sunrise"}
    ]
)

GPT-4 및 DALL·E 통합 모델에서는 이미지 호출이 자동으로 처리됩니다. 설정된 system 프롬프트나 user 프롬프트에 이미지 생성 요청이 포함되어 있다면, 적절히 해석하여 이미지 출력 항목이 포함된 응답을 제공하게 됩니다.

8.3.3 텍스트 → 이미지 생성 (Text-to-Image)

가장 기본적인 기능은 입력한 텍스트 지시문(prompt)을 기반으로 이미지 한 장 또는 여러 장을 생성하는 것입니다.

예제: Python SDK 사용

from openai import OpenAI

client = OpenAI()

response = client.images.generate(
    model="dall-e-3",
    prompt="An astronaut lounging in a tropical resort in space, digital art",
    size="1024x1024",
    quality="standard",
    n=1,
)

print(response.data[0].url)

파라미터 설명:

  • model: 현재 대부분 “dall-e-3” 사용

  • prompt: 생성 조건 설명 (텍스트)

  • size: “1024x1024”, “1024x1792”, “1792x1024” 중 선택 가능 (DALL·E 3 기준)

  • quality: “standard” 또는 “hd”

  • n: 생성할 이미지 수 (보통 1~4까지 지원)

응답은 이미지 URL의 형태로 전달되며, 유효시간이 있는 presigned URL입니다. 원한다면 다운로드하여 자체 서버에 저장해야 합니다.

8.3.4 이미지 편집 (Edit & Inpainting)

DALL·E에서는 기존 이미지를 기반으로 한 수정(inpainting)이나, 부분 제거 및 대체 편집이 가능합니다. 이를 위해서는 다음의 두 가지 입력이 필요합니다.

  • 원본 이미지

  • 편집 마스크 이미지 (투명 배경 포함 PNG, 삭제/채워질 영역을 알리는 alpha mask)

예: 이미지 + 마스크로 객체 추가하기

OpenAI API SDK 기준 함수: client.images.edit()

from openai import OpenAI

client = OpenAI()

with open("original_image.png", "rb") as img, open("mask_image.png", "rb") as mask:
    response = client.images.edit(
        model="dall-e-2",
        image=img,
        mask=mask,
        prompt="Add a red apple on the empty table",
        n=1,
        size="1024x1024"
    )

print(response.data[0].url)

포인트:

  • 마스크는 반드시 흰색(보존), 검은색(삭제) 또는 alpha 채널을 가진 PNG여야 함

  • Edit 기능은 현재 “dall-e-2”에서만 공식 지원(DALL·E 3에는 API 차원에서 미지원, Chat API에서 수동 편집만 가능)

  • 마스크 사용 시, 전체 이미지를 새로 만드는 것이 아니라 '지정 영역'만 새롭게 채움

8.3.5 GPT-4 통합 방식에서의 이미지 출력 응답 처리

GPT-4 기반의 DALL·E 3 통합 API를 사용할 경우에는 GPT API (chat.completions.create)를 통해 이미지 생성 요청을 하고 응답 내에 이미지 링크가 markdown 이미지 포맷으로 포함되어 반환됩니다.

예시 응답 구조:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Here is the image you requested:\n\n ![An astronaut lounging](https://...)"
      }
    }
  ]
}

개발자는 이 markdown 메시지에서 이미지 URL을 추출하여 표시하거나 다른 처리에 활용할 수 있습니다. 또한 json_mode로 응답을 강제 구조화하고자 할 경우 사용자의 지시문에 구조를 요구하거나 raw_content 옵션을 활용합니다.

8.3.6 비용 및 제한 사항

OpenAI의 이미지 생성 기능에도 과금이 적용됩니다. 2024년 기준 DALL·E 3의 생성 비용은 다음과 같습니다.

이미지 크기
품질
비용 (1장당)

1024x1024

standard

$0.04

1024x1792

standard

$0.08

1792x1024

standard

$0.08

모든 크기

hd

약 $0.08~0.12

마찬가지로 Rate Limit이 있으므로, 대량 생성 시 주의가 필요하며 전송할 요청 수에 제한이 있습니다.

8.3.7 실전 예제: 썸네일 생성기 만들기

아래는 블로그 제목을 입력하면 자동으로 배경 이미지를 만들어주는 웹 서비스 로직 예제입니다.

예제 흐름:

  1. 사용자로부터 블로그 기사 제목 입력 받기

  2. 제목을 프롬프트로 가공하여 이미지 생성

  3. 이미지 다운로드 → 썸네일로 저장

기본 코드:

from openai import OpenAI
from PIL import Image
import requests

client = OpenAI()

def generate_thumbnail(title):
    prompt = f"Create a digital illustration for a blog post titled: '{title}'. Minimalist, modern style."
    response = client.images.generate(
        model="dall-e-3",
        prompt=prompt,
        size="1024x1024"
    )
    
    image_url = response.data[0].url
    
    img_data = requests.get(image_url).content
    with open("thumbnail.png", "wb") as f:
        f.write(img_data)

    print("썸네일 이미지 저장 완료")

generate_thumbnail("AI가 바꾸는 미래의 직업")

마무리 및 베스트 프랙티스

DALL·E API는 창작 작업을 자동화할 수 있는 강력한 도구입니다. 실제 업무에서 활용할 때 아래 팁을 고려하세요.

  • 가능한 구체적이고 명확한 프롬프트를 작성: 스타일, 색상, 각도 등을 포함하세요.

  • 응답 이미지 URL은 일시적이므로, 필요한 경우 저장 및 백업 추천

  • ‘inpainting’은 다양한 응용에 유용: 제품 이미지 포토샵 대체, 배경 변경 등

  • GPT-4와 자연스럽게 연동하면 사용자는 “그림 그려줘”라고 입력하는 것만으로 결과 획득 가능

DALL·E는 텍스트 기반 인터페이스와 시각적 창작 도구 간의 경계를 만드는 신개념 인간-컴퓨터 인터페이스로 자리 잡아가고 있으며, 앞으로의 웹, 디자인, 교육, UX 등 다양한 분야에서 활용 가치가 높아질 것입니다.

Last updated