Skip to main content

얼굴 이미지 요건

라이브니스 및 얼굴 검색 호출의 품질은 전송하는 이미지의 품질에 달려 있습니다. 이 페이지는 캡처 규칙, Verifik이 적용하는 점수 임계값, 반환될 수 있는 정확한 거부 사유를 정리하여 운영 배포 전에 캡처 UI를 조정할 수 있도록 돕습니다.

라이브니스 엔드포인트(/liveness, /liveness-score), 얼굴 검색 엔드포인트(/search, /search-live-face, /search-active-user, /search-crops), 얼굴 비교 엔드포인트(/compare, /compare-live, /compare-with-liveness)에 모두 적용됩니다. SmartEnroll도 내부적으로 동일한 규칙을 적용하므로, 이 지침은 온보딩 완료율 개선에도 도움이 됩니다.

해당 엔드포인트의 상세 문서는 영어로 제공됩니다: Liveness Detection, Face Search (1:N).

라이브니스 이미지 요건

라이브니스는 단순한 얼굴 매칭보다 요건이 엄격합니다. 고해상도 인쇄물, 마스크, 동영상 재생으로 검증을 우회할 수 없도록, 전송하는 프레임은 다음 조건을 모두 충족해야 합니다.

  • 이미지에는 주된 얼굴이 하나만 있어야 합니다. 프레임 안에 완전히 보여야 하고, 어떠한 가림 없이 완전히 드러나 있어야 합니다. 크롭은 허용되지 않습니다. 배경의 작은 얼굴은 고려되지 않습니다.
  • 처리 가능한 얼굴 박스의 최소 크기는 224x224 픽셀입니다.
  • 얼굴 박스와 이미지 경계 사이의 여백은 최소 25픽셀이어야 합니다.
  • 두 동공 사이의 거리는 최소 80픽셀이어야 합니다.
  • 평면 외 회전 각도(얼굴의 피치 및 요)는 ±30도를 초과할 수 없습니다.
  • 어안 렌즈와 선글라스 착용 이미지는 지원되지 않습니다.

이 규칙 중 하나라도 위반한 프레임은 점수가 산정되기 전에 품질 사유로 거부됩니다. 이는 낮은 점수와는 다른 결과이며, UI에서 다르게 처리하는 것이 좋습니다. 품질 문제는 사용자가 다시 촬영하여 해결할 수 있지만, 낮은 점수는 프레임 자체는 사용 가능했으나 실제 사람으로 보이지 않았다는 뜻입니다.

제시 공격 탐지

Verifik의 얼굴 라이브니스는 제시 공격 탐지(PAD)를 사용하며 iBeta Level 2 인증을 획득했고 ISO 30107-3에 부합합니다. 기반 엔진은 인쇄된 사진, 화면 및 동영상 재생, 3D 마스크를 포함하는 iBeta Level 2 공격 세트에 대해 제시 공격 분류 오류율(APCER) 0%를 보고합니다.

임계값

Verifik은 인식 엔진 위에 자체 임계값을 적용하므로, 아래 값이 실제로 요청을 규율하는 값입니다.

라이브니스

동작
파라미터liveness_min_score
기본값0.6
허용 범위0.51.0
통과 규칙liveness_score > liveness_min_score (초과, 이상이 아님)
SmartEnroll 기본값0.65, 프로젝트 플로우별 설정 가능

통과 규칙이 엄격한 비교라는 점에 유의하세요. 임계값 0.6에 대해 점수가 정확히 0.6이면 통과가 아니라 실패입니다.

기반 엔진은 >= 0.5를 실제 사람으로 판단합니다. Verifik의 기본값 0.6은 의도적으로 더 엄격하며, 하한선 0.5 때문에 엔진 자체보다 느슨한 임계값은 설정할 수 없습니다. 예외적으로 /compare-live는 이 하한선을 0.52로 올립니다.

얼굴 검색

파라미터필수기본값범위
min_score없음 — 반드시 전송해야 합니다/search에서는 0.21.0, 라이브 얼굴 변형에서는 0.51.0
search_mode없음 — 반드시 전송해야 합니다FAST 또는 ACCURATE
max_results아니오10최대 100

결과는 유사도 점수 내림차순으로 반환되며, min_score를 초과하는 항목만 포함됩니다. 점수는 0과 1 사이의 숫자로, 1은 완전 일치, 0은 완전 불일치를 의미합니다.

