概要
TrackingImageDatabase の生成を理解するために TrackingImageDatabaseInspector を読み解いてみます。 個人的な読解結果であるため誤りが含まれている可能性があることをご了承ください。
目次
確認環境
- NRSDK 1.2.1
- macOS 10.15
解説
拾い読み
ざっくりと TrackingImageDatabaseInspector を拾い読みすると、以下が要点になるのかなと思います。
- TrackingImageDatabaseInspector
- NRTrackingImageDatabase のインスペクターを表示する際
- UpdateDatabaseQuality を呼び出す
- BuildImage を呼び出す
- 出力先は [Application.persistentDataPath]/TrackingImageData/[DB_GUID]/markers.json
- TrackingImageDatabasePreprocessBuild の OnPreprocessBuild が実行される際
- BuildDataBase を呼び出す
- BuildImage を呼び出す
- 出力先は [Application.persistentDataPath]/TrackingImageData/[DB_GUID]/markers.json
- m_UpdatedQualityScores (JsonData) を更新する
- UpdateDatabaseQuality を呼び出す
- 呼び出した次に NRTrackingImageDatabase の BuildIfNeeded を呼び出す
- BuildIfNeeded では
- [Application.persistentDataPath]/TrackingImageData/[DB_GUID]/markers.json を読み込み
- [Application.persistentDataPath]/TrackingImageData/[DB_GUID]/markers.dat に書き込み
- [Application.persistentDataPath]/TrackingImageData/[DB_GUID] を [Application.persistentDataPath]/TrackingImageData/[DB_GUID]_zipFile にアーカイブ
- zip のバイナリを NRTrackingImageDatabase の m_RawData に保持する
- BuildIfNeeded では
- BuildImage を呼び出す
- BuildDataBase を呼び出す
- UpdateDatabaseQuality
- m_UpdatedQualityScores (JsonData) の内容を NRTrackingImageDatabaseEntry に設定する
- NRTrackingImageDatabaseEntry の Quality, Width, Height を設定する
- m_UpdatedQualityScores (JsonData) の内容を NRTrackingImageDatabaseEntry に設定する
- BuildImage
trackableImageTools_[os] -image_path="[imagePath]" -save_dir="[outPath]" -width="[imageWidth]"
を ShellHelper.RunCommand で実行する
- NRTrackingImageDatabase のインスペクターを表示する際
要点の整理
拾い読んだ内容を整理すると、インスペクター表示やビルドを行う際に TrackingImageData ディレクトリに追跡対象画像の学習結果を保存していると思われます。 macOS では /Users/[Account]/Library/Application Support/DefaultCompany/[Project]/TrackingImageData/[DB_GUID]/ ディレクトリに保存されます。
TrackingImageData/[DB_GUID] ディレクトリの内容は以下の様になっています。
. ├── Data │ ├── nreal_city.fset │ ├── nreal_city.fset3 │ ├── nreal_city.iset │ ├── nreal_snake.fset │ ├── nreal_snake.fset3 │ ├── nreal_snake.iset │ ├── nreal_trib.fset │ ├── nreal_trib.fset3 │ └── nreal_trib.iset ├── markers.dat └── markers.json
さらに、markers.json と makers.dat の内容は以下の様になっています。
{ "is_use_world_cam" : 0, "list" : [ "nreal_city", "nreal_snake", "nreal_trib" ], "nreal_city" : { "filter" : 50, "info" : "20200422212420_30.72_1.79_2_2", "physical_height" : 396.87496948242188, "physical_width" : 396.87496948242188, "train_score" : 70.502113342285156, "type" : "NFT" }, "nreal_snake" : { "filter" : 50, "info" : "20200422212420_30.72_1.79_2_2", "physical_height" : 396.87496948242188, "physical_width" : 396.87496948242188, "train_score" : 64.339988708496094, "type" : "NFT" }, "nreal_trib" : { "filter" : 50, "info" : "20200422212420_30.72_1.79_2_2", "physical_height" : 396.87496948242188, "physical_width" : 396.87496948242188, "train_score" : 68.515426635742188, "type" : "NFT" }, "pixel_format" : "MONO8", "track_thread_num" : 8 }
# Number of markers 3 ./Data/nreal_city NFT FILTER 50 MARKER_WIDTH 396.874969482422 MARKER_HEIGHT 396.874969482422 ./Data/nreal_snake NFT FILTER 50 MARKER_WIDTH 396.874969482422 MARKER_HEIGHT 396.874969482422 ./Data/nreal_trib NFT FILTER 50 MARKER_WIDTH 396.874969482422 MARKER_HEIGHT 396.874969482422
そして、markers.json を生成するために以下のコマンドを実行しています。
trackableImageTools_[os] -image_path="[imagePath]" -save_dir="[outPath]" -width="[imageWidth]"
- os : osx/win/linux
- imagePath : Texture のパス
- outPath : TrackingImageData/[DB_GUID] ディレクトリのパス
- imageWidth : 画像の幅 [m]
ビルド時には、NRTrackingImageDatabase の BuildIfNeeded にて markers.json を markers.dat に変換し、TrackingImageData/[DB_GUID] ディレクトリ zip ファイル ([DB_GUID]_zipFile) にアーカイブしています。
また、NRTrackingImageDatabase は ScriptableObject であり以下の情報を保持しています。
- RawData : byte[]
- zip ファイルのバイナリデータ
- Images : List
- Name : string
- Width : float
- Height : float
- Quality : string
- TextureGUID : string