안녕하세요!
카카오톡 api를 공부하시는 분들이 많으신 것 같아서 이번에는 재밌고 신기한 비전을 사용해 보려고 합니다.
카카오톡 비전에는 얼굴 검출, 상품 검출, 성인 이미지 판별 등이 있습니다.
1편에는 얼굴 검출을 사용해 보겠습니다.
필요한 이미지 첨부해드릴게요!
추가적으로 얼굴 이미지를 구하실 분들은 아래 링크에서 face를 입력 후 다운로드하세요!
저작권이 없는 이미지 사이트입니다. --> pixabay.com/
1. REST API
메시지 보내기 편에서 사용한 REST API키를 복사해주세요.
위 이미지를 모르시는 분은 메시지 보내기 편을 먼저 사용해보세요!
novice-engineers.tistory.com/9?category=908185
2. python 코드
얼굴을 검출하여 모자이크 하는 코드입니다.
import sys
import argparse
import requests
from PIL import Image, ImageFilter
API_URL = 'https://dapi.kakao.com/v2/vision/face/detect'
RESTAPI_KEY = '1에서 복사한 REST API키'
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.resp.status_code
#print(resp.json())
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__":
parser = argparse.ArgumentParser(description='얼굴 모자이크.')
# 1.parser.add_argument('image_file', type=str, nargs='?', default="./kakao_test/girl1.jpg", help='image file to hide faces')
# 2.parser.add_argument('image_file', type=str, nargs='?', default="./girl1.jpg", help='image file to hide faces')
args = parser.parse_args()
detection_result = detect_face(args.image_file)
image = mosaic(args.image_file, detection_result)
image.show()
※ 간단한 코드설명!
앞으로도 코드가 매우 비슷하기 때문에 얼굴 검출편에서 정확하게 이해하시는게 중요합니다!
우선 RESTAPI_KEY에 1에서 복사한 REST API 키를 복사해서 넣어주세요.
argparse란 프로그램에 필요한 인자를 사용자 명령행 인터페이스로 쉽게 작성하도록 도와주는 라이브러리입니다.
command 창에서 프로그램 내의 인자를 조절할 수 있도록 도와줍니다. 기본적으로 python에 내장되어 있습니다.
==> 사용자가 편리하게 사용할 수 있도록 도와주는 라이브러리라고 생각하시면 될 것 같아용!
parser = argparse.ArgumentParser(description='얼굴 모자이크') # 설명을 기입하는 코드라고 생각하세요.
parser.add_argument('image_file', type=str, nargs='?', default="./kakao_test/girl1.jpg", help='image file to hide faces')
위 코드에서 "./kakao_test/girl1.jpg" 해당 경로의 girl1.jpg라는 이미지를 사용한다고 생각해주세요!
★ 경로에 익숙하신 분은 #1번을 이용하여 자신만의 이미지 디렉토리 경로에 넣어주시고 익숙하지 않으신 분은 작업 디렉토리에 이미지를 다운로드하시고 #2번을 이용해주세요. 둘 중 하나만 사용하셔야 합니다!
* detect_face함수 설명
headers = {'Authorization': 'KakaoAK {}'.format(RESTAPI_KEY)} # 이번에는 헤더가 메시지편과 조금 다릅니다.
이유가 궁금하신 분은 아래 추가 설명을 확인해보세요. (사실 중요한 부분은 아닙니다. 급하신 분은 넘어가셔두 돼용 ㅎ)
<추가 설명>
1. 아래 링크나 이미지를 클릭하셔서 사이트로 이동합니다.
developers.kakao.com/docs/latest/ko/vision/dev-guide#recog-face
2. Ctrl+F를 누르시고 Request를 입력하세요.
3. URL부분에 있는 Authorization을 확인하시면 KakaoAk {REST_API_KEY}로 되어 있습니다.
files = { 'image' : open(filename, 'rb')} # 'image':파일 라는 Key, Value인 딕셔너리 형태로 만들어 줍니다.
resp = requests.post(API_URL, headers=headers, files=files) #해당 형태로 보내줍니다.
resp.status_code # 정상적으로 보내졌는지 확인
return resp.json() # 이 부분이 중요합니다!
요청에 성공하면 응답은 JSON 객체로 검출된 얼굴 영역 정보를 받게 됩니다.
#print(resp.json()) 주석 처리된 부분을 해제하시고 어떻게 출력되는지 확인해보세요.
얼굴의 정보들을 확인할 수 있습니다. 흥미로운 부분은 성별, 나이 등을 추측한 %를 확인하실 수 있어요.
* mosaic함수: 모자이크를 처리해주는 함수입니다.
모자이크 강도를 조절하실 분은
box = box.resize((20,20), Image.NEAREST).resize((w,h), Image.NEAREST) # 이 코드에서 숫자를 변경해보세요!
3. 실행
# 초기 이미지
# 결과 이미지
다음 편에서는 여러 장의 이미지들을 한 번에 모자이크하는 코드를 확인해보겠습니다.
(사실 한번에 하려고 했는데 분량 조절에 실패했습니당ㅎ...)
'카카오 API' 카테고리의 다른 글
[python] 10분 만에 카카오톡 비전 사용편 - (2. 상품 검출) (0) | 2021.03.09 |
---|---|
[python] 10분 만에 카카오톡 비전 사용편 - (1-2. 얼굴 검출[저장편]) (0) | 2021.03.08 |
[Python] 10분 만에 카카오톡 메시지 보내기 친구편 - (2. 메시지 보내기) (43) | 2021.01.04 |
[Python] 10분 만에 카카오톡 메시지 보내기 친구편 - (1. 설정 & 사용자 토큰 발급) (25) | 2020.12.31 |
[Python] 10분 만에 카카오톡 메시지 보내기 - (3. 동의 항목) (0) | 2020.12.30 |