놓치기 쉬운 Verifik 고유 사항이 두 가지 있습니다. 첫째, min_score에는 기본값이 없습니다. 누락하면 요청이 409 MissingParameter로 실패하지만, 기반 엔진이라면 0.81을 적용했을 것입니다. 둘째, search_mode는 필수이며 엔진에는 대응 항목이 없습니다. 지연 시간을 감수하고 정확도를 높이려면 ACCURATE, 응답성이 더 중요하면 FAST를 사용하세요.

거부 사유

캡처가 품질 사유로 거부되면 응답에 안정적인 사유 코드가 포함됩니다. 각 코드는 위의 특정 요건에 대응하므로, 일반적인 실패 메시지 대신 사용자에게 구체적인 개선 방법을 안내할 수 있습니다.

사유위반된 요건사용자에게 안내할 내용
no_face_detected완전히 보이는 얼굴 하나조명이 밝은 곳에서 얼굴을 프레임 안에 맞춰 주세요
multiple_faces_detected주된 얼굴은 하나만프레임 안에 본인만 있도록 해 주세요
face_occluded가림 없는 드러난 얼굴마스크, 안경, 모자 등 얼굴을 가리는 것을 벗어 주세요
face_close_to_border경계에서 25픽셀 여백조금 뒤로 물러나 얼굴을 프레임 중앙에 맞춰 주세요
face_not_centered경계에서 25픽셀 여백얼굴을 프레임 중앙에 맞춰 주세요
face_too_far224x224 얼굴 박스, 동공 간 80픽셀얼굴이 프레임을 더 채우도록 카메라를 가까이 해 주세요
face_too_close크롭 없음, 경계에서 25픽셀 여백카메라를 조금 멀리 해 주세요
face_rotation_too_large피치 및 요 ±30도카메라를 정면으로 바라보고 고개를 바로 세워 주세요
poor_lighting완전히 보이는 얼굴더 밝은 곳으로 이동하고 뒤에서 강한 빛이 들어오지 않게 해 주세요

캡처 문제가 아닌 사유가 두 가지 더 있습니다.

  • liveness_failed — 프레임은 사용 가능했고 점수가 산정되었으나 임계값을 넘지 못했습니다. 점수가 응답에 포함되므로 사용자에게 표시할 수 있습니다.
  • liveness_error — 캡처에 기인하지 않는 이유로 검증을 완료할 수 없었습니다. 재시도 가능한 경우로 처리하세요.

데이터 처리

라이브니스 또는 검색 호출은 일회성 분류입니다. 얼굴을 컬렉션에 등록하지 않으므로, /liveness 또는 /search에만 전송한 얼굴은 이후 검색 결과에 절대 나타나지 않습니다. 얼굴을 검색 가능하게 하려면 /person 엔드포인트로 명시적으로 등록해야 합니다.

다만 Verifik은 모든 호출에 대한 감사 기록(점수, 결과, 적용된 임계값, 요청 메타데이터)을 보관하여 사후에도 결과를 검증하고 과금할 수 있도록 합니다. 전송된 이미지 자체의 보관 여부는 제품에 따라 다릅니다. SmartEnroll을 통해 캡처된 이미지는 온보딩 기록의 일부로 저장되지만, 공개 라이브니스 및 검색 엔드포인트로 직접 전송된 이미지는 요청 처리 후 보관되지 않습니다.

참고 사항

  • UI에서 품질 거부와 점수 거부를 구분하는 것이 좋습니다. 품질 거부는 구체적인 안내와 함께 즉시 재시도를 유도해야 하고, 점수 거부는 실제 부정 결과입니다.
  • 요건은 이미지가 아니라 얼굴 박스의 픽셀 기준입니다. 4K 사진이라도 얼굴 너비가 100픽셀이면 224x224 규칙에 미달합니다.
  • 얼굴 박스가 최소 기준을 넘긴 뒤에는 더 큰 이미지를 보내도 결과가 개선되지 않습니다. 단순 해상도보다 좋은 조명과 중앙에 위치한 정면 자세를 우선하세요.
  • 사용자가 데스크톱 웹캠을 사용하는 경우 모바일보다 품질 거부가 더 많이 발생합니다. 저해상도 웹캠은 최소 기준에 못 미치는 얼굴 박스를 자주 만들어 냅니다.