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;
まとめ
公式リファレンス通りにやれば簡単にできますが、意外とやっているひとが少ないようなので今回記事にしてみました。
動的に画像を登録できることでやれることが結構増えると思うので、色々試して記事にしてみてください![]()