말랑말랑제리스타일

카카오 AI 칼로 2.0 최신 버전 파이썬으로 사용하기 본문

IT기타/최신 IT 트렌드

카카오 AI 칼로 2.0 최신 버전 파이썬으로 사용하기

제리제리 2023. 7. 10. 13:00

카카오 AI 그림 API인 칼로에서 최신 버전인 카카오 칼로 2.0을 출시했는데요. 아직까지 API 테스트 사이트에서는 칼로 2.0 버전을 사용하고 있지는 않는 것 같아 직접 파이썬으로 사용하는 방법을 알려드립니다.

카카오 AI 칼로란?

반응형

카카오 AI 서비스인 칼로란 인공지능으로 그림을 그려주는 서비스입니다. 이런 인공지능 그림 그려주는 사이트는 대표적으로 미드저니나 Open AI의 DALLE가 있죠.

물론 둘 다 해외 서비스이고 국산 서비스인 카카오에서도 그림을 그려주는 AI인 칼로를 출시했고, 이번에 2.0 최신 버전으로 업그레이드되었습니다.

 

카카오 AI 칼로의 대표적인 기능으로는 텍스트를 그림으로 바꿔주는 기능, 이미지의 특정 부분을 채워주는 기능, 이미지를 기반으로 새로 그려주는 기능이 있는데요.

이번에 칼로 2.0으로 업그레이드되면서 인공지능 성능 향상과 추가적인 편의 기능이 생겼다고 하네요.

 

카카오 AI 페이지 접속해서 칼로 2.0 사용을 위한 API 키 발급받기

반응형

자 이제 본격적으로 카카오 AI 칼로 2.0을 사용해 봅시다.

파이썬을 사용해서 테스트해 볼 예정이고, 카카오 AI 칼로 2.0을 사용하기 위해서는 우선 API 키를 발급받아야겠죠.

아래의 카카오 개발자 사이트로 들어가서 로그인을 해줍니다.

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

 

카카오계정

 

accounts.kakao.com

그리고 내 애플리케이션 탭으로 들어가면 애플리케이션 추가하기라는 버튼이 보일 겁니다.

이걸 눌러주세요.

카카오 AI AI 키 발급받기
카카오 AI AI 키 발급받기

앱 이름과 사업자명을 대충 입력하고 저장해 줍니다.

그러고 나서 리스트에 추가된 앱 이름을 누르면 앱 키 4개가 발급된 것을 알 수 있습니다.

네이티브 앱 키, Rest API 키, JavaScript 키, Admin 키인데요. 카카오 AI API를 사용하기 위한 키 발급이 끝난 겁니다.

우리는 파이썬을 사용할 거니까 REST API 키를 쓸 거라는 것만 생각해 둡니다.

카카오 AI 사용을 위한 파이썬 코딩

자 이제 파이썬 코딩을 간단히 해봅시다. 말이 코딩이지 컨트롤 C, V 외에는 크게 쓸 일이 없을 겁니다.

먼저 파이썬 프로젝트를 하나 만들어줍니다.

그리고 하단의 소스를 그대로 복붙 해주세요. 카카오 AI 공식 사이트에서 그대로 긁어온 겁니다.

# REST API 호출, 이미지 파일 처리에 필요한 라이브러리
import requests
import json
import urllib
from PIL import Image

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

# 이미지 생성하기 요청
def t2i(prompt, negative_prompt):
    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'
        }
    )
    # 응답 JSON 형식으로 변환
    response = json.loads(r.content)
    return response

# 프롬프트에 사용할 제시어
prompt = "A cat with white fur"
negative_prompt = "sleeping cat, dog, human, ugly face, cropped"

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

# 응답의 첫 번째 이미지 생성 결과 출력하기
result = Image.open(urllib.request.urlopen(response.get("images")[0].get("image")))
result.show()

그리고 상단 8번째 줄에 ${REST_API_KEY}에는 발급받은 Rest API 키를 넣어줘야겠죠.

중간에 카카오 브레인 V2라고 돼있는 걸 보니 2.0 버전의 API 소스가 맞는 것 같네요.

 

참고로 PIL에 에러 뜨는 분들은 터미널을 열어서 아래 명령어로 설치해 줍니다.

pip install pillow

파이썬에서 이미지를 사용하기 위한 패키지입니다.

당연히 카카오 칼로가 이미지를 다루는 AI니까 이미지 사용을 위한 패키지 하나는 있어야겠죠.

Open CV가 익숙하다면 Open CV를 사용하셔도 될 겁니다.

 

