2019.10.01

ARKitのモーションキャプチャを使って人の動きを判定する

Pocket

こんにちは。F.S.です。
今回はiOS13より利用可能になったARKitのモーションキャプチャを取り上げます。

https://developer.apple.com/videos/play/wwdc2019/607/

かつてCPUを使ったOpenPoseの実装を用いてピッチング動作の解析を試みたことがありましたが、ハイスペックなマシンもなく時間がかかる上にCMUモデルでも精度が今ひとつというところで諦めていました。

これがスマホを使ってリアルタイムに、しかも3次元でモーションキャプチャが実現できるということで、実に驚きです。

ただし、対応機種はA12以降のチップが搭載された機種であり、iPhoneだとXS, XS Max, XR, 11シリーズになります。

実機確認


Appleからサンプルが提供されているので、どれくらい使えるのかを見てみましょう。
トラッキングしている人物の横に人体の3Dモデルを表示するというサンプルです。
リアルな人物ではなく、画像や動画でもキャプチャ可能です。


人体がそれらしく捉えられている感じはありますが、今ひとつな感じですね。

色々試してみると、カメラに正対した状態では良いですが、体が捻られたり腕や脚が交差する動作では特に四肢がうまくトラッキングできないケースがあります。これはOpenPoseでCMUモデルを試した時も同様でした。

WWDC2019ではゴルフのスイングや運動の動作分析に使えると紹介されていますが、そこまで行くにはまだ改善が必要ですね。時系列で運動を学習できるようになれば改善するのではないかと技術の進歩に期待します。

一方、体幹はそこそこ捉えられているように思えるので、モーションキャプチャを利用して簡単なアプリを作ってみます。

今回の確認環境は以下の通りです。
  • iPhone XR
  • iOS 13.0

反応トレーニングアプリ


昔プロ野球のキャンプとかで見かけた、指示に反応して体を動かすという反応トレーニングをスマホで実現してみます。

上下左右の方向指示にしたがって体を動かすものとします。体の動きは一番取得が簡単で安定しているスケルトンのルートノード(ヒップジョイント)から判定します。


まず、正解となる動作に対してどのようなトラッキングデータが得られるのかを確認してみます。

上下左右それぞれで5回ほどトラッキングして得られるx,yの2次元座標をプロットしたものがこちらです。


上下の動きが斜めに捉えられているようにも見えますが、概ね方向は判定できそうです。ARKit(ARView)のフレームレートは60fpsですが、移動距離が急に大きくなるフレームが確認されるので、これを持って反応したタイミングと考えて良さそうです。

これを以前のブログで紹介したActivity classificationを使って分類器を作るというのが本来だとは思うのですが、今回は簡単のためにx,yどの方向への移動量が大きいかで上下左右を判定する原始的な手法を用いました。その結果がこちらの動画です。



スコアのつけ方は全然チューニングしてないですが、動作の判定はできてます。
ただ、上下の時に想定以上に左右の移動量が現れるため、その点は考慮する必要があるかもしれません。動画中ではジャンプが若干斜めになっただけで横移動と判定されている例が確認できます。

おわりに


モーションキャプチャを使ったユースケースを実装してみましたが、ちゃんとチューニングすれば使いものにはなりそうです。
ただし、このケースでは画面もカメラも自分の方を向いてなければなりません(聴覚での認識であれば画面は不要ですが)。フロントカメラはフェイストラッキングしかできないので、仕方なく外部モニタに画面を映しています。ARViewの映像が左右反転しているのはそのためです。

ARKitを使ってARではないものができあがってしまいましたが、いろいろと使い道を考えてみるのも面白いと思います。


それではまた。



次世代システム研究室では、アプリケーション開発や設計を行うアーキテクトを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。