メインコンテンツまでスキップ
バージョン: v24.05

BBでカメラを制御する

このチュートリアルでは、1つのカメラ画像を表示する前のチュートリアル複数のカメラを使用するに基づいて、ion-kitでGainおよびExposure timeを手動で設定する方法を学びます。

BBを用いずにGainやExposureTimeなどのカメラ情報を変更するためには、デバイス情報へのアクセスと設定arv-tool-0.8 を参照してください。

前提条件

  • ionpy
  • numpy
  • OpenCV
pip3 install -U pip
pip3 install opencv-python
pip3 install numpy
pip3 install ion-python==1.8.10

チュートリアル

デバイス情報の取得

ionpyを使用して画像を表示するには、デバイスの以下の情報を取得する必要があります。

  • 高さ
  • ピクセルフォーマット

前回のチュートリアルまたは arv-tool-0.8 がこれらの値を取得するのに役立ちます。

パイプラインの構築

BBの構造は1台のカメラ画像を表示するチュートリアルおよび複数のカメラ画像を表示するチュートリアルと同じですが、GainおよびExposureTimeの設定を有効にするためにはいくつか小さな変更が必要です。

このチュートリアルでは、enable_controltrueに設定することでGainおよびExposureTimeを手動で設定します。

ポートの入力は動的で、つまり各実行ごとに更新できますが、静的な値をParamを介して文字列で設定できます。たとえば、GainおよびExposureTimeの値は実行ごとに更新されるべきですが、これらの値のキーは静的であるため、次のようにParamで設定できます。

# set params
enable_control = Param('enable_control', 'true')
gain_key = Param('gain_key', 'Gain')
exposure_key = Param('exposure_key', 'ExposureTime')

# set ports
gain_ps = []
exposure_ps = []
for i in range(num_device):
gain_ps.append(Port('gain' + str(i), Type(TypeCode.Float, 64, 1), 0))
exposure_ps.append(Port('exposure' + str(i), Type(TypeCode.Float, 64, 1), 0))

gain_values = []
exposure_values = []

for i in range(num_device):
gain_values.append(40.0)
exposure_values.append(100.0)

# add enable_control
node = builder.add(bb_name)\
.set_iport([gain_ps[0], exposure_ps[0]])\
.set_param([num_devices, frame_sync, realtime_display_mode, enable_control, gain_key, exposure_key]) if num_device == 1 \
else builder.add(bb_name)\
.set_iport([gain_ps[0], exposure_ps[0], gain_ps[1], exposure_ps[1]])\
.set_param([num_devices, frame_sync, realtime_display_mode, enable_control, gain_key, exposure_key])

その後、入力値をポートにバインドします。これは出力ポートと出力バッファをバインドするのと類似しています。

# bind gain values and exposuretime vlaues
for i in range(num_device):
gain_ps[i].bind(gain_values[i])
exposure_ps[i].bind(exposure_values[i])

これで、GainおよびExposureTimeが正常に設定されました!

v23.11.01 からの変更点
  • set_portset_iportに名称変更されました。
注意

Gain および ExposureTime はデバイスのゲインと露光時間を制御するためのGenICamのフィーチャキーです。通常、これらはemvaによるSFNC(Standard Features Naming Convention)で設定されていますが、一部のデバイスには異なるキーがあるかもしれません。

その場合、パラメータのキーを変更する必要があります。このページを参照して、利用可能な機能をリストアップする方法を確認してください。

gain_key = Param('gain_key', <デバイスのゲインを制御するフィーチャの名前>)
exposure_key = Param('exposure_key', <露光時間を制御するフィーチャの名前>)

パイプラインの実行

builder.run() を実行してパイプラインを終了します。

各実行で入力ポートの値を更新

前のチュートリアルでは、各実行で単に出力画像を表示していました。今回はGainまたはExposureTimeの値を更新します。次の例は、gain_valuesを更新して再バインドすることで、毎回Gain1.0ずつ増やす方法を示しています。

while(user_input == -1):
gain_values[0] += 1.0
gain_ps[0].bind(gain_values[0])

# Builderを実行
builder.run()
for i in range(num_device):
output_datas[i] *= coef
cv2.imshow("img" + str(i), output_datas[i])
user_input = cv2.waitKeyEx(1)

for ループ後に画像が表示されたウィンドウを破棄することを忘れないでください。

cv2.destroyAllWindows()

完全なコード

このチュートリアルで使用される完全なコードはこちらです。