이 장은 선택입니다. 감정 분석을 학술적으로 더 깊이 파고들고 싶은 독자를 위해, Action Unit이라는 표준화된 표정 단위와 그것을 다루는 Py-Feat 라이브러리를 소개합니다. 앞 장의 블렌드셰이프와 비슷하지만, 심리학·행동과학 연구에 뿌리를 둔 더 엄밀한 체계입니다. 가볍게 읽고 넘어가도 이후 PART에는 지장이 없습니다.
Action Unit과 FACS
Action Unit(AU)은 FACS(Facial Action Coding System, 얼굴 움직임 부호화 체계)에서 정의한 얼굴 근육 움직임의 표준 단위입니다. 심리학자 에크먼이 만든 이 체계는 표정을 "어떤 근육이 움직였는가"로 객관적으로 기술합니다.
| 예시 | Action Unit | 움직임 |
|---|---|---|
| AU1 | 안쪽 눈썹 올림 | 슬픔·놀람의 단서 |
| AU6 | 볼 올림 | 진짜 미소(눈가 주름) |
| AU12 | 입꼬리 당김 | 미소 |
| AU15 | 입꼬리 내림 | 슬픔 |
흥미로운 점은 AU 조합으로 감정을 추론한다는 것입니다. 예컨대 진짜 미소(뒤셴 미소)는 AU12(입꼬리)뿐 아니라 AU6(볼·눈가)이 함께 나타나야 합니다. 입만 웃는 가짜 미소와 구별되는 것입니다. 4장의 블렌드셰이프가 그래픽스에서 왔다면, AU는 행동과학 연구에서 온 더 엄밀한 표준입니다.
Py-Feat 설치와 사용
Py-Feat은 AU·감정·랜드마크·머리자세를 한 번에 분석하는 연구용 도구입니다. 무거운 편이라 이 책의 기본 환경에는 넣지 않았습니다. 쓰려면 별도로 설치합니다.
pip install py-feat
기본 사용법은 검출기(Detector)를 만들고 이미지를 분석하는 흐름입니다.
# 파일: pyfeat_demo.py (별도 설치 필요)from feat import Detectordetector = Detector() # 검출·AU·감정 모델 묶음result = detector.detect_image("face.jpg") # 분석 결과 DataFrameprint(result.aus) # Action Unit 강도들print(result.emotions) # 감정 점수들
detect_image는 결과를 pandas DataFrame으로 주며, aus로 Action Unit 강도, emotions로 감정 점수에 접근합니다. 한 번의 호출로 AU·감정·랜드마크·자세를 모두 얻는 올인원 연구 도구입니다.
언제 Py-Feat을 쓰나
| 상황 | 권장 |
|---|---|
| 실시간·앱·AR | MediaPipe 블렌드셰이프(4장) |
| 빠른 7분류 감정 | DeepFace·EmotiEffLib(2·3장) |
| 학술 연구·AU 분석·진짜미소 판별 | Py-Feat |
Py-Feat은 정확하고 학술적으로 검증된 AU를 주지만 무겁고 느립니다. 그래서 실시간 응용보다는 "표정을 엄밀히 분석해 논문을 쓰거나, 진짜 미소 여부 같은 미세한 판별이 필요한" 연구 성격의 작업에 적합합니다. 일반적인 앱·서비스에는 앞 장들의 가벼운 도구가 더 맞습니다.
실무 팁. AU와 감정의 관계를 맹신하지 마세요. "AU12가 있으니 행복하다"는 표정의 물리적 기술일 뿐, 그 사람이 정말 행복한지는 별개입니다. 이는 다음 장의 핵심 주제이기도 합니다. Py-Feat의 엄밀함은 "표정을 객관적으로 기술"하는 데 있지, "내면의 감정을 읽는" 데 있지 않습니다.
이 장에서 기억할 것
Action Unit은 FACS에서 정의한 표준 표정 단위로, AU 조합으로 감정을 추론하며 진짜 미소(AU6+AU12) 같은 미세 판별이 가능합니다. Py-Feat은 AU·감정·랜드마크를 한 번에 주는 연구용 올인원 도구지만 무거워 별도 설치가 필요하고, 실시간보다 학술 분석에 적합합니다. 다음 장에서는 지금까지의 모든 감정 도구에 공통으로 적용되는 한계와, 결과를 과신하면 안 되는 이유를 정면으로 다룹니다.