半年ほど前の下記ネタの続きです。 (過去記事一覧はこちらから)
この時はChunkDataがどんなものか?、JAISDK上でどう参照出来るか?等々、
取っ掛かりの部分でしたが、今回は実際のChunkDataを取得するやり方について。
ChunkDataには色々有りますが、今回はその中のTimeStampを取得してみます。
下記、JAIのWEBサイトのテクニカルインフォメーションの中に
"Chunk Dataの使い方”というpdf記事が有りましたので、参考にしました。
ChunkDataを有効にする
下記の流れで設定します。(併せて上記pdfも参照して下さい)
- Chunk Dataを有効にする
”ChunkModeActive”NodeをTrueに設定 - 参照したいChunkDataを選択(今回はTimeStamp)
"ChunkSelector”Nodeで、”TimeStamp”を選択 - Chunk Enableを有効にする
”ChunkEnable”NodeをTrueに設定
3.のChunkEnableは個々のChunkData毎に設定するので、
複数のChunkDataを取得したい場合は、その数だけ2.と3.が必要です。
ちなみに今回のカメラでは、下記のChunkDataに対応していました。
また今回のカメラの総画素数は、幅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の読み書きは、下記ネタを参考にして下さい。
ImageInfoにもTimeStamp?
では早速サンプルソフトを、と行くところですが、今回はもうひとつ。
いつものvoid HandleImage(ref Jai_FactoryWrapper.ImageInfo ImageInfo)で
ImageInfoにも”TimeStamp”というAttributesを発見しました。
下記はJAISDKマニュアルより抜粋
これだと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の差を計算したもの。
結局、両方のTimeStampは全く同じ値になっていることが判りました。
ChunkDataの方は、カメラ自身が生成して付加するTimeStampなのに対し、
ImageInfoの方は、SDKが画像取込後に付加するTimeStampだろうし(推測です)、
両者に微妙に差が出るのでは?と予想していましたが、全然ハズレでした。
まとめ
・ChunkDataも(設定さえしておけば)、通常のNodeと同じ手法で読める。
・実はImageInfoにもChunkDataみたいな属性データが付いている、
TimeStampとかOffsetX, OffsetY など。
・ChunkDataのTimeStampともImageInfoのTimeStampは同じ値が得られた。
本題のChunkDataの取得方法は判ったのですが、ImageInfoにも似た項目有り、
じゃあChunkDataの必要性って何やねん?(ImageInfoから引っ張れば済むのでは?)
という新たな疑問が残りました、まだまだ奥が深そうです、ChunkData。