Augmented Image For unity
環境
- Unity 2019.3.14
- ARCore 1.18
- 端末 OPPO Reno A
- APILevel 7.0 ~
Augmented Image の仕様うんぬん
※公式より抜粋
- 最大20枚の画像を同時に追跡できる
- 同じ画像の複数のインスタンスを同時に検出または追跡しない
- 各拡張画像データベースには、最大1,000の参照画像の情報を保存できる
- データベースの数に制限はないが、一度にアクティブにできるデータベースは1つだけ
- (?)画像は、実行時に拡張データベースに追加できる
- ネットワーク接続を使用して、以前に作成したデータベースをダウンロードできる(詳しくは、 デベロッパーガイド)
- (?)画像を追加するときに、検出する画像の物理的なサイズを指定することができる
- (?)物理的なサイズが指定されていない場合、ARCoreはサイズを見積もり、この見積もりを時間をかけて調整する
- (?)物理サイズが指定されている場合、ARCoreは指定されたサイズを使用して画像の位置と方向を推定し、見かけのサイズまたは実際のサイズと指定された物理サイズとの不一致を無視する
- 次の画像に応答して追跡できる
- 壁に掛けられたプリントやテーブルの上の雑誌など、固定された画像
- 通過するバスの広告や、ユーザーが手を動かして持っている平らな物体の画像などの動画
- 画像が検出されると、ユーザーがデバイスを動かしたために画像がカメラビューから一時的に外れても、ARCoreは画像の位置と向きを「追跡」し続ける
- すべての追跡はデバイス上で行われます。画像の検出と追跡にインターネット接続は不要
トラッキングにおける必要条件
- 最初に検出されるカメラフレームの少なくとも25%を埋める
- 平らにする(たとえば、しわになったり、ボトルに巻き付けたりしない)
- 部分的に隠されたり、非常に斜めの角度で表示されたり、モーションブラーのためにカメラの動きが速すぎるときに表示しない
そのたもろもろうんぬんかんぬんは公式へ・・・
サンプルつくってみる
公式参照のこと
とりあえず「Assets/GoogleARCore/Examples/AugmentedImage/Scenes/」をビルドラン
やってみる、
とりあえずサンプル画像があらかじめ登録されているので、
サンプルだとなんか額縁がつくらしい、、、(地味
いじってみる
画像データベースを作る
公式のとおりなんだけどわかりづらすきる・・・ Augmented Images developer guide for Unity | ARCore
1.画像を用意する
2.画像選択 > 画像右クリック > Create > Google ARCore > AugmentedImageDatabase
ちなみに、スクリプトから登録もできるっぽい?(ためしてないがいける気がする アプリから画像とってそのままデータベースにぶちこめたりできそう!
GoogleARCore.AugmentedImageDatabase Class Reference
とおもったら
品質0/100・・・おお
この数字がなにかっていうと、この数字(スコア)が高いほどシステムが画像をトラッキングしやすいとのこと、 なのでこのボール達はとてもトラッキングしづらいということ・・・。
使用arcoreimgの間で品質スコアを取得するためにArcoreのSDKに含まれてツールを0して100、各画像のために。75以上の品質スコアをお勧めします。
ネットからぱくってきたので、こいつならいける
「・・・なにがだめなん?」
ベストプラクティス
公式を読んだ末に出した答えがこれです。(色情報つかってないんだねぇ・・・
結果は見事勝利をおさめました(スーパーボールだけ5点低いけどね、
これでいったん画像データベースの作成はおしまい
データベースを使用する
「ssets/GoogleARCore/Examples/AugmentedImage/Configurations/AugmentedImagesSessionConfig」
変更する(この作業もスクリプトでいけるらしい
データベース適用されたか確認する
いけたね
表示するオブジェクトを変えてみる
ExampleController
にアタッチされてるAugmentedImageExampleController
をみてみたところ、
こいつは画像データベースに登録されてり画像を検出し、AugmentedImageVisualizerPrefab
(デフォで設定されてるやつ)を配置するやつみたい
てことは次はAugmentedImageVisualizerPrefab
を見てみる
AugmentedImageVisualizer
にアタッチされてる AugmentedImageVisualizer
が表示するオブジェクトの位置云々を制御しているっぽい
のでこいつを書き換える、
namespace GoogleARCore.Examples.AugmentedImage { using System; using System.Collections.Generic; using System.Runtime.InteropServices; using GoogleARCore; using GoogleARCoreInternal; using UnityEngine; public class AugmentedImageVisualizer : MonoBehaviour { public AugmentedImage Image; public GameObject Hoge; public void Update() { if (Image == null || Image.TrackingState != TrackingState.Tracking) { Hoge.SetActive(false); return; } float halfWidth = Image.ExtentX / 2; float halfHeight = Image.ExtentZ / 2; Hoge.transform.localPosition = (halfWidth * Vector3.zero) + (halfHeight * Vector3.zero); Hoge.SetActive(true); } } }
よしよし