iBetter Books
수정

DeepFace의 기능은 네 함수로 정리됩니다. verify는 두 얼굴이 같은지 확인하고, find는 DB에서 같은 인물을 찾고, represent는 임베딩을 뽑고, analyze는 표정·나이·성별을 분석합니다. 이 장에서는 네 함수를 한눈에 훑어 DeepFace의 전체 지도를 그립니다. 각각의 자세한 활용은 이어지는 장에서 다룹니다.

네 함수의 역할

함수 하는 일 PART 04 용어로
verify 두 얼굴이 같은 사람인지 1:1 확인
find DB에서 같은 인물 찾기 1:N 식별
represent 임베딩(벡터) 추출 임베딩
analyze 나이·성별·표정·인종 분석 (속성 분석)

앞의 셋(verify·find·represent)은 PART 04~05에서 다룬 인식의 DeepFace 버전이고, analyze는 DeepFace만의 추가 기능인 속성 분석입니다.

verify — 1:1 확인

두 이미지 경로만 넘기면 같은 사람인지 판정합니다.

# 파일: df_verify.pyfrom deepface import DeepFaceresult = DeepFace.verify("a.jpg", "b.jpg")   # 기본 모델 VGG-Faceprint("같은 사람?", result["verified"])print("거리:", round(result["distance"], 4), "/ 임계값:", result["threshold"])

결과는 딕셔너리로, verified(참/거짓), distance(거리), threshold(그 모델의 임계값)를 담습니다. PART 05의 compare_faces와 같은 일을 하되, 임계값을 모델에 맞춰 DeepFace가 알아서 적용해 줍니다.

find — 1:N 검색

이미지 한 장과 인물 사진이 담긴 폴더(DB)를 주면, 그 안에서 같은 사람을 찾아 줍니다.

# 파일: df_find.pyfrom deepface import DeepFace# db_path 폴더 안의 사진들 중 query와 같은 인물을 찾는다results = DeepFace.find(img_path="query.jpg", db_path="known/")print(results[0].head())   # 얼굴별 결과 DataFrame (가까운 순)

find는 얼굴마다 하나씩 표(pandas DataFrame)를 돌려주며, 거리가 가까운 순으로 후보가 정렬됩니다. 처음 실행하면 DB 폴더에 임베딩 캐시 파일이 생겨, 다음부터는 빠르게 검색합니다. 6장에서 이것으로 얼굴 검색 엔진을 만듭니다.

represent — 임베딩 추출

PART 04의 임베딩을 DeepFace로 뽑는 함수입니다.

# 파일: df_represent.pyfrom deepface import DeepFacereps = DeepFace.represent("face.jpg", model_name="Facenet512")print("임베딩 길이:", len(reps[0]["embedding"]))   # 모델에 따라 512 등

결과는 얼굴별 딕셔너리 목록이고, embedding 키에 벡터가 들어 있습니다. 직접 거리를 계산해 비교하거나 다른 검색 시스템에 넣고 싶을 때 씁니다. 임베딩 길이는 고른 모델에 따라 달라집니다(다음 장).

analyze — 표정·나이·성별

DeepFace의 간판 기능입니다. 원하는 분석 항목을 골라 한 번에 받습니다.

# 파일: df_analyze.pyfrom deepface import DeepFaceresult = DeepFace.analyze("face.jpg", actions=["age", "gender", "emotion"])info = result[0]print("나이:", info["age"])print("성별:", info["dominant_gender"])print("표정:", info["dominant_emotion"])

actions에 원하는 항목(age·gender·emotion·race)을 나열하면, 각 항목의 대표값(dominant_*)과 세부 점수를 함께 줍니다. 웃고 있는 얼굴 사진으로 실제 실행해 결과를 사진 위에 그려 보면 다음과 같습니다.

DeepFace analyze 결과

dominant_emotionhappy로 나오고, emotion 딕셔너리 안에는 happy·sad·neutral 등 각 표정의 점수가 들어 있습니다. 한 장의 사진에서 나이·성별·표정을 동시에 얻을 수 있어, 인식과 결합하면 풍부한 정보를 만듭니다. 다만 나이 추정은 어디까지나 근삿값입니다. 실제로 같은 사진도 어떤 검출기를 쓰느냐에 따라 추정 나이가 30대 중반에서 40대 후반까지 흔들립니다. 정확한 나이가 아니라 "대략의 연령대" 정도로 받아들이는 것이 안전합니다. 감정 분석은 PART 08에서 더 깊이 다룹니다.

실무 팁. DeepFace의 첫 호출은 느립니다. 함수마다 필요한 모델 가중치를 그때 처음 내려받기 때문입니다(한 번 받으면 ~/.deepface/weights에 저장되어 다음부터 빠릅니다). 그래서 서비스라면 시작할 때 한 번 더미 호출로 모델을 미리 로드해 두는 워밍업을 두는 것이 좋습니다. analyze의 나이·성별·표정은 각각 별도 모델이라, 쓰는 항목만큼만 다운로드됩니다.

이 장에서 기억할 것

DeepFace는 verify(1:1)·find(1:N)·represent(임베딩)·analyze(속성)의 네 함수로 정리됩니다. 앞 셋은 PART 04~05의 인식을 DeepFace로 옮긴 것이고, analyze는 나이·성별·표정을 한 번에 주는 추가 기능입니다. 첫 호출은 가중치 다운로드로 느리니 워밍업을 고려하세요. 다음 장에서는 이 함수들의 인식 모델을 인자 하나로 갈아 끼우는 법을 배웁니다.