mengineer's blog

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

GenICam Harvester 使ってみる その2 USB3カメラ接続

下記ネタの続きです。

mengineer.hatenablog.com

環境構築が出来たので、引き続きUSB3 Visionのカメラを接続してみます。

USB3 カメラ接続確認

https://github.com/genicam/harvesters#using-harvester-coreに簡単なサンプルと
説明が有りましたので、そのまま真似して下記スクリプトを作成しました。

1行目、何はともあれ、Harvesterをimportし、2行目でオブジェクトを定義します。

3行目でGenTL Producerのファイルパスを指定します、
今回はUSB3カメラが対象なので、"JaiUSB3vTL.cti"を指定。

ファイルパスは"/"で区切らないと正常に認識されないので注意して下さい。

4行目でデバイス一覧を更新します、
len(h.device_info_list)で認識されたデバイス数が得られるので、
5行目で表示させています。

7行目で、一つ目のデバイスの情報を表示させています。
(6行目は要らなかったですね)
最後、8行目でオブジェクトをリセットします。

実行するとSpyderのコンソールに下記のように表示され、無事に認識出来ました。 f:id:mengineer:20190507103409p:plain

Nodeアクセスと画像取込確認

先ほどのスクリプトに、7行目以降を追加したものです。

7行目、create_image_acquirerでimage acquirer objectを定義します。

8~9行目、ia.device.node_map.XXXX で、Node名XXXXを指定してアクセス出来ます、
ここではPixelFormatを"BayerRG8"、画像をカラーバー出力に設定しています。

10行目、ia.start_image_acquisition()で、カメラからの画像取込を開始します、
13行目、ia.fetch_buffer()で取り込んだ画像がbufferに入ります。

14行目、buffer.payload.components[0]で、画像をcomponentに取り込みます、
15~19行目で、(念のため)画像の詳細情報を表示させています。

20~21行目、実際の画像データの一部を表示させています、
Harvesterは画像を一次元のNumPy arrayで返してきますので(component)
画像先頭行のカラーバーWhite部分とCyanの部分、4画素を表示させています。

ちなみに以前のeBUSのバッファ参照ネタと同じ、下記のデータ並びですね。 f:id:mengineer:20190430131827p:plain

実行後のSpyderのコンソール表示です、データも合ってそうです。
PixelFormat BayerRG8なので、先頭行のデータはRGRG....の並び
→ カラーバーWhiteは R:222 G:222 , カラーバー Cyanは R:8 G:222
f:id:mengineer:20190507114829p:plain

最後、23行目で取込停止して、24行目でimage acquirer objectを破棄しています、
あと一回だけなのにWhile入れてるのは、While無しだとデータが入ってこない
(20~21行目で0が戻ってくる)場合が有ったからです。

While入れて動かすようにしたら、結果的にですが問題無くなりました、
もっと違う方法が有るのかもしれません。 (pythonも修行中)

PixelFormatを変えてみる

先ほどのScriptで、8行目のPixelFormat指定を”BayerRG10"に変えてみます。

ia.device.node_map.PixelFormat.value = 'BayerRG10'

実行後のSpyderのコンソール表示です、eBUS同様、4倍になっていますね、
→ カラーバーWhiteはR:890 G:890 , カラーバー Cyanは R:32 G:890
f:id:mengineer:20190507120154p:plain

10bit時はNumpyの配列も16bitで戻してくれるようで有り難いです、
ちなみにprint (component.data.dtype)で、dtypeを確認出来ました。

PixelFormat BayerRG8時:uint8
PixelFormat BayerRG10, BayerRG12時:uint16

こうして色々変えて調べたい場合、pythonはお手軽に試せるのが便利ですね。

更にPixelFormat指定を”BayerRG10p"に変えたところ、下記のエラーが出ました。

f:id:mengineer:20190507122027p:plain

と、よくよく調べたら、現状は下記のPixelFormatのみ対応でしたね、残念、
BayerRG10なども有りませんが、BayerRG16と同じ(上位未使用なだけ)なので、
(今回の内容では)使えたのだろうと思います。
f:id:mengineer:20190507122719p:plain

BayerRG10p対応など、今後のバージョンアップに期待!、今回はここまで。