【MediaPipe】Hair Segmentation動かしてみた

2020.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

カフェチームの山本です。

今までは、Multi Hand Trackingを動かし、手の検出を行っていました。

【MediaPipe】投稿記事まとめ

今回は少し手を伸ばして、同じくMediaPipeで公開されている、Hair Segmentationを動かしてみたいと思います。

Hair Segmentationを動かす

今回はWebブラウザで動かしました。こちらのページの「Example Apps」「Web」の項目にリンクがありますので、アクセスします。別ページの「MediaPipe on the Web」の項目に飛ばされるので、「MediaPipe Hair Segmentation」を選択します。ページ右上の実行のアイコン(非常口のピクトグラムのようなマーク)をクリックすると、ブラウザで実行します。(これも簡単ですね)

利用したMediaPipeのバージョンはv0.7.5でした。

WSLやUbuntuから動かしたい場合は、CPU版がないため、GPU版を動かす必要があります。GPUで動作させるための設定をして、以下のコマンドを打てば、実行できると思われます。入出力ファイルへのパスは適宜変更してください。GPUで動作させるための設定としては、MediaPipeのインストールガイドのページGPU関連のページをご参照ください。

export GLOG_logtostderr=1

bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
    mediapipe/examples/desktop/desktop/hair_segmentation:hair_segmentation_gpu
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/desktop/hair_segmentation/hair_segmentation_gpu \
--calculator_graph_config_file=mediapipe/graphs/hair_segmentation/hair_segmentation_mobile_gpu.pbtxt \
--input_video_path="/mnt/c/Users/yamamoto.hiroki/Pictures/Camera Roll/sample.mp4" \
--output_video_path="/mnt/c/Users/yamamoto.hiroki/Pictures/Camera Roll/output.mp4"

結果

使用したPCの機種はSurface Laptop 3、利用したブラウザはGoogle Chrome、画面はWindows10のキャプチャ機能で録画しました。

結果1:正面からの映像

そのまま実行すると、下の動画のようになりました。髪の毛の部分が青色に変わっていることがわかります。頭を動しても追従してきます。

髪にオーバレイしている色は、実行画面のエディタで162行目で指定されているので、ここを修正すれば変更できます。

color { r: 0 g: 0 b: 255 }

例えば、下のように変更すると、髪の色を赤色にすることができます。

color { r: 255 g: 0 b: 255 }

結果2:上からの映像

上から撮影した映像を想定し、頭の上の部分から撮影して検出を行いました。これも検出できています。

結果3:複数人の映像

複数人が映っている場合を想定して、画像を複数並べて検出させてみました。一部の髪は検出できていますが、全員の髪は検出できませんでした。途中から検出する領域が増えているため、もう少し長く検出されると、全て検出されるかもしれません。タブレットで写しているため、それが影響している可能性もあると思います。

まとめ

今回はMediaPipeのHair Segamentationを動かしてみました。1人であれば正しく検出できましたが、複数人が映っていると検出されない場合がありました。