#はじめに
本ドキュメントでは、SmartARをアプリケーションに組み込むことを想定して記述しています。
そのため、技術部分以外、正確性に欠ける表現や、私個人の主観が含まれています。あらかじめご了承ください。
#SmartARとは
SmartAR®は、ソニーが従来から研究開発を進めてきた「物体認識技術」と、ソニー独自の「3D空間認識技術」を統合した高機能・高精度なARエンジンです。 ARにとって重要な初期認識性能、高速追随性能に優れ、また、3D空間認識により三次元構造を認識し、空間全体を利用した大規模でリアルなARを実現することが可能です。
尚、SmartAR for Unityの使用事例としては、
デジアイAR
http://jp.rohto.com/digieye/ar/
AAAR(一般販売前のSmartAR SDKバージョン)
http://avex.jp/aaa/special/aaar/
などがあります。
#認識モードに関する補足
##SceneMapping
SceneMappingは、検出したマーカーの中心座標を原点にして空間認識を行う機能です。
周囲環境の特徴点を取り込みながら自己位置推定を行うので、十分に特徴点を検出した状態に限り、
カメラ入力にマーカー画像が含まれていなくても自己位置推定が可能です。
###SceneMappingのメリット
SceneMappingでは、マーカーの特徴点に加えて周囲環境の特徴点も取り込むので、
安定性が高く、定位感があるのが特徴です。
そのため、dictoolで提示されるscoreが多少低くても(70点以下などでも)、ある程度は安定した動作感が得られます。
###SceneMappingのデメリットと対応
動作させていくにつれ、結果的にマーカーよりも周囲環境の特徴点の影響が強くなります。
そのため、マーカーを動かしてもAR重畳物が動かない現象が発生します。
また、最初の平面推定に失敗していた場合、それを検出するのが困難です。
マーカーを動かしてもAR重畳物が動かない現象については、そもそも認識後にマーカー自体を動かさないようにアナウンスする、
マーカーが動いても問題ないデザインにする、などの対応が考えられます。
最初の平面推定に失敗していた場合については、アプリケーション内に、ユーザが任意のタイミングで空間をリセットする機能を入れておくことが推奨されます。
(Unityであればシーン自体を読み直すのが一番手っ取り早いです)
##HFG/VFG
HFGとVFGは、完全マーカーレスでARを実現させる(周囲環境の特徴点のみで空間を構築する)モードです。
ただし、HFGとVFGがSceneMappingやTargetTrackingの"認識"に相当する状態に遷移するには、十分な特徴点の取り込みが必要です。
具体的には、カメラ(端末)を回転させず、その場でゆっくり上下左右に移動させる動作が必要になります。
###HFG/VFGのメリット
完全マーカーレスのため、印刷物を用意する必要がないのが最大のメリットです。
###HFG/VFGのデメリットと対応
ユーザに謎の動作を強要することと、物理サイズの基準がないので、AR重畳物の大きさをコントロールできないことがデメリットです。
アプリケーション側でしっかりとしたチュートリアルを提示する、大きさにこだわらないものを表示する、
ユーザが大きさを変えられるようにするなど、フォローをしっかり行うことが求められます。
// 「完全マーカーレス」はロマンですが、使いどころが難しいです。
#SmartAR Controllerのプロパティに関する補足
##Scene Mapping Init Mode
Recogniton ModeをRECOGNITION_MODE_SCENE_MAPPINGに設定した際のみ有効です。
RECOGNITION_MODE_TARGET_TRACKINGに設定されていると無視されます。
##Search Policy
マーカーをFAST=処理速度優先でざっくり探すか、PRECISIVE=じっくり探すかの設定です。
通常はPRECISIVEで問題ないと思いますが、Targetsの数が8~10個を超えるようであればFASTにする選択肢もありだと思います(体感的に)。
##Dense Map Mode
Dense Map Modeとは、特徴点をたくさん登録するモードです。SceneMappingで使用します。
SmartARの特徴点の最大登録数は512個なので、広い範囲を空間認識させる際には不向きです。
卓上のARなど、局所的な空間でロバストネスを確保したい場合には有効にするといいかもしれません。
// とはいえ、この機能の恩恵をあまり体感できたことはありません……
#その他
##Targetsに登録するFileName
辞書ファイルの拡張子は*.v9.dicですが、UnityEditor上だと.dicが省略されて表示されます。
この問題については、内部でちゃんと.dicが付いていなかったら勝手に付けてくれるので気にする必要はありません。
StreamingAssetsフォルダのファイル名をコピペすれば問題ないです。
##辞書のスコア
大体80点以上が推奨されますが、SceneMappingに限り、検出さえできれば周囲環境で自己位置推定はフォローできるので、
40点や60点などでも、使えないことはないです。
さすがに20点を切ってくると厳しいですが、スコアは信頼せずに体感で調整すると意外といけます。
もちろん、辞書のスコアが高いことに越したことはないです。
##SceneMappingの平面推定を安定させるには
辞書ツールを使用する際、検出した特徴点を描画したppmファイルを出力する-outimageオプションがあります。
このオプションをつけて出力すると、どのコーナーポイントが認識に使われるかを確認することができます。
出力されたppmファイルの赤丸が満遍なく付いていると、平面推定が安定します。
逆に、辞書画像矩形の対角に赤丸が不足していると、平面推定に失敗しやすくなります。