LoginSignup
8
5

More than 3 years have passed since last update.

MediaPipeのハンドトラッキングをiPhoneで

Last updated at Posted at 2020-06-11

はじめに

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のバージョンが違うというエラーが出る場合は、

tulsi/build_and_run.sh
xcode_version="11.3.1"

tulsi/build_and_run.sh
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行目付近にある

ViewController.mm
_cameraSource.cameraPosition = AVCaptureDevicePositionFront;

ViewController.mm
_cameraSource.cameraPosition = AVCaptureDevicePositionBack;

に変更します。

ミラー表示を止める

また、バックカメラへ変更したので、ミラー表示も止めたい場合は、
同じくViewController.mmの100行目付近にある

ViewController.mm
_renderer.mirrored = YES;

ViewController.mm
_renderer.mirrored = NO;

へ変更します。

Buildをするとしばらくして、iPhone側にインストールが行われます。

実行結果

動画で掲載すればもっとわかりやすいのでしょうけども、かなり高速(30fpsはありそう)に描画されています。
IMG_3174.PNG

本家のサンプル

もし、どんな感じなのかだけを確認したいのであれば、MediaPipeさんのサイトで、Webブラウザで体験できるデモを提供しています。Gogole ChromeとFacetime HDカメラ(Macに内蔵)があれば試せます。

MediaPipe顔検出
MediaPipeハンド
MediaPipe Hand(手のひら/手の検出のみ)
MediaPipe髪のセグメンテーション

おわり

単眼カメラでもかなり高速に手の骨格認識ができるので驚きました。これまでは、Intel Realsenseなどでやってみたことがありましたが、これはかなり良さそうです。

mahalo!

8
5
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
8
5