본문 바로가기
개발/파이썬 API

카카오 API 'Karlo', stable diffusion 사용해보기

by beomcoder 2023. 2. 12.
728x90
반응형

집 컴퓨터가 좋지 못해 stable diffusion을 colab에서 사용해볼 수 있는 코드가 있어서

따라서 해보고 사용해봤는데 성능이 web ui보다 좋지 못해 실망했다.

 

코랩을 끄고 회사에서 사용할 api를 찾아보고 있었는데 카카오에서도 text to image를 서비스하고 있었다.

그래서 한번 사용해보고, 해보고 싶은 사람들이 있을 수 있을 것 같아 사용방법을 알려주려고 한다.

 

미리 말하지만 성능은 web ui보다 좋지 못하다.

서버에서 정해진 모델에 프롬포트만 입력하여 이미지를 가지고 오는거라

좋은 성능을 기대하려면 webui를 가서 공부하고 사용하는게 좋다.

 

취지는 카카오톡에서 text to image api를 만들었으니 한번 찍어먹어보자라는 의미이다.

 

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

먼저 카카오디벨로퍼에 들어가서 회원가입을 한다.

회원가입을 하고 '내 애플리케이션'을 누르고 '애플리케이션 추가하기'를 누른다.

 

 

앱 이름과 사업자명을 적어준다. 그냥 공부할 목적이면 애플리케이션이 어떤 용도로 쓰일지 적어주면 된다.

그리고 체크박스에 체크하고 저장하면 된다.

 

 

저장하여 만들어진 애플리케이션을 클릭하면 앱 키를 확인 할 수 있다.

우리는 api를 사용할 것이라 REST API 키를 복사해서 사용할 것이다.

그다음 코랩을 키거나 vscode를 켜서 코드를 입력하면 된다.

나는 코랩에서 사용해서 코랩기준으로 알려주려 한다.

 

# REST API 호출, 이미지 파일 처리에 필요한 라이브러리
import requests
import json
import io
import base64
from PIL import Image
# [내 애플리케이션] > [앱 키] 에서 확인한 REST API 키 값 입력
REST_API_KEY = '본인의 rest api키를 입력'

 

여기서 카카오 예제에서는 '${rest_api}' 였지만 ${}를 안지우면

에러처리가 나서 지워서 입력하였더니 응답이 잘 왔다.

 

# 이미지 생성하기 요청
def t2i(text, batch_size=1):
    r = requests.post( # 카카오한테 요청하겠다.
        'https://api.kakaobrain.com/v1/inference/karlo/t2i', # 이사이트로
        json = {
            'prompt': {
                'text': text, # 내가 원하는 그림의 프롬포트는 text이고,
                'batch_size': batch_size # batch_size만큼 그려줘
            }
        },
        headers = {
            'Authorization': f'KakaoAK {REST_API_KEY}', # 요청할때 필요한 암호
            'Content-Type': 'application/json'
        }
    )
    # 응답 JSON 형식으로 변환
    response = json.loads(r.content)
    return response

# Base64 디코딩 및 변환 (이미지로 바로 보내면 낭비)
def stringToImage(base64_string, mode='RGBA'):
    imgdata = base64.b64decode(str(base64_string))
    img = Image.open(io.BytesIO(imgdata)).convert(mode)
    return img

 

코드를 간단히 설명하려고 주석처리를 달았다. text에 들어가는건 어떤 그림이 나왔으면 좋을지 적는 것이다.

batch_size는 처음엔 퀄티리가 좋아지는지 알았는데 그림의 장 수이다.

1~8장까지 쓸 수 있다.

 

# 프롬프트에 사용할 제시어
text = "a baby in a cute penguin suit facing the front"

# 이미지 생성하기 REST API 호출
response = t2i(text, 8)

 

text는 영어밖에 안되고 256자까지 쓸 수 있다. 나처럼 말이 되게 써도 괜찮고,

' , ' 를 기준으로 아무 단어나 나열해도 알아서 이미지를 생성한다.

 

# 응답의 첫 번째 이미지 생성 결과 출력하기
result = stringToImage(response.get("images")[0].get("image"), mode='RGB')
result

 

response.get("images")[0] 이 부분을 0~7까지 고치면 된다. batch_size-1 까지 늘릴 수 있다.

만약 여기서 이미지가 출력이 되지 않는다면 response를 찍어보면 에러 응답을 주었을 확률이 높다.

나는 처음에 batch_size를 10을 주었는데 자꾸 bad requests가 와서 찾아보니 8까지밖에 안된다고 써져있었다.

 

 

다른 기능도 2가지 정도 더 있으니 궁금하면 직접 해보면 재밌을 것이다.

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

728x90
반응형

댓글