이렇게 생성된 이미지를 그냥 버리기는 아까우니까 맨 밑에 저장 코드를 추가해 줍시다.

result.save('image_create.png','PNG')

자 그러면 이제 실행해 봅시다.

자 잘 생성이 되었죠? 가운데 prompt에 있는 A cat with white fur에 대한 이미지를 생성한 결과인데 이 결과에서 sleeping cat, dog, human, ugly face, cropped를 제외한 거죠. 여기서 다른 건 그렇다 치고 못생긴 얼굴을 제외한다는 게 좀 그렇긴 하지만 일단 이렇게 생성이 됩니다.

카카오 AI 칼로 2.0으로 로 생성한 이미지
카카오 AI 칼로 2.0으로 로 생성한 이미지

카카오 칼로 2.0으로 이미지 확대하기

반응형

이번에는 카카오 칼로 2.0에 새로 추가된 이미지 확대하기 기능입니다.

돋보기로 확대하면 깨지는 상황이 있죠? 그런 깨짐을 최대한 제거하고 AI 기능을 이용해 확대하는 기능이라고 합니다.

소위 보간이라고 그러는데 AI를 이용한 보간은 어떨지 모르겠네요.

뭐든 일단 한번 써보겠습니다. 이번에도 카카오 칼로 공식 페이지에 있는 소스를 긁어서 쓰겠습니다.

# REST API 호출, 이미지 파일 처리에 필요한 라이브러리
import requests
import json
import io
import base64
import urllib
from PIL import Image

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

