GoogleARCoreの AugmentedImage
で使用するマーカー画像をプログラム実行時に登録する必要があったので、リファレンスを読んでみたところ簡単にできるようなので、やってみた備忘録。
やってることはリファレンスそのままなのですが日本語記事がなかったのでメモしておきます
概要
GoogleARCore には AugmentedImages
という機能があり、予め登録しておいた画像をARアプリから読み取ってARマーカーとして利用することができます。
以下のページのように現実風景の画像を拡張してトリックアートのように見せたりするような応用ができます。
AugmentedImages
はサンプルを参考にすれば簡単にUnity
などで利用できますが、サンプルプログラムは予め使用するイメージを登録してからビルドするものでしたが、公式リファレンスを読むとプログラム実行時に画像を登録できるようなので、備忘録を兼ねて紹介します。
なおここでは Unity
への ARCore
の導入などの方法については紹介しません。以下のQuickStartや記事が参考になると思います。
今回作ったもの
Firebase
を使って AugmentedImage
のマーカー画像をオンラインで管理し、マーカーを動的に登録できるようにして、現実空間の風景や看板をマーカーとして利用し、ARで道案内するアプリを作成しました。
ソースコードや解説記事は時間がないのでまた後日書きます。。
やり方
準備
Unityプロジェクトを立ち上げて、ビルドする Scene に ARCore Device
プレハブと Enviromental Light
プレハブを追加しておきます。
次にARCore Device
のインスペクタに任意の Session Config
がアタッチされ、さらにその Session Config
のインスペクタに AugmentedImageDatabase
がアタッチされているのを確認します。ここにアタッチする SessionConfig
や AugmentedImageDatabase
はデフォルトのものでも何でもいいです。 AugmentedImageDatabase
にあらかじめ画像が登録されている場合、その画像も実行時に読み取り可能になります。また、コンパイル時にAugmentedImageDatabaseに一枚も画像が登録されていない場合、エラーになるようです。
画像を登録
ARCoreDevice
にアタッチされている ARCoreSessionConfig
に対して
SessionConfig.AugmentedImageDatabase.AddImage(name, texture2d, width)
で登録できます。
-
name
はその画像の名前を示すstring
型 -
texture2d
は画像のTexture2D
-
width
はその画像の実空間での横幅[m]を表すfloat
型
戻り値は登録した画像の AugmentedImageDatabase
上でのインデックス(int
)で、後述するようにその画像の品質(読み取りやすさのスコア)などの情報を取得する際に使用します。
画像のクオリティを確認する
登録した画像のARマーカーとしての読み取りやすさを示すスコア(0~100)を以下のようにして確認することができます。
(Qualityがstring
型なのに注意してください。)
Googleの公式ページによればスコア75以上が推奨されています。
string score = SessionConfig.AugmentedImageDatabase[index].Quality;
まとめ
公式リファレンス通りにやれば簡単にできますが、意外とやっているひとが少ないようなので今回記事にしてみました。
動的に画像を登録できることでやれることが結構増えると思うので、色々試して記事にしてみてください