이번에는 썸네일을 자동으로 생성해주는 카카오톡 비전 API를 공부해보겠습니다.
카카오톡 비전에서 제공하는 썸네일은 이미지 내의 콘텐츠를 바탕으로 중요한 부분을 썸네일로 생성해주는 API입니다. 요청한 width, height 비율에 따라 이미지를 잘라내어 반환합니다.
필요한 이미지 첨부합니다!
1. REST API
앱키
REST API 키를 복사해주세요.
2. 테스트 python 코드
import sys
import argparse
import requests
from PIL import Image, ImageFilter
API_URL = 'https://dapi.kakao.com/v2/vision/thumbnail/detect'
MYAPP_KEY = '위 1에서 복사한 RESTAPI키'
def detect_thumbnail(filename, width, height):
headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)}
try:
files = { 'image' : open(filename, 'rb')}
params = {'width': width, 'height': height}
resp = requests.post(API_URL, headers=headers, data=params, files=files)
resp.status_code
#print(resp.json())
return resp.json()
except Exception as e:
print(str(e))
sys.exit(0)
def show_thumbnail(filename, detection_result, width, height):
image = Image.open(filename)
rect = detection_result['result']['thumbnail']
thumbnail = image.crop((rect['x'], rect['y'], rect['x'] + rect['width'], rect['y'] + rect['height']))
thumbnail = thumbnail.resize((width, height))
return thumbnail
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='썸네일')
#1.parser.add_argument('image_file', type=str, nargs='?', default="./kakao_test/Hedgehog.jpg", help='썸네일 이미지 만들기')
#2.parser.add_argument('image_file', type=str, nargs='?', default="./Hedgehog.jpg", help='썸네일 이미지 만들기')
parser.add_argument('width', type=int, nargs='?', default=150, help='넓이')
parser.add_argument('height', type=int, nargs='?', default=200, help='높이')
args = parser.parse_args()
detection_result = detect_thumbnail(args.image_file, args.width, args.height)
image = show_thumbnail(args.image_file, detection_result, args.width, args.height)
image.show()
※ 간단한 코드 설명
경로에 익숙하신 분은 #1로 별도의 디렉토리로, 익숙하지 않으신분은 #2를 이용해주세요!
이번에는 아래의 새로운 코드가 추가 되었습니다.
parser.add_argument( 'width' , type = int , nargs = '?' , default = 150 , help = '넓이' ) # 사진의 기본 넓이를 150으로 조정
parser.add_argument( 'height' , type = int , nargs = '?' , default = 200 , help = '높이' ) # 사진의 기본 크기를 200으로 조정
썸네일을 만들 사진의 크기를 조정하는 코드라고 생각하시면 될 것 같습니다.
* detect_product 함수
detect_product함수에 해당 이미지 파일, 넓이, 높이 3개의 인자를 보내줍니다.
files = { 'image' : open (filename, 'rb' )} # 'image'(Key):이미지파일(value)형태의 딕셔너리를 files에 저장합니다.
params = { 'width' : width, 'height' : height} # 'width'(Key):넓이(value), 'height'(Key):높이(value)형태의 딕셔너리를 params에 저장합니다.
resp = requests.post(API_URL, headers =headers, data =params, files =files) # URL에 요청하는 코드
필요한 파라미터는 다음과 같습니다.
파라미터
좀 더 자세히 확인하고 싶으신 분은 아래 주소나 이미지를 클릭하신 후 Ctrl+F를 누르신 후 썸네일을 검색해보세요!
developers.kakao.com/docs/latest/ko/vision/dev-guide#create-thumbnail
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
#print(resp.json()) 부분의 주석을 풀면 json객체를 확인해보실 수 있습니다.
* show_thumbnail함수
이미지 사이즈를 조정해주는 함수입니다.
thumbnail = image.crop((rect[ 'x' ], rect[ 'y' ], rect[ 'x' ] + rect[ 'width' ], rect[ 'y' ] + rect[ 'height' ])) # 해당 사이즈로 이미지를 자르고
thumbnail = thumbnail.resize((width, height)) # 이미지 사이즈를 다시 조정합니다.
3. 결과 이미지(Before & After)
이전 다음
0 1
4. 이미지 저장 코드
import sys
import argparse
import requests
from PIL import Image, ImageFilter
import os
import glob
API_URL = 'https://dapi.kakao.com/v2/vision/thumbnail/detect'
MYAPP_KEY = '위 1에서 복사한 RESTAPI키'
def detect_thumbnail(filename, width, height):
headers = {'Authorization': 'KakaoAK {}'.format(MYAPP_KEY)}
try:
files = { 'image' : open(filename, 'rb')}
params = {'width': width, 'height': height}
resp = requests.post(API_URL, headers=headers, data=params, files=files)
resp.status_code
#print(resp.json())
return resp.json()
except Exception as e:
print(str(e))
sys.exit(0)
def show_thumbnail(filename, detection_result, width, height):
image = Image.open(filename)
rect = detection_result['result']['thumbnail']
thumbnail = image.crop((rect['x'], rect['y'], rect['x'] + rect['width'], rect['y'] + rect['height']))
thumbnail = thumbnail.resize((width, height))
return thumbnail
if __name__ == "__main__":
files=glob.glob('./kakao_test/thumbnail/*.jpg')+glob.glob('./kakao_test/thumbnail/*.jpeg')+glob.glob('./kakao_test/thumbnail/*.png')
width=150
height=200
for i in files:
head,tail = os.path.split(i)
detection_result = detect_thumbnail(i,width,height)
image = show_thumbnail(i, detection_result, width, height)
image.save(head+'/thumbnail_'+tail,'JPEG')
files객체를 생성하실 때 경로에 익숙하신 분은 #1. 번에서 별도의 이미지 디렉토리를 이용하시고 익숙하지 않으신 분은 #2. 번익숙하지 않으신 분은 python 코드를 작업하는 디렉토리에 이미지를 넣어주시고 #2. 번을 사용해주세요. 둘 중 하나만 사용하셔야 합니다!
5. 결과 이미지
0 1 2 3
썸네일