라이브니스를 가장 쉽게 추가하는 방법은 DeepFace입니다. 함수에 anti_spoofing=True 한 인자만 더하면, 검출된 얼굴이 진짜인지 가짜인지 함께 판정해 줍니다. 이미 PART 06에서 DeepFace를 썼다면, 라이브니스는 거의 공짜로 얻는 셈입니다.
extract_faces로 진짜/가짜 판정
DeepFace.extract_faces에 anti_spoofing=True를 주면, 각 얼굴에 진짜 여부가 붙어 나옵니다.
# 파일: df_antispoof.py"""DeepFace로 얼굴이 진짜(라이브)인지 판정한다."""from deepface import DeepFacefaces = DeepFace.extract_faces("input.jpg", detector_backend="yunet", anti_spoofing=True)for f in faces: print("진짜 얼굴?", f["is_real"]) print("라이브니스 점수:", round(f["antispoof_score"], 4))
결과의 각 얼굴 딕셔너리에는 평소의 face·facial_area·confidence에 더해 두 키가 추가됩니다. is_real은 진짜 여부(참/거짓)이고, antispoof_score는 그 확신의 정도입니다. 점수가 높을수록 "진짜 얼굴"이라는 확신이 큽니다.
실제로 돌려 보면
깨끗한 인물 사진으로 실행하면 다음과 같이 진짜로 통과합니다.
진짜 얼굴? True라이브니스 점수: 0.9999

여기서 중요한 점을 짚어야 합니다. 깨끗한 디지털 사진이 "진짜(real)"로 통과하는 것은 당연합니다. 라이브니스가 잡아내는 것은 "사진 파일"이 아니라, 사진을 카메라로 다시 찍은 흔적(인쇄물·화면의 질감·모아레)이기 때문입니다. 즉 진짜 공격을 테스트하려면, 등록자 사진을 인쇄하거나 폰 화면에 띄워 웹캠으로 재촬영해 봐야 합니다. 그때 비로소 is_real이 False로 떨어집니다.
인식과 한 번에 — verify의 anti_spoofing
verify에도 같은 인자가 있어, 신원 확인과 라이브니스를 한 번에 처리할 수 있습니다.
# 파일: df_verify_spoof.pyfrom deepface import DeepFacetry: result = DeepFace.verify("live.jpg", "registered.jpg", model_name="Facenet512", anti_spoofing=True) print("같은 사람?", result["verified"])except ValueError as e: # 스푸핑이 감지되면 예외로 알린다 print("위조 의심으로 거부:", e)
anti_spoofing=True로 verify를 호출하면, 입력이 가짜로 판정될 때 예외를 던져 인증을 막습니다. 신원이 맞아도 살아 있는 얼굴이 아니면 통과시키지 않는 것입니다. 이것이 "인식 + 라이브니스"를 한 호출로 묶는 가장 간단한 형태입니다.
DeepFace 라이브니스의 위치
| 장점 | 한계 |
|---|---|
| 한 인자로 추가, 쉬움 | TensorFlow 의존(PART 06) |
| 인식과 한 호출로 통합 | 모델·임계값 세밀 조정은 제한적 |
| 패시브(사용자 협조 불필요) | 강한 공격엔 추가 방어 필요 |
DeepFace 라이브니스는 입문과 프로토타입에 최적입니다. 한 줄로 기본 방어를 갖추고, 더 세밀한 제어가 필요하면 다음 장의 Silent-Face를 직접 쓰거나 액티브 라이브니스를 더합니다.
실무 팁. 라이브니스 점수에도 임계값이 있습니다(PART 02·04의 임계값과 같은 원리). DeepFace의 기본 판정을 그대로 쓰되, 보안이 더 중요하면
antispoof_score를 직접 받아 더 높은 기준(예: 0.9 이상만 통과)을 적용할 수 있습니다. 반대로 진짜 사용자가 자주 거부되면 기준을 낮춥니다. 늘 그렇듯 내 환경의 데이터로 조정하세요.
이 장에서 기억할 것
DeepFace는 anti_spoofing=True 한 인자로 라이브니스를 추가하며, extract_faces는 is_real·antispoof_score를, verify는 가짜 감지 시 예외를 줍니다. 깨끗한 사진 파일은 real로 통과하는 것이 정상이고, 진짜 공격(인쇄·화면 재촬영)에서 가짜로 잡힙니다. 쉽고 통합적이지만 TensorFlow 의존과 제한된 제어가 한계입니다. 다음 장에서는 이 한 줄 뒤에서 실제로 일하는 모델, Silent-Face(MiniFASNet)를 들여다봅니다.