公式ページを参考にMediaPipeのデモを使ってみます
どれも試してみたいですが、とりあえず使ってみたいのはMediaPipe Handsです
環境
macOS 10.14.4 Desktop (HandsにはAndroid, iOS, Desktop, Webの環境がある)
インストール
MediaPipeのページが詳しいのでそのまま進めていきます
Hello Worldの実行でエラーがでました
bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world ERROR: Analysis of target ‘//mediapipe/examples/desktop/hello_world:hello_world’ failed; build aborted: Either the path attribute of android_sdk_repository or the ANDROID_HOME environment variable must be set. INFO: Elapsed time: 0.161s INFO: 0 processes. FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured) FAILED: Build did NOT complete successfully (0 packages loaded, 0 targets configured) currently loading: @rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains Fetching @local_config_cc_toolchains; fetching
公式ページのAndroidのところに
MediaPipe recommends setting up Android SDK and NDK via Android Studio (and see below for Android Studio setup). However, if you prefer using MediaPipe without Android Studio, please run setup_android_sdk_and_ndk.sh to download and setup Android SDK and NDK before building any Android example apps.
とあるので入れてみました
再度実行すると無事表示Hello World実行できました!
I20200918 14:23:55.252943 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254393 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254407 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254418 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254428 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254437 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254446 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254456 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254465 380831168 hello_world.cc:56] Hello World! I20200918 14:23:55.254477 380831168 hello_world.cc:56] Hello World!
こちらにしたがって進めていきます
デモ実行
どれも問題なく実行できて、サンプル画像の通りの結果になりました
Face Detection
6つのランドマークとマルチフェイスサポートを備えた超高速の顔検出ソリューション
実行コマンド
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/face_detection:face_detection_cpu GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/face_detection/face_detection_cpu \ --calculator_graph_config_file=mediapipe/graphs/face_detection/face_detection_desktop_live.pbtxt
横を向いても追従してきます
ちなみにマスクをしてみても追従してきました
顔を画面からはみ出させても追従してきます
画面に顔が一つもない状態で顔が認識されるということがありました
判定されたものは小物だったりバッグだったり、目鼻口に見えるものがあったわけではありません
Face Mesh
リアルタイムで468の3D顔ランドマークを推定する顔ジオメトリソリューション
実行コマンドはFace Detectionを参考にファイル名を変更するだけです
こちらもマスク着用で判定され、少し横を向いても横から覗き込んでも追従してきました
真横になると判定できないようです
複数顔が写った画像も試してみましたが1人しか認識されませんでした
ついでに目と鼻っぽい3点があれば認識されるのだろうかと思ってプーさんに登場してもらいました
顔として認識されているようですが、やっぱり人間とは違っておかしいです
ついでに会社のマスコットキャラのトドも試してみました
こちらは顔とすら認識されませんでした
Iris
虹彩、瞳孔、目の輪郭を含むランドマークをリアルタイムで追跡
目の輪郭を追跡ということでしたが、顔の認識もしてくれてるのでこちらもマスクをしてみました
見えていない鼻と口が多少ゆがんでます
片目を隠した状態でも同じように歪みましたが画面に写ってる目はしっかり追跡されました
目をつむった場合はちゃんと目の輪郭が一本になりました
こちらもプーさんに登場してもらいました
かろうじて顔として認識されていますが、やはり目鼻口の位置はわからないようです
Faceの枠は表示されたり消えたりするので顔としての認識は怪しいです
またトドも登場させてみましたが認識されませんでした
鼻と口の問題なのでしょうか。。
Hands
画像全体を操作し、方向付けられた手のバウンディングボックスを返す手のひら検出モデル
手の表裏と左右、指が見えないように縦にしたりしてみました
すべて右手なのですが、掌がわからない状態だとLeftになる場合がありました
はじめに掌か手の甲を見せて認識させて動かすと良いようです
早い動きにも問題なく付いてきます
指が5本見える状態で手の向きなどを変えた場合は問題なく認識されました
Pose
BlazePoseの調査を利用して、RGBビデオフレームから25の2D上半身ランドマークを推測する、忠実度の高い上半身ポーズ追跡用のMLソリューション
上半身のポーズ追跡をやってみました
カメラから遠ざかるのでスクショはできませんでしたが、サンプル通りの結果になりました
画面から顔や体を半分はみ出させても追従されます
アクロバティックにY字バランスポーズなどもやってみましたが足が手と認識されることはありませんでした
横向きは認識されなかったり、奥側にまわる腕の認識が点滅したりしてました
後ろ向きはでも認識され、目もそれっぽいところに配置されていました
広い部屋(後ろに何もない場所)で試してみると横向きになっても奥に位置する腕も認識されました
Hair Segmentation
DesktopはLinux対応なようなので、webで実行しました
RGB(0,0,255)に設定されてます
少し下を向くと全体青くなりました
跳ねてる髪まで色が変わってますが前髪は変化しないときもありました
赤と緑もしてみました
青にしたときより黒髪が目立つ気がします
ついでにEdge Detectionもやってみました
細かい髪の毛まで検出されてます
こちらは参考にしてるページに詳細が載ってません
Object Detection
机にあったものが黒や青しかなかったせいなのか、ペンしか認識されませんでした
手を横から入れてみるとノートも認識されました
プーさんは認識率が良いですね
テディベアとして認識されています
会社の棚も撮ってみました
ボトルはどれも似てるから判定されると思ったのですがそうでもないようです
デスクの上を動画に撮って認識させてみましたが、イヤホンやメガネははさみとして認識されました
ファイルはmp4で試しました
角度や背景にもコツが必要なのかもしれません
ボトルが並んでるところもmp4で試してみましたがどれも認識されませんでした
mp4で認識させると認識率が下がる気がします
Box Tracking
personやcell phoneは認識されますが、ペンは認識されませんでした
イヤホン(結んだ状態)は認識されるときもありましたがすぐ外れました
ノートも認識されるノートとされないノートがありました
こちらはなかなかコツが必要そうです
Face Tracking
ちょうどこの記事を書こうとしていたときにMediaPipeを使ったセミナーがあったので参加してみました
顔に画像を貼り付けて追従させるものです
会社のマスコットであるトドフェイスを貼り付けてみました
サンプル画像として用意されていた画像(目鼻口がちゃんと人の顔の通りになっている)だとやはりいい感じでした
これだけ簡単で正確に認識できるのでMediaPipeを使って色々遊べそうです
Hands機能を使ってハンドジェスチャーの認識をやってみたいです