얼굴 좌표로 만드는 7개 지표, 필수 조건과 일치 개수, 후보가 없을 때의 재비교와 동점 무작위 선택을 설명합니다.
얼굴 검출과 동물 분류는 다른 단계입니다
WhatZoo는 브라우저에서 MediaPipe Face Landmarker로 얼굴의 478개 랜드마크를 얻습니다. 이 모델이 동물 이름이나 성격을 예측하는 것은 아닙니다. 동물 이름은 그다음 단계에서 앱에 작성된 조건을 비교해 선택합니다. 모델 파일을 불러오는 시간과 처리 속도는 기기와 연결 환경에 따라 달라집니다.
코드가 사용하는 7개 지표
현재 calculateMetrics는 좌표의 x, y를 사용합니다. 두 점 사이 거리는 이 두 축의 유클리드 거리로 계산하며, z 좌표를 사용하는 깊이 분석은 하지 않습니다.
- 눈 기울기: (33번 y − 133번 y + 362번 y − 263번 y) × 100. 각도 단위인 도(°)가 아닙니다.
- 눈 간격 비율: 33번과 362번 사이 거리 ÷ 얼굴 너비.
- 얼굴 종횡비: 얼굴 높이 ÷ 얼굴 너비.
- 코 너비 비율: 102번과 331번 사이 거리 ÷ 얼굴 너비.
- 입 너비 비율: 61번과 291번 사이 거리 ÷ 얼굴 너비.
- 턱 비율: 17번과 152번 사이 거리 ÷ 얼굴 높이.
- 미소 여부: 0번·17번의 평균 y에서 61번·291번의 평균 y를 뺀 값이 0.01보다 큰지 확인하는 참/거짓 값.
얼굴 너비는 234번과 454번, 높이는 10번과 152번 사이 거리입니다. 비율로 바꿔도 촬영 각도·표정·가림의 영향이 없어지는 것은 아닙니다. 이 측정은 의료용 치수나 검증된 정확도 수치가 아닙니다.
동물 후보를 비교하는 순서
- 각 프로필의 필수 조건을 확인합니다. 한 필수 조건에 여러 비교가 묶여 있을 수 있습니다.
- 통과한 후보에 1점을 주고, 세부 조건을 하나 만족할 때마다 1점을 더합니다. 현재 세부 조건은 최대 3개이며, 가중치나 거리 기반 유사도 계산이 아닙니다.
- 필수 조건을 통과한 후보가 하나도 없으면 필수 조건을 제외하고 모든 프로필의 세부 조건 일치 개수만 비교합니다. 점수가 낮다는 이유만으로 이 단계가 실행되지는 않습니다.
- 최고점 후보가 여러 개이면 Math.random으로 하나를 고릅니다. 후보가 없으면 기본 프로필을 사용합니다.
예를 들어 A와 B가 모두 필수 조건과 세부 조건 두 개를 만족하면 각각 3점입니다. 둘이 최고점이라면 어느 쪽이 나올지는 동점 선택에 따라 달라집니다. 3점은 75%의 닮음이나 성격 정확도를 뜻하지 않습니다.
같은 사진에서도 결과가 달라질 수 있습니다
사진이 달라지면 좌표와 조건 통과 여부가 달라질 수 있습니다. 측정값이 같아도 최고점 동점이 있으면 동물 결과가 달라질 수 있습니다. 따라서 같은 사람이 항상 같은 이름을 받는다는 보장은 없습니다. 티어는 콘텐츠 분류이며 직업 능력·성격·사람의 우열을 측정하지 않습니다.
분석 사진과 얼굴 좌표는 이 분류를 위해 서버로 전송하지 않습니다. 단일 분석은 결과 동물 ID를 통계 API로 보낼 수 있으며, 일반 웹 분석은 별도로 동작합니다. 방법론과 도감에서 지표와 동물별 조건을 함께 확인할 수 있습니다.