얼굴 사진이 출결 기록이 되기까지
출석도장은 얼굴을 찾는 단계와 누구인지 비교하는 단계를 나누어 처리합니다. 등록된 특징 데이터와 비교한 결과가 기준을 통과해야 하며, 인식이 어려우면 번호 입력 등 다른 출결 방법으로 확인해야 합니다.
이 글은 2026년 9월 현재 구현을 바탕으로 임베딩, 정렬, 매칭을 설명합니다. 설치 방법이 필요하다면 얼굴인식 도입 가이드를 먼저 보세요.
임베딩은 얼굴을 비교하기 위한 숫자입니다
사진에는 얼굴 외에도 조명, 각도, 배경의 차이가 들어 있습니다. 얼굴 인식 모델은 이미지를 비교에 사용할 숫자 벡터로 변환합니다. 이를 임베딩이라고 합니다. 같은 사람의 사진끼리는 가깝게, 다른 사람의 사진끼리는 멀게 표현되도록 학습하지만, 조명과 자세의 영향을 완전히 없애지는 못합니다.
FaceNet은 같은 사람과 다른 사람의 얼굴을 묶은 세 장의 조합으로 임베딩 사이 거리를 학습하는 방법을 제시했습니다. 기준 사진과 같은 사람의 사진은 가깝게, 다른 사람의 사진은 멀게 두는 원리입니다. FaceNet 원문
ArcFace는 학습할 때 정답 인물의 분류 점수에 각도 마진을 적용합니다. 정답 클래스와 더 작은 각도를 이루어야 높은 점수를 얻도록 하여 인물 간 구분을 학습하는 방법입니다. ArcFace 원문
이 연구들은 원리를 이해할 근거입니다. 특정 논문의 정확도나 학습 데이터 구성이 앱에 그대로 재현된다고 볼 수는 없습니다.
카메라에서 비교까지의 여섯 단계
1. 얼굴 위치를 찾습니다
ML Kit Face Detection으로 카메라 영상 안의 얼굴 위치와 자세 정보를 얻습니다. 촬영 영역에서 얼굴이 충분히 보이는지 확인하는 첫 단계입니다. Google ML Kit 안내
2. 얼굴 주변을 잘라냅니다
얼굴 위치를 기준으로 필요한 영역을 크롭합니다. 화면에 보이는 미리보기와 실제 카메라 이미지의 좌표는 회전·비율에 따라 달라질 수 있으므로 이 변환이 맞아야 합니다. 가로로 놓았을 때만 인식이 나빠지는 문제라면 모델뿐 아니라 이 좌표 경로도 점검할 대상입니다.
3. 얼굴의 기준점을 얻습니다
MediaPipe의 468점 얼굴 랜드마크에서 눈, 코, 입 주변 좌표를 얻고 정렬에 쓸 다섯 기준점을 계산합니다. 눈 두 곳, 코끝, 입꼬리 두 곳이 기준입니다. 468점 모델과 추가 홍채 랜드마크를 포함한 모델은 구분해야 합니다. 얼굴 표면 기하 모델 논문
4. 모델이 기대하는 위치로 정렬합니다
다섯 기준점을 이용해 회전·크기·이동을 맞춘 112×112 이미지를 만듭니다. 이 유사 변환은 평면 안에서 기울어진 얼굴을 맞추는 데 쓰입니다. 눈과 코, 입이 잘 보이도록 정면을 바라보면 정렬에 필요한 기준점을 찾기 좋습니다.
5. 512차원 특징 벡터를 추출합니다
현재 앱은 EdgeFace-XS 모델을 TensorFlow Lite 형식으로 실행하고 512차원 벡터를 얻습니다. 추론은 출결 기기에서 수행합니다. 입력 이미지의 전처리와 정렬 방식은 모델이 기대하는 형식과 맞아야 합니다.
벡터를 L2 정규화한 뒤에는 두 벡터의 내적으로 코사인 유사도를 구할 수 있습니다. 이 점수는 두 특징 벡터의 유사도를 나타냅니다. 이후 매칭 단계에서 이 점수를 기준과 비교합니다.
6. 등록 데이터와 비교하고 판정합니다
등록된 학생의 특징 데이터와 비교한 뒤 후보의 원래 유사도, 다음 후보와의 차이, 점수 정규화 결과 등을 함께 확인합니다. 현재 앱의 S-norm은 등록 집합의 비교 통계를 사용하며, 등록 인원이나 통계 준비 상태에 따라 사용하는 경로가 달라집니다.
정규화의 기본 생각은 ‘높아 보이는 점수’가 다른 사람과의 비교 점수에 비해서도 높은지 보는 것입니다. 미등록 얼굴이 등록 학생으로 잘못 받아들여지는지도 별도로 시험합니다.
등록할 때와 출석할 때의 역할이 다릅니다
등록 때는 이후 비교 기준으로 쓸 특징을 만듭니다. 현재 구현은 여러 촬영 결과의 품질을 평가하고 상위 품질 후보를 고른 뒤 이상치를 제외하고 평균·정규화하여 등록 특징을 구성합니다.
출석 때는 새 얼굴을 그 기준과 비교합니다. 등록 때 역광이나 움직임이 심했다면 매번 출석할 때 재시도하는 것보다 밝은 환경에서 등록 상태를 다시 확인하는 편이 낫습니다. 다만 인식 실패의 원인은 조명뿐 아니라 거치 방향, 카메라 권한, 등록 데이터 유무 등도 있을 수 있습니다.
| 나타나는 상황 | 먼저 확인할 것 |
|---|---|
| 특정 학생만 반복해서 실패 | 해당 기기의 등록 여부와 등록 품질 |
| 창가나 저녁에 자주 실패 | 역광·얼굴 그림자·렌즈 오염 |
| 기기를 바꾼 뒤 모두 실패 | 페이스사인 이전·가져오기 여부 |
| 가로로 놓았을 때만 문제 | 앱 버전·화면 회전·거치 상태 |
| 다른 학생 이름으로 기록 | 기록을 정정하고 문제 신고로 상황 전달 |
기기를 교체할 때는 페이스사인을 백업해 새 기기로 옮겨주세요. 페이스사인 이전 가이드에 순서를 정리했습니다.
얼굴 특징 데이터는 기기 내부에 암호화 저장합니다
얼굴 특징 추출과 비교는 출결 기기에서 실행하고, 등록한 얼굴 특징 데이터인 페이스사인은 기기 내부의 암호화 저장소에 보관합니다. 일반 출결 과정에서 얼굴 특징 데이터를 서버로 전송하지 않습니다. 출결 기록과 이름 등 운영 정보는 서비스 이용을 위해 서버에서 관리합니다.
사용자가 별도 동의에 따라 직접 제출하는 문제 신고는 일반 출결과 구분합니다. 기기 이전은 사용자가 암호화된 페이스사인 백업 파일을 직접 옮기는 방식입니다.
얼굴 특징 데이터는 사람을 식별하는 정보이므로 기기 잠금과 백업 파일의 접근 권한을 함께 관리합니다. 얼굴 등록 동의와 처리 기준은 개인정보처리방침과 생체정보 동의 안내에서 확인하세요.
학원에서 사용할 때 확인하는 조건
두 사진이 같은 사람인지 묻는 시험과, 카메라 앞 사람을 여러 등록 학생 중에서 찾는 출결은 조건이 다릅니다. 카메라, 등록 인원, 미등록 방문자, 조명, 움직임까지 결과에 영향을 줍니다. 모델 추론 시간도 촬영부터 출결 기록·알림까지 걸리는 전체 시간과 구분해야 합니다.
출석도장은 오인식과 미인식을 나눠 시험합니다. 다른 학생으로 기록되는 오류는 단순한 재시도와 달리 기록 수정이 필요하므로 따로 확인합니다. 시험 방법은 물리 카메라 검증 이야기에 정리했습니다.
운영자는 잘되는 장면만 확인하지 말고 미등록 사람, 인식이 어려운 학생, 기기 교체, 네트워크 장애 때의 처리까지 확인해야 합니다. 기술 원리를 아는 목적도 그런 상황에서 어디를 점검할지 판단하기 위해서입니다.