下記ネタの続きです。
環境構築が出来たので、引き続き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のコンソールに下記のように表示され、無事に認識出来ました。
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のバッファ参照ネタと同じ、下記のデータ並びですね。
実行後のSpyderのコンソール表示です、データも合ってそうです。
PixelFormat BayerRG8なので、先頭行のデータはRGRG....の並び
→ カラーバーWhiteは R:222 G:222 , カラーバー Cyanは R:8 G:222
最後、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
10bit時はNumpyの配列も16bitで戻してくれるようで有り難いです、
ちなみにprint (component.data.dtype)で、dtypeを確認出来ました。
PixelFormat BayerRG8時:uint8
PixelFormat BayerRG10, BayerRG12時:uint16
こうして色々変えて調べたい場合、pythonはお手軽に試せるのが便利ですね。
更にPixelFormat指定を”BayerRG10p"に変えたところ、下記のエラーが出ました。
と、よくよく調べたら、現状は下記のPixelFormatのみ対応でしたね、残念、
BayerRG10なども有りませんが、BayerRG16と同じ(上位未使用なだけ)なので、
(今回の内容では)使えたのだろうと思います。
BayerRG10p対応など、今後のバージョンアップに期待!、今回はここまで。