얼굴 인식
Face Recognition
이미지에서 얼굴 식별. 보안, 인증에 활용. 프라이버시 우려.
Face Recognition
이미지에서 얼굴 식별. 보안, 인증에 활용. 프라이버시 우려.
얼굴 인식(Face Recognition)은 디지털 이미지나 비디오 프레임에서 사람의 얼굴을 자동으로 식별하거나 검증하는 기술입니다. 얼굴 탐지(Detection), 특징 추출(Feature Extraction), 매칭(Matching)의 세 단계로 구성되며, 딥러닝 기반 모델이 등장하면서 정확도가 획기적으로 향상되었습니다.
기술적으로는 CNN(합성곱 신경망)을 활용하여 얼굴의 기하학적 특징을 128차원 또는 512차원의 임베딩 벡터로 변환합니다. FaceNet, ArcFace, DeepFace 등의 모델이 널리 사용되며, 조명, 각도, 표정 변화에도 강건한 인식이 가능합니다. 최근에는 마스크 착용 상태에서도 인식이 가능한 기술이 개발되었습니다.
얼굴 인식은 스마트폰 잠금해제, 출입 통제, 결제 인증, 공항 보안 검색 등 다양한 분야에서 활용됩니다. 특히 1:1 검증(Verification)과 1:N 식별(Identification)로 구분되며, 전자는 본인 확인에, 후자는 감시나 수색에 주로 사용됩니다.
그러나 프라이버시 침해, 인종/성별에 따른 정확도 편향, 동의 없는 대규모 감시 가능성 등 윤리적 우려가 큽니다. EU AI Act에서는 공공장소에서의 실시간 생체인식을 원칙적으로 금지하고 있으며, 많은 기업들이 얼굴 인식 서비스 제공을 중단하거나 제한하고 있습니다.
# face_recognition 라이브러리를 이용한 얼굴 인식
import face_recognition
import cv2
import numpy as np
# 알려진 얼굴 로드 및 인코딩
known_image = face_recognition.load_image_file("known_person.jpg")
known_encoding = face_recognition.face_encodings(known_image)[0]
# 알려진 얼굴 데이터베이스
known_face_encodings = [known_encoding]
known_face_names = ["홍길동"]
# 웹캠으로 실시간 얼굴 인식
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
# BGR을 RGB로 변환 (face_recognition은 RGB 사용)
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 프레임에서 얼굴 위치와 인코딩 추출
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# 알려진 얼굴과 비교 (유클리드 거리 기반)
distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_idx = np.argmin(distances)
# 임계값 0.6 이하면 동일인으로 판단
if distances[best_match_idx] < 0.6:
name = known_face_names[best_match_idx]
confidence = round((1 - distances[best_match_idx]) * 100, 1)
else:
name = "Unknown"
confidence = 0
# 얼굴 박스와 이름 표시
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(frame, f"{name} ({confidence}%)",
(left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
cv2.imshow('Face Recognition', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
| 항목 | 사양 | 비고 |
|---|---|---|
| 정확도 (LFW 벤치마크) | 99.5% 이상 | ArcFace, CosFace 등 SOTA 모델 |
| 추론 속도 | 10-50ms/얼굴 | GPU 기준, 모델 크기에 따라 상이 |
| 임베딩 차원 | 128-512차원 | 높을수록 정확하나 연산 비용 증가 |
| 클라우드 API 비용 | $0.001-0.01/요청 | AWS, Azure, GCP 기준 |
| 에지 디바이스 요구사항 | 4GB RAM, NPU 권장 | 스마트폰, IoT 기기 배포 시 |
"1:1 verification은 되는데 1:N identification은 데이터베이스 규모가 커지면 성능이 떨어져요."
"얼굴 임베딩 벡터 추출해서 코사인 유사도로 비교하면 돼요."
"마스크 착용 케이스도 학습 데이터에 포함해야 해요."
"Anti-spoofing 없이는 사진으로 우회될 수 있어요."
1. Liveness 검사 미적용: 사진이나 동영상으로 우회(Spoofing) 공격이 가능합니다. 눈 깜빡임, 고개 돌리기 등 Anti-spoofing 기법을 반드시 적용하세요.
2. 조명/각도 편향: 학습 데이터가 특정 조건에 편중되면 실제 환경에서 성능이 급격히 저하됩니다. 다양한 조건의 데이터로 학습하세요.
3. 인종/성별 편향: 학습 데이터의 불균형으로 특정 그룹에서 오인식률이 높을 수 있습니다. 공정성 평가(Fairness Audit)가 필수입니다.
4. 동의 없는 수집: 생체정보는 민감정보로 분류됩니다. 명시적 동의 없이 수집/처리하면 개인정보보호법 위반입니다.
임베딩 (Embedding) - 얼굴 특징을 벡터로 표현
객체 탐지 (Object Detection) - 얼굴 탐지의 기반 기술
딥러닝 (Deep Learning) - 얼굴 인식 모델의 핵심 기술
개인정보 영향평가 - 얼굴 인식 시스템 도입 시 필수
공정성 (Fairness) - 인종/성별 편향 방지
FaceNet 논문 - Google의 얼굴 인식 아키텍처
face_recognition 라이브러리 - Python 얼굴 인식 오픈소스
NIST FRVT - 얼굴 인식 벤더 테스트 결과