표정 분석: 영상과 사진에서 액션 유닛 측정하기

표정 분석: 영상과 사진에서 액션 유닛 측정하기

표정은 연구가 모을 수 있는 가장 풍부한 행동 데이터이면서, 코딩하기 가장 고된 데이터이기도 합니다. 훈련받은 코더가 FACS로 직접 코딩하면 영상 길이보다 훨씬 오래 걸리고, 대부분의 연구실은 모든 참가자에게 이를 적용하지 못합니다. 자동 도구가 도움이 되지만, 그 출력을 연구 설계·통계·원고와 같은 자리에 모으려면 보통 스크립트를 한 무더기 써야 합니다.

뉴트로픽은 영상이나 사진에서 얼굴 액션 유닛(AU)을 직접 측정하고, 그 결과는 연구의 나머지가 있는 같은 작업 공간에 남습니다. 이 글은 face_expression 도구가 무엇을 계산하는지, 무엇을 돌려주는지, 조건과 참가자 사이에서 표정을 어떻게 비교하는지, 근사가 어디서 끝나는지를 다룹니다. 스크린숏은 예시 프로젝트(예시 · 도메인별 스킬)의 얼굴 영상 세션과, 사진 한 장을 측정한 새 채팅에서 가져왔습니다.

무엇을 올릴 수 있나

  • 영상. MP4, MOV, WebM, AVI, MKV, M4V. 앱 안의 미리 보기는 브라우저 플레이어를 쓰므로 영상을 보려면 H.264 MP4가 가장 무난합니다. 분석은 어느 형식이든 서버에서 디코딩합니다.
  • 사진. PNG, JPG, WebP, BMP.
  • 이미 뽑아 둔 AU 결과. OpenFace 같은 도구를 이미 돌렸다면 그 CSV를 올리세요. 데이터 분석 스킬이 표로 다루고, 통계 도구가 바로 씁니다.

그다음 원하는 것을 설명합니다.

text
/analyze session_03.mp4 에서 시간에 따른 얼굴 액션 유닛과 표정을 추출해 줘. 가장 강한 AU를 그림으로 그리고, 프레임별 표를 저장한 뒤, 어떤 AU가 언제 활성화되는지 요약해 줘.

측정 방식

도구는 프레임마다 Google의 MediaPipe FaceLandmarker를 실행합니다. 얼굴 메시를 맞추고 블렌드셰이프 점수 52개를 돌려주는데, 얼굴 부위가 얼마나 움직였는지(입꼬리 올라감, 눈썹 내려감, 턱 벌어짐 등)를 나타냅니다. 점수는 0에서 1 사이입니다.

뉴트로픽은 이 블렌드셰이프를 FACS 액션 유닛 17개에 대응시킵니다. AU01, AU02, AU04, AU05, AU06, AU07, AU09, AU10, AU12, AU14, AU15, AU17, AU20, AU23, AU25, AU26, AU45(눈 깜박임)입니다. FACS에서는 AU가 하나인데 메시에는 왼쪽·오른쪽 점수가 따로 있으면 큰 값을 씁니다. 알아 둘 대응이 두 가지 있습니다.

  • AU06(뺨 올림)은 뺨 찡그림과 눈 찡그림 점수를 함께 봅니다. 메시가 뒤센 미소의 표지를 두 점수로 나눠 내기 때문입니다. AU07(눈꺼풀 조임)도 눈 찡그림을 보므로, AU06과 AU07이 같은 값으로 나오는 경우가 많습니다.
  • AU25(입술 벌림)는 입 다묾 점수를 뒤집은 값입니다.

AU 위에 다음이 더해집니다.

  • 감정 라벨. EMFACS 방식의 AU 조합에서 나옵니다(예: 행복은 AU06 + AU12). 핵심 AU가 활성일 때만(행복은 AU12, 슬픔은 AU15 등), 그리고 해당 AU의 절반 이상이 활성일 때만 라벨을 붙입니다. 기본 활성 임계값은 0.3입니다. 영상에서는 각 라벨이 붙은 프레임의 비율을 받습니다.
  • 머리 자세. 얼굴 메시에서 구한 yaw, pitch, roll(도)입니다.

