はじめに
aloha!
新型コロナ(COVID-19)旋風の中、まだ、レインボーブリッジの東京アラートが赤く点灯しています。
さて、4月から研究職から離れて、技術は、自宅で自由に遊ぶことになりました。
コンタクトレスエコノミーになっていく時代、どんなことができるのか、考えていたところ、手の骨格がわかるとジェスチャーコントロールできるなあと思ってみてみたら、GoogleがMediaPipeという素敵なプロジェクトを公開していました。
早速、MacとiPhoneでビルドしてみます。
環境
・MacBook Air(macOS 10.15.5)
・iPhone XS (iOS13.5.1)
・Xcode 11.5
さっそくやってみよう
mediapipe.gitをcloneします。
% git clone https://github.com/google/mediapipe.git
bazelのインストールする
homebrewを使っていない場合は、インストールします。(使っている場合は、スキップしてください)
% /usr/bin/ruby -e "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew/install/master/install)"
bazelをインストールします。
※Googleにより開発されているソフトウェアのビルド・テストツールです。Java、C ++、Android、iOS、Goおよびその他のさまざまな言語プラットフォームをビルドしてテストします。BazelはWindows、macOS、Linuxで動作します。
% brew tap bazelbuild/tap
% brew install bazelbuild/tap/bazel
bazelのバージョン確認します。
% bazel --version
必要であれば、最新版にアップデート
% brew upgrade bazelbuild/tap/bazel
Tulsiをclone
Tulsiは、bazelのコードからXCodeプロジェクトを生成するジェネレータらしいです。
% git clone https://github.com/bazelbuild/tulsi.git
% cd tulsi
% sh build_and_run.sh
XCodeのバージョンが違うというエラーが出る場合は、
xcode_version="11.3.1"
を
xcode_version="11.5"
へ変更してから
% sh build_and_run.sh
実行してみてください。
Macのアプリケーションの中にTulsi.appがインストールされます。これを起動します。
Open Existing Projectを押下し、自分の指定したディレクトリにある/mediapipe/MediaPipe.tulsiprojを選択します。
Configsタブに「Generate」ボタンを押下し、保存するディレクトリを指定します。
Xcodeプロジェクトが表示されるので、スキーマをHandTrackingGpuAppに切り替えて、DeviceをiPhone(実機)に指定します。
この時、XcodeのGeneral→Identity→Versionに1.0を、Buildに1を追記しました。
また、Signing&Capabilities→Signingで、Automatically Manage Signingをチェックし、Teamに自分のアカウントを指定します。
うまくいかない場合は良きようにゴニョゴニョしてください。
少しカスタマイズ
バックカメラへ変更
デフォルトのままだとフロントカメラになるので、バックカメラに変更してみます。
mediapipe/examples/ios/handtrackinggpu/ViewController.mmの109行目付近にある
_cameraSource.cameraPosition = AVCaptureDevicePositionFront;
を
_cameraSource.cameraPosition = AVCaptureDevicePositionBack;
に変更します。
ミラー表示を止める
また、バックカメラへ変更したので、ミラー表示も止めたい場合は、
同じくViewController.mmの100行目付近にある
_renderer.mirrored = YES;
を
_renderer.mirrored = NO;
へ変更します。
Buildをするとしばらくして、iPhone側にインストールが行われます。
実行結果
動画で掲載すればもっとわかりやすいのでしょうけども、かなり高速(30fpsはありそう)に描画されています。
本家のサンプル
もし、どんな感じなのかだけを確認したいのであれば、MediaPipeさんのサイトで、Webブラウザで体験できるデモを提供しています。Gogole ChromeとFacetime HDカメラ(Macに内蔵)があれば試せます。
・MediaPipe顔検出
・MediaPipeハンド
・MediaPipe Hand(手のひら/手の検出のみ)
・MediaPipe髪のセグメンテーション
おわり
単眼カメラでもかなり高速に手の骨格認識ができるので驚きました。これまでは、Intel Realsenseなどでやってみたことがありましたが、これはかなり良さそうです。
mahalo!