mengineer's blog

ニッチなネタばかりですが。

JAISDK ChunkDataを取得する(TimeStamp編)

半年ほど前の下記ネタの続きです。 (過去記事一覧はこちらから)

mengineer.hatenablog.com

この時はChunkDataがどんなものか?、JAISDK上でどう参照出来るか?等々、
取っ掛かりの部分でしたが、今回は実際のChunkDataを取得するやり方について。

ChunkDataには色々有りますが、今回はその中のTimeStampを取得してみます。

下記、JAIのWEBサイトのテクニカルインフォメーションの中に
"Chunk Dataの使い方”というpdf記事が有りましたので、参考にしました。

テクニカルインフォメーション

ChunkDataを有効にする

下記の流れで設定します。(併せて上記pdfも参照して下さい)

  1. Chunk Dataを有効にする
    ”ChunkModeActive”NodeをTrueに設定
  2. 参照したいChunkDataを選択(今回はTimeStamp)
    "ChunkSelector”Nodeで、”TimeStamp”を選択
  3. Chunk Enableを有効にする
    ”ChunkEnable”NodeをTrueに設定

3.のChunkEnableは個々のChunkData毎に設定するので、
複数のChunkDataを取得したい場合は、その数だけ2.と3.が必要です。

ちなみに今回のカメラでは、下記のChunkDataに対応していました。

f:id:mengineer:20171009133318p:plain

また今回のカメラの総画素数は、幅2464×高さ2056 = 5065984 [Pixel]、
PixelFormatが8bit時、PayLoadSizeも同じく5065984 [Byte]になりますが、
ChunkDataを有効にすると、その分PayLoadSizeも大きくなりました。

上記設定後、5065984 → 5065992 に変わったので、差の24バイト分に
ChunkDataが入って(画像の後ろにくっついて)来るわけですね。

ChunkDataを取得する

テクニカルノートを見ると、1)コールバック方式と2)エキスパート方式が
載っていましたが、今回は簡単そうなコールバック方式を使いました。

要はSDK側でChunkData(今回だと上記の24バイトの部分)をバラして、
通常のNodeと同じようにChunkDataのNodeに割り振ってくれます。

あとは、そのNodeを読むだけです、ほんと簡単ですね。

Nodeの読み書きは、下記ネタを参考にして下さい。

mengineer.hatenablog.com

ImageInfoにもTimeStamp?

では早速サンプルソフトを、と行くところですが、今回はもうひとつ。

いつものvoid HandleImage(ref Jai_FactoryWrapper.ImageInfo ImageInfo)で
ImageInfoにも”TimeStamp”というAttributesを発見しました。

下記はJAISDKマニュアルより抜粋

f:id:mengineer:20171009140022p:plain

これだとChunkData非対応のカメラでも関係無く、TimeStampが得られるわけです、
ChunkDataのTimeStampと何が違うねん? というのが単純な疑問。

サンプルソフト

というわけで、サンプルソフトではChunkDataで出てくるTimeStampの値と、
ImageInfoのTimeStampの値、両方を取得するようにしました。

両者とも文字列に変換し、tab区切りで並べてクリップボードにコピーします、
ソースファイルは下記参照。

JAISDK TimeStamp取得(ChunkDataとImageInfo)

77~94行目 ChunkData、TimeStampを有効にしています。

277~286行目 ChunkDataのTimeStampを取得し、文字列に変換しています。

289~290行目 ImageInfoの方のTimeStampを取得し、文字列に変換しています。

実行結果は、こんな感じになりました。(クリップボードExcelに貼付)
Cは検証用に追加した列で、AとBの差を計算したもの。

f:id:mengineer:20171009141436p:plain

結局、両方のTimeStampは全く同じ値になっていることが判りました。

ChunkDataの方は、カメラ自身が生成して付加するTimeStampなのに対し、
ImageInfoの方は、SDKが画像取込後に付加するTimeStampだろうし(推測です)、
両者に微妙に差が出るのでは?と予想していましたが、全然ハズレでした。

まとめ

・ChunkDataも(設定さえしておけば)、通常のNodeと同じ手法で読める。
・実はImageInfoにもChunkDataみたいな属性データが付いている、
 TimeStampとかOffsetX, OffsetY など。
・ChunkDataのTimeStampともImageInfoのTimeStampは同じ値が得られた。

本題のChunkDataの取得方法は判ったのですが、ImageInfoにも似た項目有り、
じゃあChunkDataの必要性って何やねん?(ImageInfoから引っ張れば済むのでは?)

という新たな疑問が残りました、まだまだ奥が深そうです、ChunkData。