반원 블로그

[파이썬 레시피 - 웹 활용 입문편] 04. REST API - C. 네이버 얼굴 이미지 인식 API(CFR API) 본문

2018~/파이선 레시피 웹 활용 입문편

[파이썬 레시피 - 웹 활용 입문편] 04. REST API - C. 네이버 얼굴 이미지 인식 API(CFR API)

반원_SemiCircle 2019. 6. 22. 12:32

CFR API

Clova Face Recognition API는 이미지 데이터에서 얼굴 인식 결과를 알려줍니다. 또한 요청 URL만 조금 바꾸면 닮은 꼴 연예인을 알려주는 서비스를 이용할 수 있습니다.

기본 예제

친절하게도 파이썬 예제를 제공합니다.
https://developers.naver.com/docs/clova/api/CFR/API_Guide.md#Python
아쉽게도 코드 주석이 #대신 //로 되서 오류가 나지만 간단하니 고쳐줍시다.

또한 client_id와 client_secret에서 이전 [B. 네이버 개발자 등록]에서 발급받은 값을 넣어줍시다.

코드 중간에 open함수에 파일명을 적는 곳이 있습니다. 파이썬과 같은 위치에 이미지 파일을 옮겨놓고, 코드에 파일명을 적을 때는 확장자까지 대소문자를 구분해서 입력합시다. (예 : test.png)

모든 준비가 됐다면 실행해보시면 되겠습니다.

import os
import sys
import requests
client_id = "발급받은ID"
client_secret = "발급받은Secret"
url = "https://openapi.naver.com/v1/vision/face" # 얼굴감지
# url = "https://openapi.naver.com/v1/vision/celebrity" # 유명인 얼굴인식
files = {'image': open('파일명', 'rb')}
headers = {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret }
response = requests.post(url,  files=files, headers=headers)
rescode = response.status_code
if(rescode==200):
    print (response.text)
else:
    print("Error Code:" + rescode)

응답 데이터 활용

응답데이터의 구성정보는 여기서 확인할 수 있습니다. 아직은 보기 어렵지만 아래 영역에 "응답 예"와 비교하면 충분히 이해할 수 있습니다.
https://developers.naver.com/docs/clova/api/CFR/API_Guide.md#%EC%9D%91%EB%8B%B5-2

현재 응답받은 데이터(response)의 text 속성으로 결과를 확인할 수 있습니다. 출력결과를 보니 구조가 딕셔너리형(dict)과 유사한데, 이는 JSON이라는 형식으로 쓰여진 문자열입니다. 이 단순 문자열을 의미있는 데이터로 바꿔봅시다.

JSON형식 문자열은 json모듈의 loads함수를 통해 변환할 수 있습니다. 모듈을 참조하고 이를 간단히 활용하도록 코드를 작성해봅시다.

import os
import sys
import requests
import json
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
url = "https://openapi.naver.com/v1/vision/face" # 얼굴감지
# url = "https://openapi.naver.com/v1/vision/celebrity" # 유명인 얼굴인식
files = {'image': open('YOUR_FILE_NAME', 'rb')}
headers = {'X-Naver-Client-Id': client_id, 'X-Naver-Client-Secret': client_secret }
response = requests.post(url,  files=files, headers=headers)
rescode = response.status_code
if(rescode==200):
    # print (response.text)
    data = json.loads(response.text)
    faceCount = data['info']['faceCount']
    print("감지된 얼굴 수는 {}입니다.".format(faceCount))
else:
    print("Error Code:" + rescode)

처리한도

현재 처리한도는

  • 사진크기 : 2MB
  • 하루에 1000건

입니다.

https://developers.naver.com/products/clova/face/

Comments