콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

성능 최적화#

이 토픽에서는 Grab Strategy의 개념과 그 중요성에 대해 설명합니다.

산업용 카메라는 종종 일정하고 매우 높은 프레임 레이트(예: 60~200fps 이상)로 이미지를 생성합니다. 많은 어플리케이션에서 Python, OpenCV, AI 추론 등의 프로세싱 파이프라인은 이 속도를 따라가지 못할 수 있습니다.

이로 인해 다음과 같은 근본적인 불일치가 발생합니다.

Camera (Producer) → fast
Application (Consumer) → slower

Grab Strategy가 없으면 다음 상황 중 하나가 발생합니다.

  • 버퍼가 무한정 증가: 불가능
  • 버퍼가 임의로 오버플로됨: 바람직하지 않음

Grab Strategy는 부하 발생 시 시스템이 어떻게 동작하는지 정의합니다.

Mental Model#

Camera → Frame Stream → Buffer Queue → RetrieveResult() → Application

어플리케이션의 처리 속도가 카메라보다 느리면 큐가 채워지며 상황을 처리할 방법을 결정해야 합니다. 이것이 바로 Grab Strategy가 존재하는 이유입니다.

Grab Strategies#

두 가지 Grab Strategy를 사용할 수 있습니다.

LatestImageOnly#

가장 최근 프레임만 유지됩니다. 어플리케이션이 바쁜 동안 오래된 프레임은 삭제됩니다. 다음 시각 자료는 이를 보여줍니다.

Camera:    F1 → F2 → F3 → F4
App reads:        →    F4
Dropped:   F1, F2, F3

장점:

  • 항상 가장 최신 상태를 확인할 수 있습니다.
  • 최소한의 지연 시간

단점:

  • 프레임 손실

권장 사용 사례:

최신 정보가 필요하고, 프레임 드롭이 허용되며, 지연 시간을 최소화해야 할 때 LatestImageOnly를 사용하십시오. 예시:

  • 라이브 디스플레이(GUI)
  • 작업자 모니터링
  • 실시간 시각화
OneByOne#

모든 프레임이 큐에 대기하고 순서대로 처리됩니다. 의도적으로 프레임이 삭제되지 않습니다. 다음 시각 자료는 이를 보여줍니다.

Camera:    F1 → F2 → F3 → F4
App reads: F1 → F2 → F3 → F4

장점:

  • 프레임 손실 없음(분석/레코딩에 이상적)
  • 결정론적 처리 순서

단점:

  • 처리가 느릴 경우 지연 시간 증가
  • 지속적인 과부하 시 버퍼 오버플로 위험

권장 사용 사례:

모든 프레임이 중요하고 결과가 재현 가능해야 하며 처리 속도가 획득 속도와 거의 유사한 경우 OneByOne을 사용하십시오. 예:

  • 검사 시스템
  • 이미지 레코딩
  • 측정 작업

Buffer Configuration#

버퍼는 카메라와 애플리케이션 사이의 임시 저장소 역할을 합니다. 필요에 따라 사용되는 버퍼 수를 조정할 수 있습니다.

camera.MaxNumBuffer.Value = 20

버퍼 수를 늘리면 다음과 같은 이점이 있습니다.

  • 일시적인 속도 저하를 허용할 수 있습니다.

단점은 다음과 같습니다.

  • Memory 사용량이 증가합니다.
  • 대기 시간이 증가합니다(즉, 큐가 커집니다).

주요 내용 요약#

“최적의” 전략은 없습니다. 선택은 항상 최신 이미지가 필요한지 아니면 모든 이미지가 필요한지에 따라 달라집니다. 다음 표는 올바른 전략을 선택하는 데 지침이 될 수 있습니다.

Strategy 지연 시간 프레임 손실 결정성
LatestImageOnly 낮음 Yes 낮음
OneByOne 높음(느린 경우) No 높음