# 이미지 확대하기
def upscale(images, scale=2):
    r = requests.post(
        'https://api.kakaobrain.com/v2/inference/karlo/upscale',
        json = {
            'images': images,
            'scale': scale
        },
        headers = {
            'Authorization': f'KakaoAK {REST_API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    # 응답 JSON 형식으로 변환
    response = json.loads(r.content)
    return response

# Base64 인코딩
def imageToString(img):
    img_byte_arr = io.BytesIO()
    img.save(img_byte_arr, format='PNG')
    my_encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
    return my_encoded_img

# 이미지 파일 불러오기
img = Image.open('image_create.png')

# 이미지를 Base64 인코딩하기
img_base64 = imageToString(img)

# 이미지를 Base64 인코딩한 값의 배열
img_arr = []
img_arr.append(img_base64)

# 이미지 변환하기 REST API 호출
response = upscale(img_arr, 4)

# 응답의 첫 번째 이미지 생성 결과 출력하기
result = Image.open(urllib.request.urlopen(response.get("images")[0]))
result.show()
result.save('image_scaling.png','PNG')

자 마찬가지로 코드를 그대로 긁어서 붙여 넣고 REST API KEY를 바꿔줍니다.

밑에서 6번째 줄에 있는 스케일이 2라고 돼있는데 이게 2배로 늘린다는 뜻인 것 같으니 최대 값인 4배로 늘려봅시다.

그리고 마지막에 저장하는 파일 이름을 바꿔줄 거고 original.png라고 돼있던 부분을 방금 저장한 image_create.png로 바꿨습니다.

그리고 실행해 봅시다.

카카오 칼로 AI 이미지 확대 결과
카카오 칼로 AI 이미지 확대 결과

왼쪽이 원본 이미지 오른쪽이 카카오 칼로 2.0을 이용해 확대한 이미지입니다.

뭔가 잘 보면 자연스러운 것 같기도 하고 잘 모르겠습니다. 암만 키워봐도 차이를 잘 모르겠으니 넘어갑시다.

카카오 칼로 2.0으로 이미지변환하기

자 마지막으로 카카오 칼로 2.0의 이미지 변환 기능입니다.

설명을 보면 주어진 이미지의 내용을 이해하고 새로운 이미지를 AI를 이용해 생성하는 기능이라고 합니다.

일단 한번 돌려봅시다.

# REST API 호출, 이미지 파일 처리에 필요한 라이브러리
import requests
import json
import io
import base64
import urllib
from PIL import Image

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

# 이미지 변환하기
def variations(image, negative_prompt):
    r = requests.post(
        'https://api.kakaobrain.com/v2/inference/karlo/variations',
        json = {
            'image': image,
            'negative_prompt': negative_prompt
        },
        headers = {
            'Authorization': f'KakaoAK {REST_API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    # 응답 JSON 형식으로 변환
    response = json.loads(r.content)
    return response

# Base64 인코딩
def imageToString(img):
    img_byte_arr = io.BytesIO()
    img.save(img_byte_arr, format='PNG')
    my_encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
    return my_encoded_img

# 이미지 파일 불러오기
img = Image.open('image_create.png')

# 이미지를 Base64 인코딩하기
img_base64 = imageToString(img)

# 이미지 변환 시 제외할 요소 지정
negative_prompt = 'outdoor scene'

# 이미지 변환하기 REST API 호출
response = variations(img_base64, negative_prompt)
print(response)

# 응답의 첫 번째 이미지 생성 결과 출력하기
result = Image.open(urllib.request.urlopen(response.get("images")[0].get("image")))
result.show()
result.save('image_change.png','PNG')

마찬가지로 카카오 칼로 AI 공식 사이트에서 가져온 소스고 REST API 키랑 원본 이미지 제목만 바꿔줍니다.

그리고 실행해서 결과를 봅시다.

카카오 칼로 이미지 변환 테스트
카카오 칼로 이미지 변환 테스트

자 이런 결과가 나왔습니다.

몇 번 돌려보니 다양한 움직임의 고양이들이 나왔네요.

자 이번에는 prompt라는 인자를 하나 더 줘볼게요.

super dragon을 한번 넣어보겠습니다. 이미지 생성도 3장씩 해볼게요.

# 이미지 변환하기
def variations(image, negative_prompt):
    r = requests.post(
        'https://api.kakaobrain.com/v2/inference/karlo/variations',
        json = {
            'image': image,
            'prompt':'with super dragon',
            'negative_prompt': negative_prompt,
            'samples': 3
        },
        headers = {
            'Authorization': f'KakaoAK {REST_API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    # 응답 JSON 형식으로 변환
    response = json.loads(r.content)
    return response

# Base64 인코딩
def imageToString(img):
    img_byte_arr = io.BytesIO()
    img.save(img_byte_arr, format='PNG')
    my_encoded_img = base64.encodebytes(img_byte_arr.getvalue()).decode('ascii')
    return my_encoded_img

# 이미지 파일 불러오기
img = Image.open('image_create.png')

# 이미지를 Base64 인코딩하기
img_base64 = imageToString(img)

# 이미지 변환 시 제외할 요소 지정
negative_prompt = 'outdoor scene'

# 이미지 변환하기 REST API 호출
response = variations(img_base64, negative_prompt)
print(response)

# 응답의 첫 번째 이미지 생성 결과 출력하기
# result = Image.open(urllib.request.urlopen(response.get("images")[0].get("image")))
for i in range(1,4):
    result = Image.open(urllib.request.urlopen(response.get("images")[i].get("image")))
    # result.show()
    result.save('image_change_v2' + str(i)+ '.png','PNG')

자 슈퍼드래건과 함께하는 이 귀여운 고양이 모습을 카카오 칼로 AI를 이용해서 그려볼 겁니다.

일단 잘 동작을 안 합니다. 어김없이 귀여운 고양이만 계속 나오네요.

그러나 negative prompt에 white cat을 추가하니 고양이 코 색깔이 바뀌네요.

카카오 칼로 2.0 이미지 변환 결과
카카오 칼로 2.0 이미지 변환 결과

white cat을 제외하고 white and black cat이 된 것 같네요.

이 외에도 NSFW 검사하기라고 해서 폭력적이거나 선정적인 콘텐츠를 검사하는 기능이 있다고 하는데 지금 컴퓨터에 그런 이미지가 없어서 확인은 못하고요. 크게 기대는 안됩니다.

 

예전에 이미지 특정 영역을 지우고 다시 그려주는 기능이 카카오 칼로 1.0에 있었는데 카카오 칼로 2.0에서 말도 없이 삭제를 했네요. 아니면 어떤 다른 기능에 합친 건지는 잘 모르겠습니다.

여하튼 카카오 칼로 2.0을 지금까지 한번 써봤는데요.

판단은 여러분에게 맡깁니다.

 

참고로 카카오 API는 무료는 아닙니다.

반응형

이걸로 어떤 사이트나 앱을 만들 수는 없다는 뜻이고 그게 제가 API 키를 공개하지 않은 이유입니다.

카카오 개발자 공식 페이지에서 맨 밑에 내리면 쿼터라는 글자가 보일 텐데요.

이 쿼터가 토큰입니다. 카카오 칼로의 경우 현재 월에 사용 가능한 양이 결과 생선 건 수 기준으로 60만 건이라고 하네요.

이건 카카오 칼로 1.0보다 늘어난 것 같습니다.

 

뭐 미드저니도 있고 많이 있긴 한데, 일단 제가 해본 것 중에 파이썬만 알면 가장 간단하게 AI 이미지를 만들 수 있는 API임에는 틀림없는 것 같습니다.

 

 

반응형
Comments