[23/10/19] Karlo API를 사용해서 이미지 생성하기

이카루스·2023년 10월 19일
0

Alone_Study

목록 보기
1/5
post-thumbnail

생성형 인공지능 Karlo(칼로)

3억 장 규모의 이미지-텍스트 학습을 통해 사용자가 입력한 문장을 이해하고 새로운 이미지를 만드는 기능을 제공합니다. 사물, 배경, 조명, 구도, 스타일 조합의 문장 표현을 이해하고, 원하는 컨셉의 이미지를 빠르게 생성해 냅니다.

1. 카카오 개발자 사이트 들어가서 로그인하기

https://developers.kakao.com/console/app

2. 내 애플리케이션 탭으로 들어가서 애플리케이션 추가하기

3. REST API 복사해놓기

4. 파이썬 코딩하기

# HTTP 요청, JSON 데이터 처리, URL 처리, 이미지 처리에 사용됩니다.
import requests
import json
import urllib
from PIL import Image

# [내 애플리케이션] > [앱 키] 에서 확인한 REST API 키 값 입력
REST_API_KEY = '개인_Rest_API_key'

# 이미지 생성하기 요청
#t2i'라는 이름의 함수를 정의합니다. 이 함수는 텍스트를 이미지로 변환하는 작업을 합니다. 함수는 두 개의 인자, 'prompt'와 'negative_prompt'를 받습니다.
def t2i(prompt, negative_prompt):
	#requests 라이브러리를 사용하여 카카오 브레인의 Karlo API에 POST 요청을 보냅니다. 요청에는 위에서 정의한 API 키와 함께 주어진 프롬프트 정보를 JSON 형식으로 전달합니다.
    r = requests.post(
        'https://api.kakaobrain.com/v2/inference/karlo/t2i',
        json={
            'prompt': prompt,
            'negative_prompt': negative_prompt
        },
        headers={
            'Authorization': f'KakaoAK {REST_API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    
    # HTTP status check
    #  API 호출의 HTTP 응답 상태를 확인합니다. 오류 상태(예: 404, 500)가 반환된 경우 예외를 발생시킵니다.
    r.raise_for_status()
	#API 호출의 응답을 JSON 형식으로 파싱하여 반환합니다.
    return r.json()

# 프롬프트에 사용할 제시어
# 이미지 생성에 사용될 주제와 제외하려는 요소들을 문자열 변수에 지정합니다.
prompt = "Flying cars on the air"
negative_prompt = "bycycle, human, road"

# 이미지 생성하기 REST API 호출
# 앞서 정의한 't2i' 함수를 사용하여 이미지 생성 API를 호출하고 그 결과를 'response' 변수에 저장합니다.
response = t2i(prompt, negative_prompt)

# API 응답에서 "images" 키의 값을 확인합니다. 값이 없거나 유효하지 않으면 오류 메시지를 출력하고 프로그램을 종료합니다.
if not response.get("images"):
    print("API did not return expected image data.")
    exit()

# 응답된 이미지 데이터에서 첫 번째 이미지의 URL을 가져옵니다. URL이 없으면 오류 메시지를 출력하고 프로그램을 종료합니다.
image_url = response["images"][0].get("image")
if not image_url:
    print("Image URL not found.")
    exit()

# urllib 라이브러리를 사용하여 이미지 URL에서 실제 이미지 데이터를 가져옵니다. 그 후, PIL 라이브러리의 Image 모듈을 사용하여 이미지를 열고 화면에 표시합니다.
result = Image.open(urllib.request.urlopen(image_url))
result.show()
profile
Der Schmerz, der mich nicht töten kann, macht mich nur stärker (나를 죽이지 못하는 고통은 나를 더 강하게 만든다)

0개의 댓글