◾️ DALL-E
DALL-E는 자연어로 된 설명을 기반으로 사실적인 이미지를 생성할 수 있는 인공지능 시스템이다.
- DALL-E-3 : 2023년 11월에 출시
- DALL-E-2 : 2022년 11월에 출시
- 텍스트 프롬프트를 기반으로 이미지 생성
- 새 텍스트 프롬프트에 따라 모델이 기존 이미지의 일부 영역을 대체하도록 하여 이미지의 편집된 버전 생성
- 기존 이미지의 변형 만들기 (DALL-E-2만 해당)
- DALL-E-2의 경우 256x256, 512x512, 1024x1024 지원
- DALL-E-3의 경우 1024x1024, 1792x1024, 1024,1792 지원
▪️ API 사용방법
- 프롬프트가 지정된 이미지를 생성해보기
A. 사용 방법
# Request
client.images.generate(
model="dall-e-3",
prompt="cute dog",
n=1,
size="1024x1024"
)
# Response
{
"created": 1839549821,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
B. Request Body
- Prompt : dall-e-2 모델의 경우 1000자, dall-e-3 모델의 경우 4000자
- n : 생성할 이미지 수, 1에서 10 사이, dall-e-3 모델의 경우 n=1만 지원
- quality : 생성될 이미지의 화질, HD는 dall-e-3만 지원
- response_format : 생성된 이미지의 반환 형식. URL 또는 b64_json
- size : 이미지의 크기, dall-e-2의 경우 256x256, 512x512, 1024x1024 지원, dall-e-3는 1024x1024, 1792x1024, 1024x1792 지원
- style : 이미지 스타일, dall-e-3에서만 지원
- vivid : 사실적, 선명
- natural : 자연스러움
▪️ 이미지 만들어보기
- 기본적으로 이미지는 표준 화질로 생성되지만 DALL-E-3 모델의 경우 HD로 화질 설정 가능함.
- 정사각형의 표준 화질 이미지가 가장 빠르게 생성됨
- DALL-E-3 사용 시 API 호출당 최대 1개의 이미지 요청 가능
- DALL-E-2 사용 시 API 호출당 최대 10개의 이미지 요청 가능
1. 귀여운 강아지 1마리
from openai import OpenAI
class E3():
def __init__(self,API_KEY: str) -> None:
self.client : OpenAI = OpenAI(api_key=API_KEY)
def generate_image(self) -> str:
response = self.client.images.generate(
model="dall-e-3",
prompt="A cute dog",
size="1024x1024",
quality="standard",
n=1
)
image_url : str = response.data[0].url
return image_url
_API_KEY : str = ''
e3 = E3(API_KEY=_API_KEY)
print(e3.generate_image())
2. 이미지 다운로드 로직 추가
from openai import OpenAI
import request as rq # pip install requests
class E3():
def __init__(self,API_KEY: str) -> None:
self.client : OpenAI = OpenAI(api_key=API_KEY)
def generate_image(self) -> str:
response = self.client.images.generate(
model="dall-e-3",
prompt="A cute dog",
size="1024x1024",
quality="standard",
n=1
)
image_url : str = response.data[0].url
return image_url
def download_image(self,save_path: str,image_url : str) -> None:
response = rq.get(url=image_url,stream=True)
if response.status_code == 200:
with open(save_path,'wb') as fp:
for chunk in response.iter_content(chunk_size=128):
fp.write(chunk)
print(f'이미지 다운로드 완료! ({save_path})')
else:
print(f'이미지 다운로드 실패! ({response.status_code})')
_API_KEY : str = ''
e3 = E3(API_KEY=_API_KEY)
image_url : str = e3.generate_image()
e3.download_image(save_path='dog.png',image_url=image_url)
Ref
https://cookbook.openai.com/articles/what_is_new_with_dalle_3