[AI] DALL-E 사용기

도톨이·2024년 5월 23일

AI

목록 보기
6/14
post-thumbnail

open ai 의 vision 라이브러리는 이미지 입력하면 텍스트로 이미지에 대한 설명을 해준다.

dall-e 는 현재 두 가지 버전이 있다. dall-e2와 dall-e3
DALL-E 3는 영어 외 다수의 언어를 이해하며, 한글로 작성된 프롬프트(명령어)도 굉장히 잘 이해한다. 더 강력하고 더 비싼 모델이다.

Set up

코드를 작성하기 위한 준비단계이다.
먼저 OpenAI를 설치하고, IPython의 display를 사용하여 노트북에서 이미지를 보여준다. base64를 가져와 데이터를 사용하고, io 라이브러리를 통해 URL과 파이썬의 requests 라이브러리에서 데이터를 받아온다.

!pip install openai
from openai import OpenAI
from IPython.display import display, Image as IPyImage
import base64
from io import BytesIO
import requests
from PIL import Image

API 키를 입력하고(예시 키는 현재 삭제된 키) model 에는 달리 모델을 입력합니다. 여기서는 dall-e-3 를 입력하였습니다.

client = OpenAI(api_key="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")
model = "dall-e-3"

Image Generation (DALL-E-3)

응답을 설정한하는데 우리는 지금 이미지 생성을 원하므로 client.images.generate 의 메소드를 사용해야한다. 그리고 파라미터들을 입력을 하는데 우선 model 은 위에서 정의한 달리 모델을 그대로 넣어주고 프롬프트에 명령을 입력한다. 이미지 생성은 사이즈, 퀄리티, 포맷 또한 입력해야한다.
퀄리티는 이미지의 화질과 관련이 있고 hd, standard 등의 속성이 있다.
size 는 1024x1024 혹은 1024x1792 혹은 1792x1024 의 사이즈를 선택할 수 있다.
다음은 응답 포맷을 설정할 수 있는데 url 로 설정하면 대답이 url 로 오게 된다. 이 url 은 1시간 후에 만료된다.
n 은 리스폰스 이미지의 수가 된다.

response = client.images.generate(
  model=model,
  prompt="create a realistic and 3d image of a flying saucer in green color",
  size="1024x1024",  #1024x1024, 1024x1792, 1792x1024
  quality="standard", #hd
  response_format = "url", #expires in 1 hour
  n=1,
)

image_url = response.data[0].url

생성된 image_url 을 print 하여 url 에 들어갔더니 다음과 같은 이미지를 볼 수 있었다.

이러한 이미지 url 을 노트북에서 보려면 다음의 메소드를 사용한다.

response = requests.get(response.data[0].url)
Image.open(BytesIO(response.content))

내 경우 구글 코랩 내에 다음과 같은 이미지가 표시된 걸 확인할 수 있었다.

base 64

response = client.images.generate(
  model=model,
  prompt="create an image of a pink yacht",
  size="1024x1024",
  quality="standard",
  response_format = "b64_json",
  n=1,
)
image_data_b64 = response.data[0].b64_json
image_bytes = base64.b64decode(image_data_b64)
display(IPyImage(data=image_bytes))

디스크에 저장

이미지를 디스크에 저장하기

filename = "iate.png"

image_bytes = base64.b64decode(image_data_b64)

with open(filename, 'wb') as image_file:
    image_file.write(image_bytes)

print(f"Image saved as '{filename}'")

디스크에 저장은 이렇게 된다.

profile
Kotlin, Flutter, AI | Computer Science

0개의 댓글