▶︎ Karlo
Karlo는 카카오에서 개발한 이미지 생성 AI이다.
GPT의 Dalle와 비슷하게 텍스트만으로 AI 이미지를 생성해볼 수 있다.
또한, 일일 Quota(사용량 제한)가 적용되어 있기 때문에 무료로 무한정 사용할 수 있는 것은 아니다.
적용 한도는 https://developers.kakao.com/docs/latest/ko/getting-started/quota에서 자세하게 확인이 가능하다.
▶︎ 시작하기
칼로 각 API는 적용 가능한 모델 버전이 존재하며, version
으로 적용할 모델 버전을 선택할 수 있다.
‣ API 키 발급
Karlo API를 사용하기 위해서는 KAKAO API 키를 발급 받아야 한다.
아래의 카카오 개발자 사이트로 들어가 로그인을 해주자.
https://developers.kakao.com/console/app
그리고 내 애플리케이션 탭으로 들어가 새로운 애플리케이션을 추가하자.
대충 입력하고 저장해주도록 하자.
그리고나서 리스트에 추가된 앱 이름을 누르면 앱 키 4개가 발급된 것을 볼 수 있을 것이다.
(네이티브 앱 키, Rest API 키, Javascript 키, Admin 키)
우리는 Karlo API를 사용하는데 필요한 REST API 키만 복사하여 어딘가에 붙여넣도록 하자.
‣ API 사용방법
API 호출에 필요한 파라메터들은 위 Docs에서 자세하게 알아볼 수 있다.
여기서 우리는 아주 간단한 이미지 생성 코드를 작성해볼 것이다.
먼저 코드를 구동하는데 필요한 패키지들을 다운로드 받기 위해 아래 명령어를 실행해주도록 하자.
pip install requests, python-dotenv, image
메인코드를 작성해보자.
아래 코드는 카카오 공식 Docs에서 그대로 가져와 조금 수정한 것이다.
carlo.py
# REST API 호출, 이미지 파일 처리에 필요한 라이브러리
import urllib.request
import requests
import json
import urllib
import os
from PIL import Image
from dotenv import load_dotenv
from googletrans import Translator
def get_environment(dotenv_path: str='.env') -> str:
load_dotenv(dotenv_path=dotenv_path)
return os.getenv('KARLO_API_KEY')
class Karlo():
def __init__(self) -> None:
self.api_key: str = get_environment()
self.google = Translator()
def create_image(self, prompt: str, negative_prompt: str) -> dict[str,str|list]:
r = requests.post(
'https://api.kakaobrain.com/v2/inference/karlo/t2i',
json = {
"version": "v2.1",
"prompt": prompt,
"negative_prompt": negative_prompt,
"height": 1024,
"width": 1024
},
headers = {
'Authorization': f'KakaoAK {self.api_key}',
'Content-Type': 'application/json'
}
)
# 응답 JSON 형식으로 변환
response = json.loads(r.content)
return response
def translate_text(self, ko_messages: str) -> str:
result: str = self.google.translate(text=ko_messages, dest='en')
return result.text
def save_image(self, response: dict[str,str|list]) -> None:
result = Image.open(urllib.request.urlopen(response.get('images')[0].get('image')))
result.save(fp='ai_image.png', format='PNG')
def main() -> None:
# Create instance
karlo: Karlo = Karlo()
# 프롬프트 지정
ko_prompt: str = '너가 생각하는 미래의 공상 과학 배경을 그려줘.'
negative_prompt: str = '' # 이미지 변환 시 제외할 요소 지정
# 프롬프트 번역
prompt: str = karlo.translate_text(ko_messages=ko_prompt)
# 이미지 생성
response = karlo.create_image(prompt=prompt, negative_prompt=negative_prompt)
# 이미지 다운로드
karlo.save_image(response=response)
if __name__ == '__main__':
main()
response
의 응답 값은 아래와 같다.
{'id': '1b010bcbae50b5e4', 'model_version': 'v2.1.1.prod', 'images': [{'id': 'a2FybG8tdHJpdG9uLXYyLjEuMS04NGZkOWNkNTQ1LXF0bGo2-1957bff0-fc01-4ba9-90e1-60676e2e6111', 'image': 'https://mk.kakaocdn.net/dna/karlo/image/2024-02-22/15/1957bff0-fc01-4ba9-90e1-60676e2e6111.webp?credential=smxRqiqUEJBVgohptvfXS5JoYeFv4Xxa&expires=1713769140&signature=m4oaGyebkCPPwzt5zhVpqZKcfh4%3D', 'seed': 3364928144, 'nsfw_content_detected': None, 'nsfw_score': None}]}
‣ 결과물
아래 이미지는 위 코드를 기반으로 '너가 생각하는 미래의 공상 과학 배경을 그려줘.' 라는 질문을 던졌을 때 생성된 이미지이다.