Triggered Image Acquisition#
트리거 기능이 없으면 카메라가 자유롭게 작동하기 때문에 중요한 순간을 놓칠 수 있습니다. 트리거 기능을 사용하면 외부 이벤트가 카메라를 작동시켜 정확히 적절한 순간에 피사체를 포착합니다.
이를 통해 다음 사항이 보장됩니다:
- 이미지는 현실 세계와 동기화됩니다.
- 측정 결과는 재현 가능합니다.
- 시스템은 결정론적으로 동작한다.
트리거로 사용할 수 있는 외부 이벤트의 예시:
- 특정 위치에 도달하는 이동 물체
- 부품을 감지하는 센서
- 자동화 시스템의 PLC 신호
- 조명 펄스 또는 스트로브 현상
이 시각화 자료는 일반적인 워크플로우를 요약한 것입니다:
셔터 버튼을 누르면 카메라가 노출을 시작합니다. 이 데이터는 센서에서 읽어와 사전 처리된 후 호스트로 전송됩니다. 마지막으로, 이 데이터는 애플리케이션으로 전달됩니다.
대표적인 사용 사례#
다음과 같은 상황에서는 트리거 기반 수집을 사용하십시오:
- 타이밍이 매우 중요합니다. 이미지는 물리적 사건과 정확히 일치해야 합니다. 예를 들어, 고속 선별 작업의 경우입니다.
- 움직임을 정확하게 정지시켜야 합니다. 예를 들어, 컨베이어 벨트 검사 시처럼 빠르게 움직이는 물체를 동일한 위치에서 포착해야 할 때입니다.
- 이 공정은 외부 시스템에 의해 제어됩니다. PLC, 센서, 엔코더 또는 기타 하드웨어가, 예를 들어 로봇 공학 응용 분야에서와 같이, 데이터를 수집할 시점을 결정합니다.
- 결정론적 동작이 필요합니다. 각 트리거는 정의된 타이밍에 따라 정확히 하나의 프레임을 생성해야 합니다(예: 측정 시스템의 경우).
Software Trigger#
소프트웨어 트리거를 사용하면 외부 하드웨어 이벤트 대신 소프트웨어 호출을 통해 노출을 시작할 수 있습니다. 이는 트리거 원인이 하드웨어 이벤트가 아닌 컴퓨팅 시스템의 상태 변화인 경우에 유용합니다. 일반적으로 하드웨어 트리거만큼 정밀하지는 않지만, 대부분의 경우 충분한 성능을 발휘합니다. 가장 큰 장점은 컴퓨팅 시스템의 출력을 카메라에 연결하는 것보다 더 간편하다는 점입니다.
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource .Value = "Software"
camera.ExecuteSoftwareTrigger()
예시: 주기적 소프트웨어 트리거 (1 Hz)#
다음 예제에서는 소프트웨어 트리거를 사용하여 매초마다 이미지 노출을 시작합니다.
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)
Hardware Trigger#
사용 사례에 따라 소프트웨어 트리거가 충분히 정밀하지 않거나, 이미 하드웨어 신호가 준비되어 있는 경우, 하드웨어 트리거를 사용하는 것이 가장 좋은 방법입니다.
이 경우, 카메라 모델에 따라 트리거 입력으로 사용할 수 있는 입력 단자가 하나 이상 제공됩니다. 상승 에지 또는 하강 에지를 사용하여 카메라의 노출 시작과 같은 이벤트를 트리거할 수 있습니다.
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)