영상은 기본적으로 초당 5프레임을 추출해 분석합니다. 다른 비율도 요청할 수 있습니다.

영상에서 돌려받는 것

  • 그림(*_face_au.png): 최고값이 가장 높은 AU 다섯 개를 0–1 척도로 시간에 따라 그립니다.
  • 프레임별 표(*_face_au.csv): 시간, 얼굴 검출 여부, AU 17개 값, yaw·pitch·roll, 그 프레임의 감정 라벨.
  • 요약 수치: AU마다 평균과 최고값, 활성 AU 목록, 감정 비율, 평균 머리 자세.
AU 시계열을 연 얼굴 영상 세션. 웃는 영상 내내 AU25·AU12·AU10·AU07이 높게 유지됩니다. AU06도 그려져 있지만 같은 눈 찡그림 점수를 읽는 AU07 선에 가려 있습니다.
AU 시계열을 연 얼굴 영상 세션. 웃는 영상 내내 AU25·AU12·AU10·AU07이 높게 유지됩니다. AU06도 그려져 있지만 같은 눈 찡그림 점수를 읽는 AU07 선에 가려 있습니다.
그림 뒤의 프레임별 표. 100행(20초 × 초당 5프레임) × 23열로, 조건별로 집계할 준비가 돼 있습니다.
그림 뒤의 프레임별 표. 100행(20초 × 초당 5프레임) × 23열로, 조건별로 집계할 준비가 돼 있습니다.

보고서는 AU마다 평균과 최고값을 정리하고 임계값을 넘는 AU를 표시합니다.

보고서의 AU 결과. AU별 평균·최고 활성값과 0.3 임계값 기준 활성 여부가 정리돼 있습니다.
보고서의 AU 결과. AU별 평균·최고 활성값과 0.3 임계값 기준 활성 여부가 정리돼 있습니다.

사진 한 장도 됩니다

사진 한 장도 같은 도구를 거칩니다. 시계열 대신 한 행을 받습니다.

text
/analyze face_smile.jpg 의 표정을 측정해 줘. 액션 유닛, 감정, 머리 자세를 구하고 수치를 짧게 정리해 줘.
사진을 측정한 새 채팅. AU12 0.973, AU25 1.000, AU10 0.634, AU06·AU07 0.631이 한 행짜리 AU 표 옆에 나옵니다.
사진을 측정한 새 채팅. AU12 0.973, AU25 1.000, AU10 0.634, AU06·AU07 0.631이 한 행짜리 AU 표 옆에 나옵니다.
같은 값이 보고서에도 들어가 있습니다. 모든 AU가 나열되고 0.3 임계값 기준으로 활성·비활성이 표시됩니다.
같은 값이 보고서에도 들어가 있습니다. 모든 AU가 나열되고 0.3 임계값 기준으로 활성·비활성이 표시됩니다.

채팅 답과 보고서는 도구가 돌려준 숫자를 쓰고, 보고서 문장에는 그 숫자를 만든 분석 단계를 가리키는 [n] 인용이 붙습니다. 채팅 모델에게 사진을 그냥 보여 주는 것과 다른 점이 여기 있습니다. 사진을 보는 모델은 표정을 묘사할 수는 있어도 AU12를 소수 셋째 자리까지 잴 수는 없습니다. 어느 쪽이 맞는 상황인지는 이미지 분석에서 다룹니다.

어떻게 확인했나

