Google I/O 2019にて発表されたARCoreのアップデートv1.9.0でAugmented Imageがパワーアップしました。字面的には地味なのですが、実際に使ってみると衝撃を受けるレベルの改善なので紹介しておきます。
なお、ARCoreは複数のプラットフォーム向けにSDKがありますが、本記事では主にUnity SDKを取り扱っています。
Augmented Image
ARCoreの機能の一つで、画像をマーカーにしてARコンテンツを重畳表示するAPIです。
概要や使い方については変わっていないため、過去記事を参照ください。 jyuko49.hatenablog.com
Augmented Imageは、画像がプリントされた物になら何でもARコンテンツを乗せられ、ポスター、カード、商品パッケージなど幅広い媒体で利用できるのが特徴です。
ただ、画像や環境によっては検知しにくかったり、トラッキングが外れやすい点がネックでした。
そう、v1.8までは・・・。
ARCore v1.9を試す
Google公式のリファレンスが更新されており、内容も丁寧に書かれているため、手順の通りに行えばOKです。
ただし、現時点では、Google Playで提供されているデバイス側のARCoreがv1.9に対応していないため、APKから手動アップグレードする手順が追加になります。
Android SDKのGithubのリリースページからAPKをPCにダウンロードします。
Release ARCore SDK for Android v1.9.0 · google-ar/arcore-android-sdk · GitHub
ARCore対応デバイスをPCとUSBで繋いで、adb install
コマンドでAPKをデバイスにインストールします。
adb install -r ARCore_1.9.0.apk
ARCore v1.9での変更点
トラッキング精度の大幅な向上
移動する画像マーカーの追従性が飛躍的に向上しました。
試してみれば、一目瞭然です。
ARCore v1.9のAugmented Image、検知精度よくなったどころのレベルではない pic.twitter.com/zNpN28Z8fr
— jyuko (@jyuko49) 2019年5月8日
画像マーカーを傾けてもトラッキングが外れない
正面から画像を写し続けないとトラッキングが中断してしまうケースがあったのですが、一度検知してしまえば、画像を傾けても姿勢を判断してくれます。
画像マーカーを動かしても追従できている
v1.8以前のAugmented Imageは画像マーカーの移動に弱く、トラッキングが途切れ途切れになることがありました。
以下の動画ツイート(v1.8以前)ではスマートフォンをゆっくり動かしてもARのキャラクターが一瞬その場に置いて行かれ、トラッキングが再開すると瞬間移動するような挙動になっています。
- v1.8以前の追従性
AR年賀状からの流れで、スライドショーでARを切り替える実験。これだけ追従性あれば何かしら使えそう。#arcore #クエリちゃん #プロ生ちゃん pic.twitter.com/ggwMjwWThC
— jyuko (@jyuko49) 2019年1月16日
上記に比べて、ARCore v1.9では画像を手で振ってもトラッキングは途切れておらず、マーカーの動きに追従していることがわかります。
- v1.9の追従性
ARCore v1.9のAugmented Image、検知精度よくなったどころのレベルではない pic.twitter.com/zNpN28Z8fr
— jyuko (@jyuko49) 2019年5月8日
複数画像の同時検知
複数の画像マーカーを同時にトラッキングできるようになりました。
複数画像の同時検知を撮り忘れたので追加。
— jyuko (@jyuko49) 2019年5月8日
同じ画像マーカーは一方しか検知しない模様(おそらく後勝ちで移動と判断される) pic.twitter.com/Rz4KtTshAo
左(1枚目)の画像は、複数の異なる画像マーカーにAR表示を行なっている例です。2種類の画像それぞれにARの額縁が表示されています。
右(2枚目)の画像は、複数の同じ画像マーカーでAR表示を試した例です。このケースでは、2つの画像をどちらもマーカーとして検知するのですが、ARの額縁は常にいずれか一方の画像にしか表示されません。挙動から推察するに、同じ画像マーカーの場合は後勝ちでPoseを上書きしているようです。
サンプルアプリの実装に依存している可能性もありますが、同じ画像をマーカーとして複数使う際は注意が必要です。
一方、複数の画像をマーカーとして使う場合、トラッキング時にどの画像を検知したかのNameが取れるため、画像によって異なるARコンテンツを表示するのは容易です。
何が変わったのか
Augmented Imageと同時に発表されたLight Estimation(環境光推定)の説明には、Machine Learning(機械学習)を利用している旨の記述があります。
developers.googleblog.com
また、上記の記事内には明記されていませんが、Google I/Oのセッションでは TensorFlow Liteという単語も出てきていました。
デバイス側のARCoreにTensorFlow Liteが搭載されているのであれば、Augmented Imageで検知した画像の姿勢推定にもMachine Learningが使われている可能性があります。
まとめ
今回のアップデートによって、Augmented Imageはさらに使い勝手の良いAPIになりました。
以前の記事にも書いたように、"
何(画像)に何(ARコンテンツ)を乗せるか"の組み合わせとアイデア次第で色々なARを編み出せるので、是非この機会に試して欲しい機能です。
ARCoreの方向性
Tangoの終了、ARCoreの発表、Google LensやARナビの登場、今回のアップデートといった流れから、ハードウェア的なアプローチではなく、Machine Learningを用いたソフトウェア的なアプローチでARの基本機能を強化していく方針が読み取れます。
ハードウェアとSDKの密接な連携はGoogleよりもAppleが得意とするところですし、Androidの思想と少し合わなかったことでTangoの早期撤退につながったのかなと思います。当時は突然の方針転換に感じましたが、その後、AR x MLという方針を打ち出したことで、Google本来の得意領域を活かす形に軌道修正した印象を受け、方針転換後の継続性は感じられます。
個人的には、ARCore対応のグラス型デバイスも製品化して欲しいのですが、Googleが近々に製品化する可能性は低そうです。ただ、Androidのコンセプトとして、別にGoogleが自社でARグラスを作る必要はないと思っており、当面はハードに依存しないARCoreのアップデートに注力して欲しいです。
今後の期待
Augmented Imageはもシンプルな分、大きな拡張は無さそうなので、機械学習的なARへのアプローチとしてNianticが発表したものと同等の高度なオクルージョン機能に期待しています。
TensorFlowで物体検知やセグメンテーションした結果をARCoreで使えれば、オクルージョンだけでなく、様々な画像処理ができそうな気がしています。
以前に自作を試みたこともあるのですが、個人開発ではなかなかに大変なので、ARCoreとして提供してくれる形は割と期待しています。
DeepLabをMask R-CNNと比べてみた - じゅころぐAR
ここで使っているDeepLabもGoogleがTensorFlowで研究しているものですし、ARへの流用も想定に入っているはずです。