LoginSignup
1
0

うなづき検出

Last updated at Posted at 2023-11-24

人にとって重要な認識技術は、人に関する認識です。
人検出、頭部検出、顔検出、顔landmark などの検出。
人のpose推定、head pose の推定、hand poseの推定などがあります。

うなづき検出が重要な理由

  • 人についての理解を持たせようとしたら、人の動作の意味を解釈する必要があります。
  • その1つが、うなづき動作です。
  • 同意、不同意の区別をするために、首を縦にふる、横にふる動作です。
  • この動作が、どれくらい世界的に共通性があるのかどうかを私は知りません。
  • それでも、私が属している文化圏の中では、同意・不同意のジェスチャーとしてうなづきがあります。

head pose推定(またはlandmark検出)とうなづき検出とのあいだ

  • head pose 推定は、最近の顔検出ライブラリに含まれることが多くなっています。

  • 顔向きが重要な理由:

    • 正面顔でない横向きの顔は、顔照合の対象から除外したい。
    • 顔をどちらに向けていているのかで、何に関心を持っているのかがわかる。
      • よそ見、居眠りの検出
    • カメラの側(ロボットのカメラの場合には、ロボットの側)にその人が注意を払っているのかがわかる。
  • landmark 検出も顔検出ライブラリで重要な出力として含まれていることも増えています。

    • 5点という少ないlandmarkからもっと多いlandmarkの場合の両方があります。
    • landmarkが重要な理由:
      • 顔照合のための顔の正規化をするのに重要
      • 顔の向きを判定するために顔のlandmarkが情報源として重要
      • 口を空いているのかなどの判定材料
      • 顔画像への加工のヒント(例: 口紅を塗る。アバターの表情を作るうえで、元となる顔の表情を取得する。)
  • 顔向きと頭部のジェスチャとの違い

    • 頭部のジェスチャを見極めるには、顔向き(head pose)の変化を見極めること
    • 単にhead pose が各フレームでわかったからといって、すぐにhead のジェスチャーを判定できるわけでない。

うなづき(nodding) 検出

The Nodding Pigeon library provides a pre-trained model and a simple inference API for detecting head gestures in short videos. Under the hood, it uses Google MediaPipe for collecting the landmark features.

Nodding Pigeon ライブラリは、短いビデオで頭のジェスチャーを検出するための事前トレーニング済みモデルと単純な推論 API を提供します。 内部では、ランドマーク機能を収集するために Google MediaPipe を使用します。

以下のコードは、README.mdに書かれているサンプルコードです

py
from noddingpigeon.inference import predict_video
from noddingpigeon.video import VideoSegment  # Optional.

result = predict_video(
  "your_head_gesture_video.mp4",
  video_segment=VideoSegment.LAST,  # Optionally change these parameters.
  motion_threshold=0.5,
  gesture_threshold=0.9
)

以下の値は、ジェスチャーの判定結果の例です。

{
  'gesture': 'turning',
  'probabilities': {
    'has_motion': 1.0,
    'gestures': {
      'nodding': 0.009188028052449226,
      'turning': 0.9908120036125183
    }
  }
}

Person-Nodding-Detection

Requirements

  • dlib
  • OpenCV

head nod detection

https://gist.github.com/smeschke/e59a9f5a40f0b0ed73305d34695d916b
Requirements

  • OpenCV

この実装では、顔landmark を利用していない。
代わりにOptical flow を用いている。

そのうなづき検出は、実用になるものですか

  • ここにあるようなOpen Source, Open Modelでの実装で、あなたのユースケースでは、十分な結果がでますか?

ありがちな状況(起こるかもしれないこと):

  • 簡単な状況ではうまくいっても、実ケースの状況ではなぜかうまくいかない。
  • 人によって、うなづきの動作の大きさが異なり、そのためにうなづきが無視される。
  • うなづき以外の動作まで、うなづきと判定してしまう。
  • 顔が正面顔ではうまくいくが、30度横向きになったとたんにうまくいかない。
  • マスクをしている状況だとうまくいかない。
  • 複数の顔が同時に見えていて、しかも顔がすぐ隣にあるとうまくいかない。
  • 帽子をかぶっているとうまくいなかい。
  • サングラスをかぶっているとうまくいかない。

実用に耐えるかどうかテストしよう。

  • これらの問題に対して言えることは、testを書こうということだ。
  • ユースケースに対するテストは、Open Source、商用ライブラリのどちらでも必要だ。
  • testに対してうまくいくことを示すことが、うまくいくことを示す一番の方法だ。

付記:顔向き推定について調査中を改訂しました。

mediapipeを用いた実装などについて追記しています。
うなづき検出は、顔のlandmark 検出の派生用途になります。そのため、顔のlandmarkを検出する各種ライブラリの最新の動向を気にかけてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0