みなさんこんにちは。ネクストシステムの田中です。
ついにARKit3が登場しましたね!
そもそもARKitって何だっけ?という方のためにおさらいをすると、
Apple社が提供する、iPhone・iPad向けのAR対応アプリのためのフレームワークです。
ARアプリを作る時に、よく使いそうな部品をAppleさん側で用意してくれていて、これらの部品を使うと1から作る必要なくて楽チン、つまりARアプリを作りやすくなるんですね。
というわけで、今回は恐れ多くもAppleさんの『ARKit3』と弊社モーキャプアプリ『ミチコンPlus』で比較検証をしたので、まとめてみました。
自社製品の比較記事を自社で書くという謎のセルフプレイをかましてますが、ARKit3を今後他の開発で利用させていただく気満々なこともあり、どっちにしろ検証しないとだったので、ついでに検証結果をご共有させていただきます。
もくじ
ARKit3で何ができるの?
まずARKitが2から3になって、具体的にはこんなことができるようになりました。
- PeopleOcclusionという機能が実装された
- 要するにARで人を挟むことができる。
- ただし、8月末の時点でiPhoneはXR / XS / XS Max、 iPadはPro(第三世代)/ Air(第三世代)/ Mini(第五世代)と、新しい機種のみが対応。
- モーションキャプチャが可能になった。(今までは表情だけ)
- フロントカメラとリアカメラの映像を同時に取得できるようになった。
- RealityKitというフレームワークが実装され、ARにアニメーションを付与できるようになった。
- 複数人でのフェイストラッキングができるようになった。
- 1台の端末で最大3人まで表情を認識できるようになった。
- 複数人で同時にAR空間を作成することができるようになった。
- 今までは1人が作ったAR空間を複数人で共有していた。
- 立体物の認識精度が向上した。
- 空間の認識速度が向上した
今回、特に弊社として注目するのは、
というところです。
というのも、実は弊社ではARKitを利用せず、独自開発のAIエンジンを使ってスマホやタブレットだけでモーションキャプチャを実現しているアプリを2019年9月頭にリリースしています。
ARKit3のモーションキャプチャーと同機能のミチコンPlusとは?
その自社アプリというのが、『ミチコンPlus』です。
簡単に説明すると、iPhoneやiPadのカメラだけで全身の動きを捉え、リアルタイムで動きを3Dキャラクターに反映できるiOSアプリとなっています。
また、ミチコンPlusは、カメラ1つだけで人間の骨格情報を検出できるAI骨格検出システム「VisionPose Single3D」という弊社システムを利用して開発しています。
このVisionPoseで、スマホだけでモーションキャプチャを実現しているんですね。
VisionPose Single3DとミチコンPlusについてはこちらをご確認ください。
▼VisionPose Single3D WEBページ
▼ミチコンPlusの詳細はこちら
というわけで、今回はこちらのミチコンPlusとARKit3をいくつかの観点から比較してみたいと思います。
検証
検証結果をお見せする前にまず前提として、検証方法としては、簡単に説明すると以下のような形で行います。
- 適当に動いた動画を撮影。
- ディスプレイに①の動画を映す。
- iPadのカメラにディスプレイを映す。
- ARKit3とミチコンPlusを起動し、それぞれ撮影
利用する機材は、iPad mini 第5世代(iOS13.1)です。
また、今回の比較は、
ARKit3とVisionPose Single3Dに3Dモデルを当てた時の見た目の比較
となります。
モデルによって見え方は大きく変わるので、こちらを念頭に置いてご覧ください。
精度比較・速度比較
精度・速度比較としては、
- 純正のARKit3サンプルアプリで比較
- 3Dモデルを弊社バーチャルキャラクターのミチコに揃えて比較
の2パターンを用意しました。
2の検証にはAR FoundationというAPIを使って、VRMのキャラクターを表示してます。また、AR Foundationで使用しているロボットを動かす機構はミチコンとは異なります。
1. 純正のARKit3サンプルアプリで比較
2. 3Dモデルを揃えて比較
動画をみた時の弊社エンジニアの感想はこちら。
- 遅延は共にあるけど、ARKitとミチコンでは目視でわからないぐらいの差
- ミチコンの方が足先の角度が自然に見える。ミチコンは足先を取っていないので、FKの力か…?
- 顔の向きはミチコンの方が追従してそう
- ARKit3のほうが正面気を付けの姿勢で足の交差が乱れる
- ミチコンの方は後ろ向いた状態で手を上げると顔が下を向いている(00:18~)
- ARKitの方が二の腕が追従してくれている様にみえる。ミチコンは二の腕がほとんど動かない(0:52〜)
- ジャンプはARKit3の方がジャンプしてる感がある。ARKit3の方が全体的に躍動感がある気がする。回転する動作はミチコンの方が滑らか。
端末温度比較
ARKit3もミチコンPlusもスペックを要求される処理をしているので、端末の温度の上昇って気になりますよね。
ということで10分間での温度の増加について調べてみました。
バッテリーが少ない時、充電100%で且つ常時充電状態の2パターンで比べたところこんな感じ。
結果をみると、ミチコンPlusもARKit3も時間経過と共に、温度は上昇しています。最大で2℃ほどの違いがありましたが、10分程度であればそこまで差はないように見えます。
考察
広報担当の考察なんて夢の国を出た後の耳くらいにはいらないと思うので、これらの検証結果から、弊社エンジニアに考察してもらいました。
ちなみにARKit3の技術についてはこちら公式の動画を見るとわかりやすいです。
解析速度の違い
解析速度の違いについては、ARKit3は検出から解析までの速度が速い為、フレームレートを高く維持できます。厳密にはわからないのですが、おそらく処理フローはこんな感じじゃないかなとのこと。
一方VisionPoseは画像から2D座標を検出するのに時間がかかってしまうため、フレームレートが下がる傾向があります。(図参照)
VisionPoseは解析結果のレスポンスを待ってる間にも入力は毎フレームされてて、受け取れない分の入力は破棄しています。
公式でリアルタイムで毎フレーム処理をしていると発表されていることを考えると、おそらくARKit3のほうが早いと推測できます。
ただ、検証動画をみると、ほとんど速度に違いはないように見えますし、真相はどうなんですかね・・・とのことでした。
精度についての違い
ARKit3は回転している時に体の一部が隠れると、3Dモデルが崩れる傾向がありました。ミチコン Plusは多少隠れても、崩れることなく表示できましたが、後ろを向いているときに頭がブレる瞬間がありました。
後ろを向くと、顔のパーツが取れなくなるので頭の向きの計算が、失敗しやすくなると推測されます。体の一部が隠れても崩れることなく表示できる件については、もともとVisionPoseが持ち合わせている特長によるものです。
気になるのが、 ARKit3が真正面を向いていないように見える点です。
何故なんでしょう・・・
姿勢によって得意・不得意がありそうなので、座り姿、寝姿、スポーツ等、いろいろな姿勢を試してみたいです。
機能としての違い
機能としての違いは次のようなことが挙げられます。
- ARKit3はアンカー情報(床、テーブルなど)があるのに対し、ミチコンにはない。
- ARKit3はiOS13以降、VisionPoseはiOS12以降の端末で動作させることができる。
- ARKit3は全身トラッキングがインカメラではできない。VisionPoseは可能。
取得する関節の違い
骨格検出を行う内部エンジンでの比較は下記となります。
ARKit3:8ポイント~
VisionPose Single3D:17ポイント(今後30ポイントに増加予定)
※骨格検出を行う内部のエンジンでの比較
ARKit3自体が提供している関節情報としては91ポイントと発表されています。
詳細には、ARKit3に名前付きの関節が8つ定義されていて、主要ポイントにはアクセスしやすくなっています。
ARKit3での定義
ARSkeleton.JointName.root
ARSkeleton.JointName.head
ARSkeleton.JointName.leftFoot
ARSkeleton.JointName.leftHand
ARSkeleton.JointName.leftShoulder
ARSkeleton.JointName.rightFoot
ARSkeleton.JointName.rightHand
ARSkeleton.JointName.rightShoulder
ARKit3はあらかじめ用意された多くのキーポイントの中から好きなものを選んで使うことができます。
一方、ミチコンPlusに利用するVisionPose Single3Dの関節の定義は下記。
VisionPoseは自社開発なので、今後も関節数をカスタマイズすることが可能です。
Single3Dでの定義
VisionPose.Keypoint.spineBase
VisionPose.Keypoint.hipRight
VisionPose.Keypoint.kneeRight
VisionPose.Keypoint.ankleRight
VisionPose.Keypoint.hipLeft
VisionPose.Keypoint.kneeLeft
VisionPose.Keypoint.ankleLeft
VisionPose.Keypoint.spineMid
VisionPose.Keypoint.neck
VisionPose.Keypoint.nose
VisionPose.Keypoint.head
VisionPose.Keypoint.shoulderLeft
VisionPose.Keypoint.elbowLeft
VisionPose.Keypoint.wristLeft
VisionPose.Keypoint.shoulderRight
VisionPose.Keypoint.elbowRight
VisionPose.Keypoint.wristRight
VisionPose.Keypoint.spineShoulder
▼参考サイト
http://appleengine.hatenablog.com/entry/2019/06/12/034242
https://developer.apple.com/documentation/arkit/arskeleton/jointname
まとめ
弊社エンジニアの意見を踏まえると、そもそもの機能の違いもありますが、簡単にいうと全体的な処理速度の速さはARKit3に分があり、ミチコンPlusは精度(対応できる姿勢の多さ)に分がありそうです。
▼ARKit3とミチコンPlusの比較検証結果まとめ
ARKit3 | ミチコンPlus | 解説 | |
解析速度 | ◎ | ○ | ARKit3の方が高い |
精度 (汎化性能) |
○ | ◎ | VisionPoseの方が高い |
アンカー情報 | ◎ | × | VisionPoseにはアンカー情報は無い |
OS | ○ | ◎ |
ARKit3:iOS13以降 |
関節数 | ○ | ◎ |
ARKit3:8ポイント以上 |
端末温度 (10分間) |
○ | ○ | そこまで変わらない |
それぞれの特長を踏まえて、これからの開発に活かしたいですね。
現場からは以上です。
▼VisionPoseのWEBサイトはこちら