콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

성능 최적화#

이 주제에서는 그랩 전략이 무엇이며, 왜 중요한지에 대해 설명합니다.

산업용 카메라는 종종 일정한 속도로, 때로는 매우 높은 속도(예: 60~200fps 이상)로 이미지를 생성합니다. 많은 응용 분야에서 Python, OpenCV, AI 추론 등과 같은 처리 파이프라인은 이러한 속도를 따라잡지 못합니다.

이로 인해 근본적인 불일치가 발생합니다:

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

적절한 대응 전략이 없다면, 다음과 같은 상황 중 하나가 발생하게 될 것입니다:

  • 버퍼가 무한정 커진다: 불가능함
  • 버퍼 오버플로가 무작위로 발생함: 바람직하지 않음

그랩 전략은 부하가 가해질 때 시스템이 어떻게 동작할지를 정의합니다.

정신 모델#

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

애플리케이션이 카메라보다 처리 속도가 느리면 대기열이 가득 차게 되며, 이 상황을 어떻게 처리할지 결정해야 합니다. 이것이 바로 ‘그랩 전략’이 필요한 이유입니다.

그랩 전략#

두 가지 그랩 전략이 있습니다.

최신 이미지만#

가장 최근의 프레임만 유지됩니다. 애플리케이션이 바쁜 동안에는 이전 프레임들은 제거됩니다. 다음 시각화 자료가 이를 보여줍니다:

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을 사용하십시오. 예시:

  • 검사 시스템
  • 이미지 기록
  • 측정 과제

버퍼 구성#

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

camera.MaxNumBuffer.Value = 20

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

  • 일시적인 속도 저하는 허용됩니다.

단점은 다음과 같습니다:

  • 메모리 사용량이 증가합니다.
  • 지연 시간이 증가하면, 즉 대기열이 길어집니다.

주요 핵심 사항#

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

전략 Latency 프레임 손실 결정론
최신 이미지만 낮음 예 낮음
OneByOne 높음 (비록 느리긴 하지만) 아니요 높음