iBetter Books
수정

PART 06에서 인식 도구로 만난 DeepFace는 감정 분석에서도 가장 쉬운 출발점입니다. analyze 한 줄이면 7분류 표정과 나이·성별을 함께 줍니다. 이 장에서는 그 결과를 1장에서 강조한 "확률 분포 전체 보기"의 태도로 제대로 읽는 법을 익힙니다.

analyze로 감정 읽기

PART 06에서 본 analyze를 감정 중심으로 다시 봅니다. actionsemotion을 넣으면 7가지 표정의 점수를 모두 받습니다.

# 파일: df_emotion.py"""DeepFace로 7분류 감정을 분포까지 읽는다."""from deepface import DeepFaceresult = DeepFace.analyze("face.jpg", actions=["emotion"],                          detector_backend="yunet")info = result[0]print("대표 표정:", info["dominant_emotion"])print("표정 분포:")for emotion, score in sorted(info["emotion"].items(),                             key=lambda x: x[1], reverse=True):    print(f"  {emotion:10s} {score:5.1f}%")

info["dominant_emotion"]은 1등 표정이고, info["emotion"]은 7가지 각각의 점수(백분율) 딕셔너리입니다. 1등만 보지 않고 분포 전체를 정렬해 출력한 것이 핵심입니다. 웃는 얼굴이라면 happy가 압도적으로 높게, 애매한 얼굴이라면 1·2등이 비등하게 나옵니다.

분포를 보면 신뢰도가 보인다

같은 "happy"라도 분포에 따라 의미가 다릅니다.

분포 예시 해석
happy 98%, 나머지 미미 확실한 행복
happy 45%, neutral 40% 애매(행복인지 무표정인지)
고른 분포 분류기가 자신 없음

PART 06에서 본 웃는 인물 사진의 분석 결과(happy로 분류)도, 분포를 보면 happy가 다른 표정을 압도하는지 확인할 수 있습니다. 1장에서 강조했듯, 이 분포가 곧 결과의 신뢰도입니다.

DeepFace 분석 결과(나이·성별·표정)

감정과 함께 나이·성별도

actions에 항목을 더하면 한 번에 여러 속성을 받습니다.

# 파일: df_attributes.pyfrom deepface import DeepFaceinfo = DeepFace.analyze("face.jpg",                        actions=["emotion", "age", "gender"],                        detector_backend="yunet")[0]print(f"표정 {info['dominant_emotion']}, "      f"나이 ~{info['age']}, 성별 {info['dominant_gender']}")

다만 PART 06·07에서 확인했듯 나이 추정은 모델마다 크게 흔들립니다(같은 사진을 DeepFace는 30~40대로, InsightFace는 50대로 보기도 했습니다). 나이·성별은 "대략의 경향"으로만 쓰고, 정밀한 값으로 다루지 않는 것이 안전합니다.

DeepFace 감정의 장단점

장점 단점
한 줄, 추가 학습 불필요 TensorFlow 의존(PART 06)
7분류 + 나이·성별 통합 FER2013 계열의 정확도 천장
인식·검색과 같은 라이브러리 무거움, 첫 호출 느림

DeepFace 감정은 "이미 DeepFace를 인식에 쓰고 있고, 감정도 가볍게 곁들이고 싶을 때" 가장 편합니다. 반대로 감정만 빠르게 처리하고 싶다면 다음 장의 EmotiEffLib가 더 가볍습니다.

실무 팁. DeepFace의 감정 모델은 입력 얼굴을 흑백 48×48로 줄여 처리합니다(FER2013 규격). 그래서 고해상도 원본을 줘도 그 해상도의 이점을 다 살리지 못합니다. 표정이 미묘해 정확도가 아쉽다면, DeepFace 감정 대신 블렌드셰이프(4장)처럼 다른 방식의 접근을 함께 써 보는 것을 권합니다.

이 장에서 기억할 것

DeepFace analyzeemotion은 7분류 표정의 점수 분포를 주며, 1등(dominant_emotion)만 보지 말고 분포 전체로 신뢰도를 읽어야 합니다. 나이·성별도 함께 받을 수 있지만 경향으로만 쓰고, 감정 모델은 FER2013 규격(흑백 48×48)이라 정확도에 천장이 있습니다. 인식과 같은 라이브러리로 곁들이기 좋습니다. 다음 장에서는 더 가볍고 빠른 ONNX 기반 감정 도구 EmotiEffLib를 만납니다.