내부 검증에서는 정답을 아는 입력 두 가지를 썼습니다.

  • 웃는 사진. 도구는 AU12 0.97과 활성 AU06을 내고 표정을 행복으로 판정했습니다. 이전 버전은 눈썹·눈꺼풀 AU가 임계값을 넘는 바람에 이 사진에 '분노'도 붙였습니다. 지금 라벨에 핵심 AU를 요구하는 것은 그 때문입니다.
  • 같은 미소로 만든 20초 얼굴 영상. AU12 평균 0.975, AU06 평균 0.614였고, 추출한 100프레임 중 100프레임이 행복으로 분류됐습니다.

이것은 대응 관계가 제대로 동작하는지 보는 점검이지, 사람 FACS 코더와 비교한 AU 정확도 검증이 아닙니다. 결론이 특정 AU에 달려 있다면, 훈련받은 코더에게 영상 일부를 확인받으세요.

조건과 참가자 비교

표정은 비교할 때 결과가 됩니다. 프레임별 CSV에는 시간 열이 있어서, 자극 시작 시점이나 과제 블록 같은 사건 기록으로 조건별 구간을 자를 수 있습니다. 그다음은 이렇게 합니다.

  • 참가자·조건별로 집계합니다(예: 긍정 영상과 중립 영상 동안의 평균 AU12).
  • 통계 도구로 비교합니다. compare_groups는 가정을 점검한 뒤 대응 또는 독립 검정을 고르고, 혼합모형은 참가자 안의 반복 시행을 다룹니다.
text
/stats au_by_condition.csv 에는 참가자와 조건(positive, neutral, negative)마다 평균 AU12와 AU04가 한 행씩 있어. 조건 간에 각 AU가 다른지 검정하고, 가정을 점검한 뒤 효과크기와 그림을 보고해 줘.

이 방식에 맞는 연구로는 정서 유도 연구, UX 세션(헷갈리는 화면에서 찡그리고 성공 메시지에 웃는 순간), 강의나 게임 중의 몰입, 같은 영상의 심박수와 표정을 짝짓는 분석이 있습니다. 얼굴 영상으로 심박수 재기를 참고하세요.

한계를 분명히

  • FACS의 근사치입니다. 블렌드셰이프는 근육 활동이 아니라 메시를 묘사합니다. 값은 0–1 척도라 OpenFace 강도(0–5)와 비교할 수 없고, AU06과 AU07은 구조상 겹칩니다.
  • 감정 라벨은 휴리스틱입니다. 사람이 느끼는 것이 아니라 AU 패턴을 묘사합니다. AU를 보고하고, 라벨은 요약으로만 다루세요.
  • 프레임당 얼굴 하나. 처음 찾은 얼굴을 씁니다. 여러 사람이 나오는 영상은 먼저 잘라 주세요.
  • 추출 간격. 초당 5프레임에서는 아주 짧은 미세 표정이 추출 사이에 빠질 수 있습니다. 시점이 중요하면 더 높은 비율을 요청하세요.
  • 자세와 가림. 고개를 크게 돌리거나 마스크, 입을 가린 손, 어두운 조명은 검출을 떨어뜨립니다. 얼굴이 없는 프레임은 짐작하지 않고 그렇다고 기록합니다.

참가자 촬영: 동의와 개인정보

얼굴 영상은 사람을 식별할 수 있고, 표정 데이터는 민감할 수 있습니다. 첫 업로드 전에 뉴트로픽은 연구 데이터를 올리기 전에 안내를 보여 줍니다. 데이터 처리에 필요한 권리, 동의, 승인(IRB나 윤리위원회 등)을 갖췄는지 확인하는 단계입니다.

  • 참가자에게 얼굴이 녹화될 뿐 아니라 자동으로 분석된다는 점을 알리세요.
  • 측정은 뉴트로픽 서버에서 실행되고, 모델은 숫자를 받습니다. 업로드는 삭제할 때까지 비공개 작업 공간에 남으며 학습에 쓰이지 않습니다. 선택한 모델 제공자에게 무엇이 가는지는 개인정보처리방침에 있습니다.
  • 가능하면 공동 연구자와는 원본 영상보다 파생된 AU 표를 공유하세요.

함께 읽기