まえがき
Vuforia EngineのImage Targetsという機能を遊び尽くしてみました。
Image Targetsは、2次元の画像をマーカーとしてAR表現ができる機能です。
今回はImage Targetsの機能を使い倒してみました!
実行環境
- Unity 2019.3.0f3
- Vuforia Engine 9.0
- iPhone 11 Pro
Vuforia Engineとは
Vuforia Engineは、iOSやAndroid、PC、HoloLensといったAR/MRデバイスに対応したAR開発プラットフォームです。
Vuforia EngineはPTCが提供していますが、元々はQualcommが開発しており、2015年にPTCがVuforia事業を6500万ドルで買収しています。
マーカートラッキングを非常に得意としており、特徴点の多い(複雑な)画像であればほとんどぶれることなく3Dオブジェクトを配置することができます。
詳しくはこちらをご覧ください!
画像をターゲットにするImage Targetsを使っていきたいと思います。
ライセンスの取得とライセンスキーをUnityに設定する方法関しては、ラズパイ4をVuforia Engineで分身させてみた ~Object Recognition編~こちらをご覧ください。
マーカーを20個用意して検証してみた
Vuforia EngineのImage Targetsでは、マーカーは最大でも10個までを推奨しています。
推奨ということは、11個以上でも動くの?
と思ったので、マーカーを20個用意して検証してみました。
ターゲットにはこちらの画像を使用させていただきました。
データベースの作成
Vuforiaディベロッパーポータルからデータベースを作成します。
Deviceを選択します。
Add TargetからSingle Imageでターゲットを追加していきます。
Widthは実際に印刷するターゲットのサイズをメートル単位で入力します。
20枚登録したあと、データベースをUnity向けにダウンロードして展開することで、データベースの登録が完了します。
UnityでImage Targetの設定
Image TargetにSphereを配置していきました。
実際に認識してみた
ターゲット6つでトラッキング pic.twitter.com/htPgiLeM1w
— こーや (@koyataroo) May 31, 2020
ターゲット20個でトラッキング pic.twitter.com/qg2vUaaBmO
— こーや (@koyataroo) May 31, 2020
ターゲットを6個とした場合と比べると、20個の場合は初回の認識に少し時間がかかることがわかりました。
しかし、初回の認識以降は特に違いはなさそうでした。
Cloud Recognitionの挙動を確認してみた
Cloud Recognitionの概要
Image Targetsは、デバイスにマーカーの画像情報を保持するか、クラウドからフェッチするかの2種類があります。
デバイスにマーカーの情報を保存する場合は、プランに関わらず100個まで登録することができます。
クラウドからフェッチするCloud Recognitionは、ライセンスによってクラウドに登録できるマーカーの数が変わります。
Development | Basic + Cloud | Pro | |
---|---|---|---|
マーカー上限 | 1,000個 | 100,000個 | 100,000個以上 |
認識回数上限 | 1,000 recos/month | 10,000 recos/month | 10,000 recos/month以上 |
Developmentプランは無料で使うことができるので、最低でも1000個までは登録することができます。
実際にCloud Recognitionを使用してみた
クラウド向けにデータベースを作成します。
Access Key
とSecret Key
をコピーし、UnityのCloud RecognitionのCloud Reco Behaviourコンポーネントにペーストします。
そして、Cloud RecognitionにGithubにある、Simple Cloud Reco Evnet Handlerをアタッチします。
Image Target Template
にImage Targetを設定します。
すると、このような挙動になりました。
Cloud Recognition pic.twitter.com/gWwnIwCK2q
— こーや (@koyataroo) May 31, 2020
初回の読み込みに1秒程度時間はかかるものの、それ以降はDeviceのImage Targets同様に動作します。
Extended Trackingの挙動を確認してみた
Extended Trackingとは、ターゲットがカメラから外れてもトラッキングを続ける機能です。
ターゲットが固定されている場合に有効です。
ターゲットが1個の場合の動画は見かけたことがあるので、3個置いて実験してみました。
Extended Tracking pic.twitter.com/hgyVZR0p2G
— こーや (@koyataroo) May 31, 2020
ターゲットが画面から外れた後に、ターゲットのマーカーを隠してみました。
ですが、最初に認識した場所にオブジェクトが止まってることがわかるかと思います。
街中での看板だったり、動かないものにたいして非常に有効的だと感じました。
サイズは正確?Ground Planeも使ってみた
Ground Planeという機能は、水平面を検知してオブジェクトを置くことができます。
そこで、Ground PlaneとImage Targetsを用いて同じサイズのオブジェクトを表示した場合、どれくらいの誤差が生まれるのか検証してみました。
Ground Planeとのサイズ比較 pic.twitter.com/jbmdlH8zcS
— こーや (@koyataroo) May 31, 2020
どちらも5cmの立方体を置いているのですが、視覚的には違いがわかりません。
Ground PlaneもImage Targetsもサイズの誤差がほとんどなく配置することが可能ということがわかりました。
まとめ
Vuforia EngineのImage Targetsは、かなり精度良くトラッキングすることができました。
Image Targetは、IoTの場面で非常に有効になると考えています。
デバイスにマーカーを貼ることで、かざすだけでデバイスの情報を表示することができます。
IoTでは、センサーやデバイスは何百何千のオーダーで使うことが多々あります。
その場合、動的にターゲットの追加/削除をすることのできるCloud Recognitionがおすすめです。
有料プランにはなりますが、100万個を超えるターゲットを利用することができ、それらをリアルタイムに更新することができます。(1000個までは無料です)
IoT以外の分野でも、出版や小売、広告、製品の認識など幅広く使われるのではないかと考えています。
Cloud Recognitionを使用することで、有料プランにはなりますが100万個以上のターゲットを動的に追加したり削除したりすることができます。
開発者向けのVuforia Slackコミュニティがあり、僕も参加しています。
記事の内容で質問があればそちらから質問下さい!
また今回のコードはGithubに載せているので是非クローンしてお手元で試してみてください!