TrackingImageDatabaseInspector を読み解いてみる

概要

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 に保持する
    • UpdateDatabaseQuality
      • m_UpdatedQualityScores (JsonData) の内容を NRTrackingImageDatabaseEntry に設定する
        • NRTrackingImageDatabaseEntry の Quality, Width, Height を設定する
    • BuildImage
      • trackableImageTools_[os] -image_path="[imagePath]" -save_dir="[outPath]" -width="[imageWidth]" を ShellHelper.RunCommand で実行する
        • os : osx/win/linux
        • imagePath : Texture のパス
        • outPath : [Application.persistentDataPath]/TrackingImageData/[DB_GUID]
          • macOS では /Users/xxx/Library/Application Support/DefaultCompany/[Project]/TrackingImageData/[DB_GUID]/
        • imageWidth : NRTrackingImageDatabaseEntry の Width

要点の整理

拾い読んだ内容を整理すると、インスペクター表示やビルドを行う際に 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
    • コード上は Linux も記述されているがコマンドは osx/win しか存在しない
  • 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