얼굴 등록
사진 업로드 또는 카메라 촬영으로 얼굴을 등록합니다.여러 사람이 한 장에 있어도 각각 분리됩니다.
검출 — 어디에 얼굴이 있는가
모델이 이미지 전체를 훑어 얼굴로 판단되는 영역(경계 상자)과68개의 기준점(눈, 눈썹, 코, 입, 턱선)을 찾습니다.여기서 얻는 것은 "얼굴의 위치"이지 "누구인지"가 아닙니다.
정렬 — 같은 기준으로 맞추기
기준점을 이용해 얼굴을 잘라내고, 양쪽 눈이 수평이 되도록 회전과 크기를 맞춥니다.조명이나 각도, 사진 크기가 달라도 다음 단계가 같은 조건에서 계산되게 하는 과정입니다.
벡터화 — 얼굴을 숫자로
정렬된 얼굴을 신경망에 통과시키면 128개의 실수가 나옵니다.이 숫자들은 눈 사이 거리 같은 사람이 읽을 수 있는 값이 아니라,학습 과정에서 "같은 사람은 가깝게, 다른 사람은 멀게" 배치되도록 만들어진 좌표입니다.같은 사람을 다시 촬영하면 비슷한 모양의 막대가, 다른 사람은 다른 모양의 막대가 나옵니다.
비교 — 같은 사람인가
사진 두 장을 비교해 얼마나 비슷한지 확인합니다.얼굴이 충분히 비슷하면 같은 사람, 차이가 크면 다른 사람으로 표시합니다.아래 슬라이더를 움직여 판정 결과가 어떻게 바뀌는지 직접 확인해 보세요.같은 사람이라도 촬영 각도, 조명, 표정에 따라 결과가 조금 달라질 수 있습니다.
저장 — 무엇이 남는가
서비스 데이터베이스에 저장되는 것은 벡터와 식별자, 등록 시각 같은 메타데이터입니다.벡터에서 원본 얼굴을 복원할 수 없고, 이름과 벡터는 서로 다른 테이블에 분리됩니다.원본 사진은 보호자 동의하에 별도의 비공개 저장소에 두거나 저장하지 않습니다.
저장 레코드 예시 face_profile
{
"faceId": "—",
"studentId": "—",
"provider": "browser-demo",
"dimension": 128,
"vector": [ … ],
"quality": { "detectionScore": 0, "interocularPx": 0 },
"enrolledAt": "—"
}
위 예시는 현재 선택된 얼굴의 실제 값입니다.운영 환경에서는 벡터 계산과 검색을 AWS Rekognition 컬렉션이 담당하고,서비스 DB에는 Rekognition이 돌려주는 얼굴 ID와 메타데이터만 저장됩니다.
저장 여부
| 항목 | 저장 | 비고 |
|---|---|---|
| 얼굴 벡터 (128 또는 공급자 ID) | 예 | 암호화 저장, 학원(테넌트) 단위 격리 |
| 학생 식별자, 등록 시각, 품질 점수 | 예 | 이름은 별도 테이블 |
| 원본 사진 | 선택 | 동의 시 비공개 저장소, 미동의 시 즉시 폐기 |
| 출결 시 촬영한 사진 | 아니오 | 인식 후 즉시 폐기, 결과(시각, 신뢰도)만 기록 |
| 기준점 좌표, 경계 상자 | 아니오 | 계산 중간값, 저장하지 않음 |
출결 시 흐름
- 강사 앱에서 촬영 → 검출, 정렬, 벡터화
- 해당 학원 컬렉션 안에서 가장 가까운 벡터 검색
- 판정 기준을 충족하면 출석 기록과 보호자 알림, 아니면 QR 또는 입장코드로 대체
- 촬영 이미지 폐기, 기록에는 시각, 방식, 신뢰도만 남김
얼굴인식은 사진을 모으는 기술이 아니라,사람을 구분할 수 있는 최소한의 숫자만 남기는 기술입니다.
처리 방식
이 페이지의 모든 계산은 브라우저 안에서만 실행됩니다.업로드하거나 촬영한 이미지와 벡터는 서버로 전송되거나 저장되지 않으며, 새로고침하면 사라집니다.
모델
원리 설명을 위한 오픈소스 모델을 사용합니다.face-api.js의 SSD MobileNet v1이 얼굴을 검출하고, 68개 기준점과 128차원 임베딩을 계산합니다. 모델 파일은 이 페이지에 함께 담겨 있어 인터넷 없이도 동작합니다.운영 서비스의 정확도, 속도, 보안 수준은 공급자(AWS Rekognition) 기준을 따릅니다.
사진 출처
샘플 사진이 등록되어 있을 때 표시됩니다.