성능 최적화#
산업용 카메라는 종종 일정하고 매우 높은 프레임 레이트(예: 60~200fps 이상)로 이미지를 생성합니다. 많은 어플리케이션에서 Python, OpenCV, AI 추론 등의 프로세싱 파이프라인은 이 속도를 따라가지 못할 수 있습니다.
이로 인해 다음과 같은 근본적인 불일치가 발생합니다.
Grab Strategy가 없으면 다음 상황 중 하나가 발생합니다.
- 버퍼가 무한정 증가: 불가능
- 버퍼가 임의로 오버플로됨: 바람직하지 않음
Grab Strategy는 부하 발생 시 시스템이 어떻게 동작하는지 정의합니다.
Mental Model#
어플리케이션의 처리 속도가 카메라보다 느리면 큐가 채워지며 상황을 처리할 방법을 결정해야 합니다. 이것이 바로 Grab Strategy가 존재하는 이유입니다.
Grab Strategies#
두 가지 Grab Strategy를 사용할 수 있습니다.
LatestImageOnly#
가장 최근 프레임만 유지됩니다. 어플리케이션이 바쁜 동안 오래된 프레임은 삭제됩니다. 다음 시각 자료는 이를 보여줍니다.
장점:
- 항상 가장 최신 상태를 확인할 수 있습니다.
- 최소한의 지연 시간
단점:
- 프레임 손실
권장 사용 사례:
최신 정보가 필요하고, 프레임 드롭이 허용되며, 지연 시간을 최소화해야 할 때 LatestImageOnly를 사용하십시오. 예시:
- 라이브 디스플레이(GUI)
- 작업자 모니터링
- 실시간 시각화
OneByOne#
모든 프레임이 큐에 대기하고 순서대로 처리됩니다. 의도적으로 프레임이 삭제되지 않습니다. 다음 시각 자료는 이를 보여줍니다.
장점:
- 프레임 손실 없음(분석/레코딩에 이상적)
- 결정론적 처리 순서
단점:
- 처리가 느릴 경우 지연 시간 증가
- 지속적인 과부하 시 버퍼 오버플로 위험
권장 사용 사례:
모든 프레임이 중요하고 결과가 재현 가능해야 하며 처리 속도가 획득 속도와 거의 유사한 경우 OneByOne을 사용하십시오. 예:
- 검사 시스템
- 이미지 레코딩
- 측정 작업
Buffer Configuration#
버퍼는 카메라와 애플리케이션 사이의 임시 저장소 역할을 합니다. 필요에 따라 사용되는 버퍼 수를 조정할 수 있습니다.
버퍼 수를 늘리면 다음과 같은 이점이 있습니다.
- 일시적인 속도 저하를 허용할 수 있습니다.
단점은 다음과 같습니다.
- Memory 사용량이 증가합니다.
- 대기 시간이 증가합니다(즉, 큐가 커집니다).
주요 내용 요약#
“최적의” 전략은 없습니다. 선택은 항상 최신 이미지가 필요한지 아니면 모든 이미지가 필요한지에 따라 달라집니다. 다음 표는 올바른 전략을 선택하는 데 지침이 될 수 있습니다.
| Strategy | 지연 시간 | 프레임 손실 | 결정성 |
|---|---|---|---|
| LatestImageOnly | 낮음 | Yes | 낮음 |
| OneByOne | 높음(느린 경우) | No | 높음 |