表情分析:動画と写真からアクションユニットを計測する

表情分析:動画と写真からアクションユニットを計測する

表情は、研究で集められる行動データのなかでもとりわけ情報量が多く、同時にコーディングがとりわけ大変なデータです。訓練を受けたコーダーが FACS で手作業のコーディングをすると動画の長さよりはるかに時間がかかり、ほとんどのラボでは参加者全員には適用できません。自動ツールは助けになりますが、その出力を研究デザイン・統計・論文と同じ場所にまとめるには、たいてい大量のスクリプトが必要になります。

Neutropic は動画や写真から顔のアクションユニット(AU)を直接計測し、その結果は研究のほかの部分と同じワークスペースに残ります。この記事では、face_expression ツールが何を計算し、何を返すか、条件や参加者の間で表情をどう比べるか、そして近似がどこまでなのかを説明します。スクリーンショットは、サンプルプロジェクト(例 · 分野別スキル)の顔動画セッションと、写真 1 枚を計測した新しいチャットから撮りました。

アップロードできるもの

  • 動画。 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 の範囲です。

Neutropic はこのブレンドシェイプを FACS のアクションユニット 17 個に対応させます。AU01、AU02、AU04、AU05、AU06、AU07、AU09、AU10、AU12、AU14、AU15、AU17、AU20、AU23、AU25、AU26、AU45(まばたき)です。FACS では 1 つの AU なのにメッシュには左右のスコアがある場合は、大きいほうを使います。知っておきたい対応が 2 つあります。

  • AU06(頬の引き上げ) は、頬を細めるスコアと目を細めるスコアの両方を見ます。メッシュがデュシェンヌ・スマイルの手がかりをこの 2 つに分けて出すためです。AU07(まぶたの引き締め)も目を細めるスコアを見るので、AU06 と AU07 は同じ値になることがよくあります。
  • AU25(唇が開く) は、口を閉じるスコアを反転した値です。

AU に加えて、次の値も返ります。

  • 感情ラベル。 EMFACS 流の AU の組み合わせから付けます(たとえば幸福は AU06 + AU12)。中核となる AU が活性のとき(幸福なら AU12、悲しみなら AU15 など)、かつその感情の AU の半分以上が活性のときだけラベルを付けます。既定の活性しきい値は 0.3 です。動画では、各ラベルが付いたフレームの割合が得られます。
  • 頭部姿勢。 顔のメッシュから求めたヨー、ピッチ、ロール(度)です。

動画は既定で 1 秒あたり 5 フレームを抽出して解析します。別の間隔も指定できます。

動画から得られるもの

  • 図(*_face_au.png):ピーク値の高い上位 5 つの AU を、0–1 のスケールで時間に沿って描きます。
  • フレームごとの表(*_face_au.csv):時刻、顔の検出の有無、17 個の AU の値、ヨー・ピッチ・ロール、そのフレームの感情ラベル。
  • 要約値: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 での活性・非活性が並びます。

写真 1 枚でもできます

写真 1 枚も同じツールで処理します。時系列ではなく 1 行が返ります。

text
/analyze face_smile.jpg の表情を計測してください。アクションユニット、感情、頭部姿勢を求め、数値を簡潔にまとめてください。
写真を計測した新しいチャット。AU12 0.973、AU25 1.000、AU10 0.634、AU06・AU07 0.631 が、1 行だけの AU の表の横に並びます。
写真を計測した新しいチャット。AU12 0.973、AU25 1.000、AU10 0.634、AU06・AU07 0.631 が、1 行だけの AU の表の横に並びます。
レポートにも同じ値が入っています。すべての AU が並び、しきい値 0.3 で活性・非活性が示されます。
レポートにも同じ値が入っています。すべての AU が並び、しきい値 0.3 で活性・非活性が示されます。

チャットの回答とレポートはツールが返した数値を使い、レポートの文にはその数値を出した分析ステップを指す [n] 引用が付きます。写真をチャットモデルにそのまま見せる場合との違いはここにあります。画像を見るモデルは表情を説明できても、AU12 を小数点以下 3 桁まで測ることはできません。どちらがどんな場面に向くかは画像分析で扱います。

どう確かめたか

社内の検証では、答えが分かっている入力を 2 つ使いました。

  • 笑顔の写真。 ツールは 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 が 1 行ずつあります。条件間で各 AU に差があるかを検定し、前提を確認して、効果量と図を報告してください。

この流れに合う研究には、感情誘導の研究、UX のセッション(分かりにくい画面で眉をひそめ、成功メッセージで笑う瞬間)、講義やゲーム中の没入、同じ動画から得た心拍数と表情を組み合わせる分析などがあります。顔動画から心拍数を測るも参照してください。

限界をはっきりと

  • FACS の近似です。 ブレンドシェイプが表すのは筋活動ではなくメッシュです。値は 0–1 のスケールで OpenFace の強度(0–5)とは比べられず、AU06 と AU07 は仕組み上重なります。
  • 感情ラベルはヒューリスティックです。 人が感じていることではなく、AU のパターンを表します。AU を報告し、ラベルは要約として扱ってください。
  • 1 フレームに顔は 1 つ。 最初に見つかった顔を使います。複数人が映る動画は先に切り出してください。
  • 抽出間隔。 毎秒 5 フレームでは、ごく短い微表情が抽出の合間に落ちることがあります。タイミングが重要なら高いレートを指定してください。
  • 姿勢と遮蔽。 大きく顔を背ける、マスク、口元を覆う手、暗い照明は検出率を下げます。顔が見つからないフレームは推測せず、そのように記録します。

参加者を撮影するとき:同意とプライバシー

顔の動画は個人を特定でき、表情データは機微な情報になりえます。最初のアップロードの前に、Neutropic は 研究データをアップロードする前に という案内を表示します。データの処理に必要な権利、同意、承認(IRB や倫理委員会など)がそろっていることを確認する手順です。

  • 参加者には、顔が録画されるだけでなく自動で解析されることを伝えてください。
  • 計測は Neutropic のサーバーで動き、モデルが受け取るのは数値です。アップロードは削除するまで非公開のワークスペースに残り、学習には使われません。選んだモデル提供者に何が送られるかはプライバシーポリシーにあります。
  • 共同研究者とは、できれば元の動画ではなく派生した AU の表を共有してください。

あわせて読みたい