AI Service > Face Liveness > API 가이드
API 공통 정보
입력 이미지 가이드
- 입력 이미지는 너비와 높이 모두 최소 80px 이상이어야 합니다.
- 얼굴 크기가 최소 60*60px 이상이어야 얼굴 인식이 가능합니다.
- 이미지 크기가 커질수록 최소 얼굴 크기도 커져야 더 정확하게 인식이 가능합니다.
- 이미지에서 얼굴이 차지하는 비중이 클수록 더 정확하게 인식이 가능합니다.
- 입력 이미지에서 얼굴의 좌우 각도(Yaw)와 상하 각도(Pitch)는 모두 45도 이하여야 합니다.
- 이미지 최대 크기: 최대 3MB(3,000,000Byte)
- 지원 이미지 형식: PNG, JPEG
- 이미지 URL에 포트를 직접 지정하는 경우 80, 443, 10000~12000 포트만 사용 가능합니다.
API 목차
얼굴 스푸핑 감지 API
요청
- {appKey}와 {secretKey}는 콘솔 오른쪽 상단 URL & Appkey 버튼을 클릭하여 확인이 가능합니다.
[URI]
메서드 |
URI |
POST |
https://face-liveness.api.nhncloudservice.com/v1.0/appkeys/{appKey}/spoofing |
[요청 헤더]
이름 |
값 |
설명 |
Authorization |
{secretKey} |
콘솔에서 발급 받은 보안 키 |
[Path Variable]
이름 |
설명 |
appKey |
통합 앱키 또는 서비스 앱키 |
Content-Type: application/json
이름 |
타입 |
필수 여부 |
기본값 |
유효 범위 |
예제 |
설명 |
image |
object |
O |
|
|
- |
얼굴 감지에 사용할 이미지 |
image.url |
string |
△ |
|
|
"https://..." |
이미지의 URL |
image.bytes |
blob |
△ |
|
|
"/0j3Ohdk==..." |
Base64로 인코딩된 이미지 바이트 |
spoofingCondition |
string |
|
"balanced" |
"weak", "balanced", "strict" |
"balanced" |
스푸핑 감지 감도 |
- image.url, image.bytes 중 반드시 1개만 있어야 합니다.
Content-Type: multipart/form-data
이름 |
타입 |
필수 여부 |
기본값 |
유효 범위 |
예제 |
설명 |
imageFile |
file |
O |
|
|
image.png |
얼굴 감지에 사용할 이미지 파일 |
spoofingCondition |
string |
|
"balanced" |
"weak", "balanced", "strict" |
"balanced" |
스푸핑 감지 감도 |
요청 예
curl -X POST 'https://face-liveness.api.nhncloudservice.com/v1.0/appkeys/{appKey}/spoofing' \
-H 'Authorization: {secretKey}' \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"image": {
"url":"https://..."
}
}'
curl -X POST 'https://face-liveness.api.nhncloudservice.com/v1.0/appkeys/{appKey}/spoofing' \
-H 'Authorization: {secretKey}' \
-F imageFile=@image.png
응답
[응답 본문 헤더]
이름 |
타입 |
설명 |
header.isSuccessful |
Boolean |
분석 API 성공 여부 |
header.resultCode |
Integer |
결과 코드 |
header.resultMessage |
String |
결과 메시지(성공 시 Success, 실패 시 오류 내용) |
[응답 본문 데이터]
이름 |
타입 |
필수 |
예제 |
설명 |
data.faceDetailCount |
int |
O |
1 |
감지한 얼굴 수 |
data.faceDetails[].bbox |
object |
O |
- |
이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.faceDetails[].bbox.x0 |
float |
O |
0.123 |
이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.faceDetails[].bbox.y0 |
float |
O |
0.123 |
이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.faceDetails[].bbox.x1 |
float |
O |
0.123 |
이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.faceDetails[].bbox.y1 |
float |
O |
0.123 |
이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.faceDetails[].landmarks |
array |
O |
- |
얼굴 특징 |
data.faceDetails[].landmarks[].type |
string |
O |
"leftEye" |
유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.faceDetails[].landmarks[].y |
float |
O |
0.362 |
얼굴 특징의 y 좌표 |
data.faceDetails[].landmarks[].x |
float |
O |
0.362 |
얼굴 특징의 x 좌표 |
data.faceDetails[].spoofing |
boolean |
|
false |
얼굴 스푸핑 여부 |
data.faceDetails[].confidence |
float |
O |
99.9123 |
얼굴 인식 신뢰도 |
응답 본문 예
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "Success"
},
"data": {
"faceDetailCount": 1,
"faceDetails": [
{
"bbox": {
"x0": 0.08727272727272728,
"y0": 0.29333333333333333,
"x1": 0.24363636363636362,
"y1": 0.6213333333333333
},
"landmarks": [
{
"type": "leftEye",
"x": 0.1290909090909091,
"y": 0.4266666666666667
},
{
"type": "rightEye",
"x": 0.2018181818181818,
"y": 0.432
},
{
"type": "nose",
"x": 0.16545454545454547,
"y": 0.49333333333333335
},
{
"type": "leftLip",
"x": 0.13818181818181818,
"y": 0.5546666666666666
},
{
"type": "rightLip",
"x": 0.19272727272727272,
"y": 0.56
}
],
"spoofing": true,
"confidence": 0.997854
}
]
}
}
Error Codes
resultCode |
resultMessage |
설명 |
-40000 |
InvalidParam |
파라미터에 오류가 있음 |
-41005 |
UnauthorizedAppKeyOrSecretKey |
승인되지 않은 Appkey 또는 SecretKey |
-45020 |
ImageTooLargeException |
이미지 크기 초과 |
-45030 |
InvalidImageParameterException |
잘못된 이미지 파라미터. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 |
InvalidImageFormatException |
지원하지 않는 이미지 형식 |
-45050 |
InvalidImageURLException |
잘못된 이미지 URL |
-45060 |
ImageTimeoutError |
이미지 다운로드 시간 초과 |
-50000 |
InternalServerError |
서버 오류 |