[API 도메인]
도메인 |
---|
https://face-recognition.api.nhncloudservice.com |
[응답 본문 헤더]
이름 | 타입 | 설명 |
---|---|---|
header.isSuccessful | boolean | true: 정상 false: 오류 |
header.resultCode | int | 0: 정상 0보다 큼: 부분 성공 음수: 오류 |
header.resultMessage | string | "Success": 정상 그 외: 오류 메시지 반환 |
[성공 응답 본문 예]
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "Success"
}
}
[실패 응답 본문 예]
{
"header": {
"isSuccessful": false,
"resultCode": -40000,
"resultMessage": "InvalidParam"
}
}
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/groups |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
groupId | string | O | [a-z0-9-] 최대 255자 |
"my-group" | 사용자가 등록한 그룹 아이디 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"groupId": "my-group"
}'
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40010 | InvalidGroupID | 그룹 아이디 오류 |
-40020 | DuplicatedGroupID | 중복된 그룹 아이디 |
-40070 | ServiceQuotaExceededException | 생성할 수 있는 최대 그룹 개수 초과 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
GET | /nhn-face-reco/v1.0/appkeys/{appKey}/groups |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
[URL Parameter]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
limit | int | O | 1 ~ 200 | 100 | 최대 크기 | |
next-token | string | "skljsdioew..." | '그룹 목록 응답 본문 데이터'에서 반환한 값 결과가 잘린 경우 next-token을 이용하여 이후 결과를 가지고 올 수 있음 |
시나리오 예
최초 query
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups?limit={limit}' -H 'Content-Type: application/json;charset=UTF-8'
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups?limit={limit}&next-token={next-token}' -H 'Content-Type: application/json;charset=UTF-8'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.groupCount | int | O | 2 | 그룹 수 |
data.groups[].groupId | string | O | "group-id" | 사용자가 등록한 그룹 아이디 |
data.groups[].modelVersion | string | O | "v1.0" | 얼굴 감지 모델 버전 정보 |
data.nextToken | string | O | "dlkj-210jwoivndslko9d..." | 페이징에서 사용할 token 결과가 잘린 경우 next-token을 이용하여 이후 결과를 가지고 올 수 있음 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"groupCount": 2,
"groups": [{
"groupId": "group-id",
"modelVersion": "v1.0"
}, {
"groupId": "my-group",
"modelVersion": "v1.0"
}],
"nextToken":"dlkj-210jwoivndslko9d..."
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40040 | InvalidTokenError | 잘못된 token 사용 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
GET | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}' -H 'Content-Type: application/json;charset=UTF-8'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.groupCount | int | O | 1 | 그룹 수 |
data.groups[].groupId | string | O | "group-id" | 사용자가 등록한 그룹 아이디 |
data.groups[].modelVersion | string | O | "v1.0" | 얼굴 감지 모델 버전 정보 |
data.groups[].createTime | string | O | "2020-11-04T12:36:24" | 그룹을 생성한 시간 |
data.groups[].faceCount | int | 365 | 그룹에 등록한 얼굴 수 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"groupCount": 1,
"groups": [{
"groupId": "group-id",
"modelVersion": "v1.0",
"createTime": "2020-09-29T14:34:12",
"faceCount": 365
}]
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
DELETE | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
$ curl -X DELETE '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}' -H 'Content-Type: application/json;charset=UTF-8'
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/detect |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
image | object | O | - | 얼굴 감지에 사용할 이미지 | ||
image.url | string | △ | "https://..." | 이미지의 URL | ||
image.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
orientation | bool | true | true, false | false | 얼굴 방향 감지 기능 사용 여부 | |
mask | bool | true | true, false | false | 마스크 착용 감지 기능 사용 여부 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/detect' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"image": {
"url":"https://..."
}
}'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
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[].orientation | object | 0.362 | 얼굴 각도 | |
data.faceDetails[].orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.faceDetails[].orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.faceDetails[].orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.faceDetails[].mask | boolean | false | 마스크 착용 여부 | |
data.faceDetails[].confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"faceDetailCount": 1,
"faceDetails": [{
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
}]
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-45020 | ImageTooLargeException | 이미지 크기 초과 |
-45030 | InvalidImageBytesException | 잘못된 이미지 Bytes. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 | InvalidImageFormatException | 지원하지 않는 이미지 포맷 |
-45050 | InvalidImageURLException | 잘못된 이미지 URL |
-45060 | ImageTimeoutError | 이미지 다운로드 시간 초과 |
-45080 | InvalidImageFileException | 이미지 포맷에 맞지 않는 파일 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
image | object | O | - | 얼굴 등록에 사용할 이미지 | ||
image.url | string | △ | "https://..." | 이미지의 URL | ||
image.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
externalImageId | string | [a-zA-Z0-9_.-:] 최대 255자 |
"image01.jsp" | 사용자가 이미지 또는 페이스 아이디에 라벨링을 하기 위해 전달하는 값 | ||
limit | int | O | 1 ~ 20 | 3 | 입력 이미지에서 인식한 얼굴 중 크기가 큰 순으로 정렬하여 그룹에 등록할 최대 얼굴 수 | |
orientation | bool | true | true, false | false | 얼굴 방향 감지 기능 사용 여부 | |
mask | bool | true | true, false | false | 마스크 착용 감지 기능 사용 여부 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"image": {
"url": "https://..."
},
"externalImageId": "image01.jpg",
"limit": 3
}'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.modelVersion | string | O | "v1.0" | 얼굴 감지 모델 정보 |
data.addedFaceCount | int | O | 1 | 등록한 얼굴 수 |
data.addedFaces[].bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.addedFaces[].bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.addedFaces[].bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.addedFaces[].bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.addedFaces[].bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.addedFaces[].faceId | string | O | "9297db50-d4f2-c6b8-ea05-edf2013089fd" | 페이스 아이디 |
data.addedFaces[].imageId | string | O | "87db50d4-f2c6-b8ea-05ed-9f201309fd92" | 이미지 아이디 하나의 이미지 아이디에 여러 페이스 아이디가 존재할 수 있음 |
data.addedFaces[].externalImageId | string | "image01.jpg" | 요청에서 전달된 값 | |
data.addedFaces[].confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
data.addedFaceDetails[].bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.addedFaceDetails[].bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.addedFaceDetails[].bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.addedFaceDetails[].bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.addedFaceDetails[].bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.addedFaceDetails[].landmarks | array | O | - | 얼굴 특징 |
data.addedFaceDetails[].landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.addedFaceDetails[].landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.addedFaceDetails[].landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.addedFaceDetails[].orientation | object | 0.362 | 얼굴 각도 | |
data.addedFaceDetails[].orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.addedFaceDetails[].orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.addedFaceDetails[].orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.addedFaceDetails[].mask | boolean | false | 마스크 착용 여부 | |
data.addedFaceDetails[].confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
data.notAddedFaceCount | int | O | 1 | 등록하지 않은 얼굴 수 |
data.notAddedFaces[].bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.notAddedFaces[].bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.notAddedFaces[].bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.notAddedFaces[].bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.notAddedFaces[].bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.notAddedFaces[].landmarks | array | O | - | 얼굴 특징 |
data.notAddedFaces[].landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.notAddedFaces[].landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.notAddedFaces[].landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.notAddedFaces[].orientation | object | 0.362 | 얼굴 각도 | |
data.notAddedFaces[].orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.notAddedFaces[].orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.notAddedFaces[].orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.notAddedFaces[].mask | boolean | false | 마스크 착용 여부 | |
data.notAddedFaces[].confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"modelVersion": "v1.0",
"addedFaceCount": 1,
"addedFaces": [{
"faceId": "87db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
}],
"addedFaceDetails": [{
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
}],
"notAddedFaceCount": 1,
"notAddedFaces": [{
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
}]
}
}
resultCode | resultMessage | 설명 |
---|---|---|
40070 | ServiceQuotaExceededPartialSuccessException | 단일 그룹에 등록 가능한 최대 얼굴 개수 초과하여 일부만 등록 성공 |
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-40070 | ServiceQuotaExceededException | 단일 그룹에 등록 가능한 최대 얼굴 개수 초과 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-45020 | ImageTooLargeException | 이미지 크기 초과 |
-45030 | InvalidImageBytesException | 잘못된 이미지 Bytes. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 | InvalidImageFormatException | 지원하지 않는 이미지 포맷 |
-45050 | InvalidImageURLException | 잘못된 이미지 URL |
-45060 | ImageTimeoutError | 이미지 다운로드 시간 초과 |
-45080 | InvalidImageFileException | 이미지 포맷에 맞지 않는 파일 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
DELETE | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces/{faceId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
faceId | 등록된 페이스 아이디 |
$ curl -X DELETE '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces/{faceId}' -H 'Content-Type: application/json;charset=UTF-8'
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-40050 | NotFoundFaceIDError | 페이스 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
GET | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
[URL Parameter]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
limit | int | O | 1 ~ 200 | 100 | 최대 크기 | |
next-token | string | "skljsdioew..." | '그룹 목록 응답 본문 데이터'에서 반환한 값 결과가 잘린 경우 next-token을 이용하여 이후 결과를 가지고 올 수 있음 |
시나리오 예
최초 query
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces?limit={limit}' -H 'Content-Type: application/json;charset=UTF-8'
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces?limit={limit}&next-token={next-token}' -H 'Content-Type: application/json;charset=UTF-8'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.modelVersion | string | O | "v1.0" | 얼굴 감지 모델 정보 |
data.faceCount | int | O | 2 | 그룹에 등록한 얼굴 수 |
data.faces[].bbox | object | O | - | 얼굴 등록 시 사용한 이미지에서 얼굴의 경계 상자(bounding box) 정보 |
data.faces[].bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.faces[].bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.faces[].bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.faces[].bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.faces[].confidence | float | O | 99.9123 | 얼굴 등록 시 사용한 이미지에서 얼굴의 인식 신뢰도 |
data.faces[].faceId | string | O | "9297db50-d4f2-c6b8-ea05-edf2013089fd" | 페이스 아이디 |
data.faces[].imageId | string | O | "87db50d4-f2c6-b8ea-05ed-9f201309fd92" | 이미지 아이디 하나의 이미지 아이디에 여러 페이스 아이디가 존재할 수 있음 |
data.faces[].externalImageId | string | "image01.jpg" | 사용자가 이미지에 등록한 값 | |
data.nextToken | string | O | "dlkj-210jwoivndslko9d..." | 페이징에서 사용할 token 결과가 잘린 경우 next-token을 이용하여 이후 결과를 가지고 올 수 있음 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"modelVersion": "v1.0",
"faceCount": 2,
"faces": [{
"faceId": "17db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
},
{
"faceId": "87db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
}],
"nextToken":"dlkj-210jwoivndslko9d..."
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-40040 | InvalidTokenError | 잘못된 token 사용 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
GET | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces/{faceId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
faceId | 비교하려는 페이스 아이디 |
[URL Parameter]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
limit | int | O | 1 ~ 4096 | 100 | 최대 크기 | |
threshold | int | O | 1 ~ 100 | 90 | 매칭 여부를 판단하는 유사도 기준값 |
$ curl -X GET '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/faces/{faceId}?limit={limit}&threshold={threshold}' -H 'Content-Type: application/json;charset=UTF-8'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.matchFaceCount | int | O | 2 | 입력 이미지에서 감지한 가장 큰 얼굴과 일치하는 얼굴의 개수 |
data.matchFaces[].face.bbox | object | O | - | 얼굴 등록 시 사용한 이미지에서 얼굴의 경계 상자(bounding box) 정보 |
data.matchFaces[].face.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.matchFaces[].face.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.matchFaces[].face.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.matchFaces[].face.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.matchFaces[].face.confidence | float | O | 99.9123 | 얼굴 등록 시 사용한 이미지에서 얼굴의 인식 신뢰도 |
data.matchFaces[].face.faceId | string | O | "9297db50-d4f2-c6b8-ea05-edf2013089fd" | 페이스 아이디 |
data.matchFaces[].face.imageId | string | O | "87db50d4-f2c6-b8ea-05ed-9f201309fd92" | 이미지 아이디 하나의 이미지 아이디에 여러 페이스 아이디가 존재할 수 있음 |
data.matchFaces[].face.externalImageId | string | "image01.jpg" | 사용자가 이미지에 등록한 값 | |
data.matchFaces[].similarity | float | O | 98.156 | 0~100 값을 가지는 유사도 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"matchFaceCount": 2,
"matchFaces": [{
"face": {
"faceId": "87db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
},
"similarity": 99.8945155187
},
{
"face": {
"faceId": "17db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
},
"similarity": 79.8945155187
}
]
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-40050 | NotFoundFaceIDError | 페이스 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/search |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 group id [a-z0-9-] 최대255자 |
[URL Parameter]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
limit | int | O | 1 ~ 4096 | 100 | 최대 크기 | |
threshold | int | O | 1 ~ 100 | 90 | 매칭 여부를 판단하는 유사도 기준값 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
image | object | O | - | 얼굴 검색에 사용할 이미지 | ||
image.url | string | △ | "https://..." | 이미지의 URL | ||
image.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
orientation | bool | true | true, false | false | 얼굴 방향 감지 기능 사용 여부 | |
mask | bool | true | true, false | false | 마스크 착용 감지 기능 사용 여부 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/groups/{groupId}/search?limit={limit}&threshold={threshold}' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"image": {
"url": "https://..."
}
}'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.matchFaceCount | int | O | 2 | 입력 이미지에서 감지한 가장 큰 얼굴과 일치하는 얼굴의 개수 |
data.matchFaces[].face.bbox | object | O | - | 얼굴 등록 시 사용한 이미지에서 얼굴의 경계 상자(bounding box) 정보 |
data.matchFaces[].face.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.matchFaces[].face.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.matchFaces[].face.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.matchFaces[].face.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.matchFaces[].face.confidence | float | O | 99.9123 | 얼굴 등록 시 사용한 이미지에서 얼굴의 인식 신뢰도 |
data.matchFaces[].face.faceId | string | O | "9297db50-d4f2-c6b8-ea05-edf2013089fd" | 페이스 아이디 |
data.matchFaces[].face.imageId | string | O | "87db50d4-f2c6-b8ea-05ed-9f201309fd92" | 이미지 아이디 하나의 이미지 아이디에 여러 페이스 아이디가 존재할 수 있음 |
data.matchFaces[].face.externalImageId | string | "image01.jpg" | 사용자가 이미지에 등록한 값 | |
data.matchFaces[].similarity | float | O | 98.156 | 0~100 값을 가지는 유사도 |
data.sourceFace.bbox | object | O | - | 입력 이미지에서 감지한 가장 큰 얼굴의 경계 상자(bounding box) 정보 |
data.sourceFace.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.sourceFace.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.sourceFace.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.sourceFace.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.sourceFace.landmarks | array | O | - | 얼굴 특징 |
data.sourceFace.landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.sourceFace.landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.sourceFace.landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.sourceFace.orientation | object | 0.362 | 얼굴 각도 | |
data.sourceFace.orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.sourceFace.orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.sourceFace.orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.sourceFace.mask | boolean | false | 마스크 착용 여부 | |
data.sourceFace.confidence | float | O | 99.9123 | 입력 이미지에서 감지한 가장 큰 얼굴의 인식 신뢰도 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"modelVersion": "v1.0",
"matchFaceCount": 2,
"matchFaces": [{
"face": {
"faceId": "87db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
},
"similarity": 99.8945155187
},
{
"face": {
"faceId": "17db50d4-f2c6-b8ea-05ed-9f201309fd92",
"imageId": "9297db50-d4f2-c6b8-ea05-edf2013089fd",
"externalImageId": "image01.jpg",
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"confidence": 99.8945155187
},
"similarity": 79.8945155187
}
],
"sourceFace": {
"bbox": {
"x0": 0.26785714285714285,
"y0": 0.22767857142857142,
"x1": 0.7366071428571429,
"y1": 0.8660714285714286
},
"landmarks": [
{
"type": "leftEye",
"x": 0.39285714285714285,
"y": 0.47767857142857145
},
{
"type": "rightEye",
"x": 0.6071428571428571,
"y": 0.4732142857142857
},
{
"type": "nose",
"x": 0.5,
"y": 0.6026785714285714
},
{
"type": "leftLip",
"x": 0.41964285714285715,
"y": 0.7276785714285714
},
{
"type": "rightLip",
"x": 0.5758928571428571,
"y": 0.7276785714285714
}
],
"orientation": {
"x": 1.400425,
"y": 6.624787,
"z": -2.08028
},
"mask": false,
"confidence": 0.999894
}
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-45020 | ImageTooLargeException | 이미지 크기 초과 |
-45030 | InvalidImageBytesException | 잘못된 이미지 Bytes. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 | InvalidImageFormatException | 지원하지 않는 이미지 포맷 |
-45050 | InvalidImageURLException | 잘못된 이미지 URL |
-45060 | ImageTimeoutError | 이미지 다운로드 시간 초과 |
-45080 | InvalidImageFileException | 이미지 포맷에 맞지 않는 파일 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/compare |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
[URL Parameter]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
threshold | int | O | 1 ~ 100 | 90 | 매칭 여부를 판단하는 유사도 기준값 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
sourceImage | object | O | - | 얼굴 비교 시 기준이 되는 이미지 (=referenceImage) |
||
sourceImage.url | string | △ | "https://..." | 이미지의 URL | ||
sourceImage.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
targetImage | object | O | - | 비교 대상이 되는 얼굴이 포함된 이미지 (=comparisonImage) |
||
targetImage.url | string | △ | "https://..." | 이미지의 URL | ||
targetImage.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
orientation | bool | true | true, false | false | 얼굴 방향 감지 기능 사용 여부 | |
mask | bool | true | true, false | false | 마스크 착용 감지 기능 사용 여부 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/compare?threshold={threshold}' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"sourceImage": {
"url": "https://..."
},
"targetImage": {
"url": "https://..."
}
}'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.modelVersion | string | O | "v1.0" | 얼굴 감지 모델 정보 |
data.matchedFaceDetailCount | int | O | 1 | 매칭된 얼굴 수 |
data.matchedFaceDetails[].faceDetail.bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.matchedFaceDetails[].faceDetail.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.matchedFaceDetails[].faceDetail.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.matchedFaceDetails[].faceDetail.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.matchedFaceDetails[].faceDetail.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.matchedFaceDetails[].faceDetail.landmarks | array | O | - | 얼굴 특징 |
data.matchedFaceDetails[].faceDetail.landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.matchedFaceDetails[].faceDetail.landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.matchedFaceDetails[].faceDetail.landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.matchedFaceDetails[].faceDetail.orientation | object | 0.362 | 얼굴 각도 | |
data.matchedFaceDetails[].faceDetail.orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.matchedFaceDetails[].faceDetail.orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.matchedFaceDetails[].faceDetail.orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.matchedFaceDetails[].mask | boolean | false | 마스크 착용 여부 | |
data.matchedFaceDetails[].faceDetail.confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
data.matchedFaceDetails[].similarity | float | O | 98.156 | 0~100 값을 가지는 유사도 |
data.unmatchedFaceDetailCount | int | O | 1 | 매칭되지 않은 얼굴 수 |
data.unmatchedFaceDetails[].faceDetail.bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.unmatchedFaceDetails[].faceDetail.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.unmatchedFaceDetails[].faceDetail.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.unmatchedFaceDetails[].faceDetail.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.unmatchedFaceDetails[].faceDetail.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.unmatchedFaceDetails[].faceDetail.landmarks | array | O | - | 얼굴 특징 |
data.unmatchedFaceDetails[].faceDetail.landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.unmatchedFaceDetails[].faceDetail.landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.unmatchedFaceDetails[].faceDetail.landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.unmatchedFaceDetails[].faceDetail.orientation | object | 0.362 | 얼굴 각도 | |
data.unmatchedFaceDetails[].faceDetail.orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.unmatchedFaceDetails[].faceDetail.orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.unmatchedFaceDetails[].faceDetail.orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.unmatchedFaceDetails[].mask | boolean | false | 마스크 착용 여부 | |
data.unmatchedFaceDetails[].faceDetail.confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
data.unmatchedFaceDetails[].similarity | float | O | 98.156 | 0~100 값을 가지는 유사도 |
data.sourceFace.bbox | object | O | - | 입력 이미지에서 감지한 가장 큰 얼굴의 경계 상자(bounding box) 정보 |
data.sourceFace.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.sourceFace.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.sourceFace.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.sourceFace.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.sourceFace.landmarks | array | O | - | 얼굴 특징 |
data.sourceFace.landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.sourceFace.landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.sourceFace.landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.sourceFace.orientation | object | 0.362 | 얼굴 각도 | |
data.sourceFace.orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.sourceFace.orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.sourceFace.orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.sourceFace.mask | boolean | false | 마스크 착용 여부 | |
data.sourceFace.confidence | float | O | 99.9123 | 입력 이미지에서 감지한 가장 큰 얼굴의 인식 신뢰도 |
{
"header": {
"resultCode": 0,
"resultMessage": "Success",
"isSuccessful": true
},
"data": {
"modelVersion": "v1.0",
"matchedFaceDetailCount": 2,
"matchedFaceDetails": [{
"faceDetail": {
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
},
"similarity": 90.654
}, {
"faceDetail": {
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
},
"similarity": 90.654
}],
"unmatchedFaceDetailCount": 1,
"unmatchedFaceDetails": [{
"faceDetail": {
"bbox": {
"x0": 0.36,
"y0": 0.21,
"x1": 0.612,
"y1": 0.715
},
"landmarks": [{
"type": "leftEye",
"x": 0.415,
"y": 0.513
},
{
"type": "rightEye",
"x": 0.415,
"y": 0.513
},
{
"type": "nose",
"x": 0.415,
"y": 0.513
},
{
"type": "leftLip",
"x": 0.415,
"y": 0.513
}, {
"type": "rightLip",
"x": 0.415,
"y": 0.513
}
],
"orientation": {
"x": 15.303436,
"y": -9.222179,
"z": -7.97249
},
"mask": false,
"confidence": 99.8945155187
},
"similarity": 60.654
}
],
"sourceFace": {
"bbox": {
"x0": 0.26785714285714285,
"y0": 0.22767857142857142,
"x1": 0.7366071428571429,
"y1": 0.8660714285714286
},
"landmarks": [
{
"type": "leftEye",
"x": 0.39285714285714285,
"y": 0.47767857142857145
},
{
"type": "rightEye",
"x": 0.6071428571428571,
"y": 0.4732142857142857
},
{
"type": "nose",
"x": 0.5,
"y": 0.6026785714285714
},
{
"type": "leftLip",
"x": 0.41964285714285715,
"y": 0.7276785714285714
},
{
"type": "rightLip",
"x": 0.5758928571428571,
"y": 0.7276785714285714
}
],
"orientation": {
"x": 1.400425,
"y": 6.624787,
"z": -2.08028
},
"mask": false,
"confidence": 0.999894
}
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-45020 | ImageTooLargeException | 이미지 크기 초과 |
-45030 | InvalidImageBytesException | 잘못된 이미지 Bytes. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 | InvalidImageFormatException | 지원하지 않는 이미지 포맷 |
-45050 | InvalidImageURLException | 잘못된 이미지 URL |
-45060 | ImageTimeoutError | 이미지 다운로드 시간 초과 |
-45080 | InvalidImageFileException | 이미지 포맷에 맞지 않는 파일 |
-50000 | InternalServerError | 서버 오류 |
[URI]
메서드 | URI |
---|---|
POST | /nhn-face-reco/v1.0/appkeys/{appKey}/verify/groups/{groupId}/faces/{faceId} |
[Path Variable]
이름 | 설명 |
---|---|
appKey | 통합 앱키 또는 서비스 앱키 |
groupId | 사용자가 등록한 그룹 아이디 [a-z0-9-] 최대 255자 |
faceId | 등록된 페이스 아이디 |
[Request Body]
이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 예제 | 설명 |
---|---|---|---|---|---|---|
compareImage | object | O | - | 얼굴 검증에 사용할 이미지 | ||
compareImage.url | string | △ | "https://..." | 이미지의 URL | ||
compareImage.bytes | blob | △ | "/0j3Ohdk==..." | Base64로 인코딩된 이미지 바이트 | ||
orientation | bool | true | true, false | false | 얼굴 방향 감지 기능 사용 여부 | |
mask | bool | true | true, false | false | 마스크 착용 감지 기능 사용 여부 |
$ curl -X POST '{domain}/nhn-face-reco/v1.0/appkeys/{appKey}/verify/groups/{groupId}/faces/{faceId}' -H 'Content-Type: application/json;charset=UTF-8' -d '{
"compareImage": {
"url": "https://..."
}
}'
[응답 본문 데이터]
이름 | 타입 | 필수 | 예제 | 설명 |
---|---|---|---|---|
data.similarity | float | O | 98.156 | 0~100 값을 가지는 유사도 |
data.face | object | O | - | 얼굴 등록 API를 이용하여 등록한 얼굴 |
data.face.bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.face.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.face.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.face.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.face.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.face.confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
data.face.faceId | string | O | "9297db50-d4f2-c6b8-ea05-edf2013089fd" | 페이스 아이디 |
data.face.imageId | string | O | "87db50d4-f2c6-b8ea-05ed-9f201309fd92" | 이미지 아이디 하나의 이미지 아이디에 여러 페이스 아이디가 존재할 수 있음 |
data.face.externalImageId | string | "image01.jpg" | 사용자가 이미지에 등록한 값 | |
data.sourceFace | object | O | - | Request Body로 전달한 이미지 |
data.sourceFace.bbox | object | O | - | 이미지 내에서 감지한 얼굴의 경계 상자(bounding box) 정보 |
data.sourceFace.bbox.x0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x0 좌표 |
data.sourceFace.bbox.y0 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y0 좌표 |
data.sourceFace.bbox.x1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 x1 좌표 |
data.sourceFace.bbox.y1 | float | O | 0.123 | 이미지 내에서 감지한 얼굴 box의 y1 좌표 |
data.sourceFace.landmarks | array | O | - | 얼굴 특징 |
data.sourceFace.landmarks[].type | string | O | "leftEye" | 유효한 값 목록: "leftEye", "rightEye", "nose", "leftLip", "rightLip" |
data.sourceFace.landmarks[].y | float | O | 0.362 | 얼굴 특징의 y 좌표 |
data.sourceFace.landmarks[].x | float | O | 0.362 | 얼굴 특징의 x 좌표 |
data.sourceFace.orientation | object | 0.362 | 얼굴 각도 | |
data.sourceFace.orientation.x | float | 15.303436 | 얼굴 좌우 각도(Yaw) | |
data.sourceFace.orientation.y | float | -9.222179 | 얼굴 상하 각도(Pitch) | |
data.sourceFace.orientation.z | float | -7.97249 | 수평면 대비 얼굴 각도(Roll) | |
data.sourceFace.mask | boolean | false | 마스크 착용 여부 | |
data.sourceFace.confidence | float | O | 99.9123 | 얼굴 인식 신뢰도 |
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "Success"
},
"data": {
"similarity": 29.507784,
"face": {
"bbox": {
"x0": 0.15520833333333334,
"y0": 0.2222222222222222,
"x1": 0.24479166666666666,
"y1": 0.45185185185185184
},
"confidence": 0.997507,
"faceId": "b460baac-190d-448e-9f29-c2d5d429f388",
"imageId": "f43a7bee-6a33-4450-82dd-16adfc6788ef",
"externalImageId": "imsa-control-wb801-test"
},
"sourceFace": {
"bbox": {
"x0": 0.26785714285714285,
"y0": 0.22767857142857142,
"x1": 0.7366071428571429,
"y1": 0.8660714285714286
},
"landmarks": [
{
"type": "leftEye",
"x": 0.39285714285714285,
"y": 0.47767857142857145
},
{
"type": "rightEye",
"x": 0.6071428571428571,
"y": 0.4732142857142857
},
{
"type": "nose",
"x": 0.5,
"y": 0.6026785714285714
},
{
"type": "leftLip",
"x": 0.41964285714285715,
"y": 0.7276785714285714
},
{
"type": "rightLip",
"x": 0.5758928571428571,
"y": 0.7276785714285714
}
],
"orientation": {
"x": 1.400425,
"y": 6.624787,
"z": -2.08028
},
"mask": false,
"confidence": 0.999286
}
}
}
resultCode | resultMessage | 설명 |
---|---|---|
-40000 | InvalidParam | 파라미터에 오류가 있음 |
-40030 | NotFoundGroupError | 그룹 아이디를 찾을 수 없음 |
-40050 | NotFoundFaceIDError | 페이스 아이디를 찾을 수 없음 |
-41000 | UnauthorizedAppKey | 승인되지 않은 앱키 |
-45020 | ImageTooLargeException | 이미지 크기 초과 |
-45030 | InvalidImageBytesException | 잘못된 이미지 Bytes. 주로 Base64 인코딩이 잘못된 경우 발생 |
-45040 | InvalidImageFormatException | 지원하지 않는 이미지 포맷 |
-45050 | InvalidImageURLException | 잘못된 이미지 URL |
-45060 | ImageTimeoutError | 이미지 다운로드 시간 초과 |
-45080 | InvalidImageFileException | 이미지 포맷에 맞지 않는 파일 |
-50000 | InternalServerError | 서버 오류 |