
こんにちはイノベーション本部の朝日です。 今回は、前から気になっていたGoogle MediaPipeをちょっと触ってみたのでそのレポートです。
MediaPipeとは
MediaPipeは、マルチモーダル(ビデオ、オーディオ、時系列データなど)を適用したMLパイプラインを構築するためのフレームワークです。MediaPipeを使用すると、知覚パイプラインを、たとえば推論モデル(TensorFlow、TFLiteなど)やメディア処理機能などのモジュールコンポーネントのグラフとして構築できます。
だそうです。(機械翻訳)
- Hand Tracking
- Face Detection
- Hair Segmentation
- Object Detection
などのML(機械学習)アプリを作れるようです。
インストール
Windows環境なので、Installing on Windows Subsystem for Linux (WSL)に沿ってセットアップすればほぼ問題ありませんでした。
- WSL導入(省略)
今回はUbuntu 18.04 LTSを導入しました。
-
Windows ADBの導入(後で出てくるのでここではスキップ)
-
WSL起動
-
必要なパッケージのインストール
sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential git python zip adb openjdk-8-jdk
- Bazelのインストール
WSLではunzipが入ってないみたいなので、先に入れておきます。
sudo apt install unzip
curl -sLO --retry 5 --retry-max-time 10 \
https://storage.googleapis.com/bazel/0.27.0/release/bazel-0.27.0-installer-linux-x86_64.sh && \
sudo mkdir -p /usr/local/bazel/0.27.0 && \
chmod 755 bazel-0.27.0-installer-linux-x86_64.sh && \
sudo ./bazel-0.27.0-installer-linux-x86_64.sh --prefix=/usr/local/bazel/0.27.0 && \
source /usr/local/bazel/0.27.0/lib/bazel/bin/bazel-complete.bash
/usr/local/bazel/0.27.0/lib/bazel/bin/bazel version && \
alias bazel='/usr/local/bazel/0.27.0/lib/bazel/bin/bazel'
- MediaPipeリポジトリのチェックアウト
git clone https://github.com/google/mediapipe.git
cd mediapipe
- OpenCVとFFmpegのインストール
オプションなのでスキップ
- Hello World desktop exampleの実行
export GLOG_logtostderr=1
bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
mediapipe/examples/desktop/hello_world:hello_world
結構時間がかかりますが、
Hello World!
が表示されれば導入は完了です。
Androidサンプルアプリのビルド~実行
Android SDKの導入
WSLのmediapipeディレクトリ上で、
chmod +x setup_android_sdk_and_ndk.sh
./setup_android_sdk_and_ndk.sh
を実行して、Android SDKを導入します。
サンプルアプリのビルド
examplesの中の1つObject Detectionをビルドしてみます。(私の環境だと1.5h以上かかりました…)
bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu
これで、Androidにインストールするためのapkファイルが作成されます。
Androidにサンプルアプリをインストール
USB接続したAndroidにWindowsのADBサーバー経由でインストールします。
-
platform-toolsのインストール(Windows)
Windows側で作業します。 ここからplatform-toolsをダウンロードして任意のディレクトリに展開します。 -
ADBサーバーを起動(Windows)
adb start-server
- Androidにインストール(WSL)
ADBサーバーを起動したら今度はWSL側で
adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu.apk
と実行するとインストールできます。 うまくいかない時はWSL側とWindows側のADBのバージョンが合っているか確認してください。
実行した結果はこんな感じになります。 静止画ではなくリアルタイムのカメラ画像に対して認識できているのがわかります。
認識できるものは、mediapipe/models/ssdlite_object_detection_labelmap.txtを見るとわかります。
これで、サンプルアプリをAndroidで動かすところまでできました。
アプリの構成
ざっと眺めたところ、アプリのメイン部分はmediapipe/graphsに格納されているcalculator graph(.pbtxt)で、MediaPipe Visualizerでビジュアル化できます。(視覚化できるだけで特にビジュアルプログラミングできるという訳ではなさそうです)
先ほどのObjectDetectionのグラフだとこんな感じです。
calculator nodeをつなぎ合わせる形で開発しますが、それぞれのcalculatorはmediapipe/calculator下に格納されているC++ソース(.cc)のようです。
既存のcalculatorを組み合わせるか、足りなければ独自のcalculatorを作成するという流れですかね。
今回はサンプルを動かすだけでしたが、次は一からgraphやcalculatorを作成して独自アプリを作ってみたいですね。
以上、MediaPipeの紹介でした。