トリガー画像取得#
トリガーを使用しない場合、カメラはフリーランで動作し、フレームが適切なタイミングを逃す可能性があります。トリガーを使用すると、外部イベントによってカメラがトリガーされ、まさに適切なタイミングでオブジェクトがキャプチャされます。
これにより、以下のことが保証されます。
- 画像が現実世界と同期される。
- 測定の再現性が確保される。
- システムが決定論的に動作する。
トリガーとして使用できる外部イベントの例:
- 移動体が特定の位置に達する
- センサーがワークを検出する
- オートメーションシステム内のPLC信号
- 照明パルスまたはストロボイベント
この図は、一般的なワークフローをまとめたものです。
トリガーにより、カメラが露光を開始します。これはセンサーから読み出され、前処理が行われた後、ホストに転送されます。最後に、アプリケーションへと渡されます。
代表的なユースケース#
次のような状況では、トリガー取り込みを使用します。
- タイミングが重要な場合:高速選別など、画像が物理的イベントと正確に対応している必要があります。
- 動きを正確に静止させる必要がある場合:コンベアベルトの検査など、高速で移動するオブジェクトを同じ位置でキャプチャする場合です。
- 外部システムがプロセスを制御する場合:ロボットアプリケーションなど、PLC、センサー、エンコーダー、またはその他のハードウェアによってキャプチャのタイミングが定義されます。
- 決定論的な動作が必要な場合:測定システムなど、各トリガーによって、定義されたタイミングを持つ正確に1つのフレームが生成されます。
ソフトウェアトリガー#
ソフトウェアトリガーを使用すると、外部のハードウェアイベントの代わりに、ソフトウェアコールを介して露光を開始できます。これは、ソースがハードウェアイベントではなくコンピューティングシステムの状態変化である場合に便利です。通常、これはハードウェアトリガーほど正確ではありませんが、多くの場合で十分です。主な利点は、コンピューティングシステムの出力をカメラに接続するよりも簡単であることです。
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource .Value = "Software"
camera.ExecuteSoftwareTrigger()
例:定期的なソフトウェアトリガー(1 Hz)#
次の例では、ソフトウェアトリガーを使用して、1秒ごとに画像の露光を開始します。
import time
from pypylon import pylon
def process(image):
h, w = image.shape[:2]
center_pixel = image[h // 2, w // 2]
print("Center pixel:", center_pixel)
with pylon.InstantCamera(pylon.FirstFound) as camera:
# Open is necessary before accessing the parameters.
camera.Open()
# Enable trigger mode.
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource.Value = "Software"
camera.StartGrabbing(pylon.GrabStrategy_OneByOne)
while camera.IsGrabbing():
camera.ExecuteSoftwareTrigger()
with camera.RetrieveResult(2000) as grab_result:
if grab_result.GrabSucceeded():
image = grab_result.Array
process(image)
else:
print("Grab failed:", grab_result.ErrorDescription)
time.sleep(1.0)
ハードウェアトリガー#
ソフトウェアトリガーの精度が用途に対して不十分である場合、またはハードウェア信号がすでに利用可能な場合は、ハードウェアトリガーを使用するのが最適なオプションです。
この場合、カメラモデルに応じて、トリガー入力として機能する1つ以上の入力が利用可能です。立ち上がりエッジまたは立ち下がりエッジを使用して、カメラの露光開始などのイベントをトリガーできます。
camera.TriggerSource.Value = "Line1"
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerActivation.Value = "RisingEdge"
例:ハードウェアトリガー取り込み#
以下の例では、検出された最初のカメラの入力ライン1を使用して露光を開始し、中央ピクセルを出力します。
from pypylon import pylon
def process(image):
height, width = image.shape[:2]
center_pixel = image[height // 2, width // 2]
print("Center pixel:", center_pixel)
with pylon.InstantCamera(pylon.FirstFound) as camera:
# Open is necessary before accessing the parameters.
camera.Open()
# Configure hardware trigger
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerActivation.Value = "RisingEdge"
camera.TriggerSource.Value = "Line1"
camera.StartGrabbing(pylon.GrabStrategy_OneByOne)
while camera.IsGrabbing():
with camera.RetrieveResult(5000) as grab_result:
if grab_result.GrabSucceeded():
image = grab_result.Array
process(image)
else:
print("Grab failed:", grab_result.ErrorDescription)