이번에는 여러 장의 사진을 이용하여 모자이크 후 이미지 파일을 저장하는 방법을 설명하도록 하겠습니다.
필요한 이미지 다시 한번 첨부드립니다!
추가적으로 얼굴 이미지를 구하실 분들은 아래 링크에서 face를 입력 후 다운로드하세요!
저작권이 없는 이미지 사이트입니다. --> pixabay.com/
1. REST API
REST API키를 복사해주세요.
2. python 코드
import sys
import argparse
import requests
from PIL import Image, ImageFilter
import glob
import os
API_URL = 'https://dapi.kakao.com/v2/vision/face/detect'
RESTAPI_KEY = '위 1에서 복사한 RESTAPI키'
def detect_face(filename):
headers = {'Authorization': 'KakaoAK {}'.format(RESTAPI_KEY)}
try:
files = { 'image' : open(filename, 'rb')}
resp = requests.post(API_URL, headers=headers, files=files)
resp.status_code
return resp.json()
except Exception as e:
print(str(e))
sys.exit(0)
def mosaic(filename, detection_result):
image = Image.open(filename)
for face in detection_result['result']['faces']:
x = int(face['x']*image.width)
w = int(face['w']*image.width)
y = int(face['y']*image.height)
h = int(face['h']*image.height)
box = image.crop((x,y,x+w, y+h))
box = box.resize((20,20), Image.NEAREST).resize((w,h), Image.NEAREST)
image.paste(box, (x,y,x+w, y+h))
return image
if __name__ == "__main__":
#1.files=glob.glob('./kakao_test/*.jpg')+glob.glob('./kakao_test/*.jpeg')+glob.glob('./kakao_test/*.png')
#2.files=glob.glob('./*.jpg')+glob.glob('./*.jpeg')+glob.glob('./*.png')
for i in files:
head,tail = os.path.split(i)
detection_result = detect_face(i)
image = mosaic(i, detection_result)
image.save(head+'/Mosaic_'+tail,'JPEG')
※ 간단한 코드 설명! (이전 코드와 다른 점만 간단하게 설명하겠습니다.)
files 부분에서 경로에 익숙하신 분은 #1에서 별도의 이미지 디렉토리를 만들어서 이미지들을 저장하시고 경로를 맞춰주세요. 익숙하지 않으신 분은 python코드가 돌아가는 디렉토리에 이미지를 저장해주세요.
files부분에서 #1과 #2 둘중 하나만 사용하셔야 합니다!
glob라이브러리를 이용하여 "kakao_test" 디렉토리 밑에 있는 .jpg, .jpeg, .png의 이미지 파일들의 경로를 리스트로 만들어 files라는 객체를 생성합니다.
for 문을 이용하여 files 객체에 담은 이미지 파일 경로 요소들을 하나씩 꺼냅니다.
head,tail = os.path.split(i) # os 라이브러리를 이용하여 head 객체에는 이미지 파일이 들어있는 디렉토리 경로, tail객체에는 이미지 파일명을 생성합니다.
detection_result = detect_face(i) # 이전 코드와 동일하게 얼굴 정보에 대한 json파일을 return 받습니다.
image = mosaic(i, detection_result) # 이전 코드와 동일합니다. (모자이크하는 함수)
image.save(head+'/Mosaic_'+tail, 'JPEG') # image.save를 이용하여 jpeg라는 이미지 파일을 디렉토리 경로+/Mosaic_이미지 파일명으로 생성합니다.
#1. 코드를 사용한다면 "./kakao_test/Mosaic_cat.jpg"라는 이미지 파일이 생성되게 됩니다!
3. 결과 확인
위 예제 코드를 성공하셨다면 결과를 확인해보세요.
흥미로운 점은 사람뿐만 아니라 사자, 고릴라, 고양이 모두 얼굴에 모자이크가 되어있는 것을 확인하실 수 있습니다.
추가적으로 최상단에 있는 링크에서 여러 이미지를 다운로드 후 새로운 이미지들을 제작해보세요!
'카카오 API' 카테고리의 다른 글
[python] 10분 만에 카카오톡 비전 사용편 - (3. 썸네일) (2) | 2021.03.10 |
---|---|
[python] 10분 만에 카카오톡 비전 사용편 - (2. 상품 검출) (0) | 2021.03.09 |
[python] 10분 만에 카카오톡 비전 사용편 - (1-1. 얼굴 검출) (0) | 2021.03.05 |
[Python] 10분 만에 카카오톡 메시지 보내기 친구편 - (2. 메시지 보내기) (43) | 2021.01.04 |
[Python] 10분 만에 카카오톡 메시지 보내기 친구편 - (1. 설정 & 사용자 토큰 발급) (25) | 2020.12.31 |