성능 최적화#
산업용 카메라는 종종 일정한 속도로, 때로는 매우 높은 속도(예: 60~200fps 이상)로 이미지를 생성합니다. 많은 응용 분야에서 Python, OpenCV, AI 추론 등과 같은 처리 파이프라인은 이러한 속도를 따라잡지 못합니다.
이로 인해 근본적인 불일치가 발생합니다:
적절한 대응 전략이 없다면, 다음과 같은 상황 중 하나가 발생하게 될 것입니다:
- 버퍼가 무한정 커진다: 불가능함
- 버퍼 오버플로가 무작위로 발생함: 바람직하지 않음
그랩 전략은 부하가 가해질 때 시스템이 어떻게 동작할지를 정의합니다.
정신 모델#
애플리케이션이 카메라보다 처리 속도가 느리면 대기열이 가득 차게 되며, 이 상황을 어떻게 처리할지 결정해야 합니다. 이것이 바로 ‘그랩 전략’이 필요한 이유입니다.
그랩 전략#
두 가지 그랩 전략이 있습니다.
최신 이미지만#
가장 최근의 프레임만 유지됩니다. 애플리케이션이 바쁜 동안에는 이전 프레임들은 제거됩니다. 다음 시각화 자료가 이를 보여줍니다:
장점:
- 항상 가장 최근의 상태를 확인할 수 있습니다.
- 최소 지연 시간
단점:
- 프레임 손실
대표적인 사용 사례:
최신 정보만 필요하고, 프레임 드롭이 허용되며, 지연 시간을 최소화해야 할 때는 LatestImageOnly를 사용하십시오. 예시:
- 실시간 표시 (GUI)
- 운영자 모니터링
- 실시간 시각화
OneByOne#
모든 프레임은 대기열에 추가되어 순서대로 처리됩니다. 의도적으로 누락되는 프레임은 없습니다. 다음 시각화 자료에서 이를 확인할 수 있습니다:
장점:
- 프레임 손실 없음 (분석/기록에 이상적)
- 결정론적 처리 순서
단점:
- 처리 속도가 느리면 지연 시간이 길어집니다
- 지속적인 과부하 발생 시 버퍼 오버플로우 위험
대표적인 사용 사례:
모든 프레임이 중요하고, 결과가 재현 가능해야 하며, 처리 속도가 획득 속도와 거의 비슷한 경우 OneByOne을 사용하십시오. 예시:
- 검사 시스템
- 이미지 기록
- 측정 과제
버퍼 구성#
버퍼는 카메라와 애플리케이션 사이의 임시 저장소 역할을 합니다. 필요에 따라 사용되는 버퍼의 수를 조정할 수 있습니다.
버퍼의 수를 늘리면 다음과 같은 장점이 있습니다:
- 일시적인 속도 저하는 허용됩니다.
단점은 다음과 같습니다:
- 메모리 사용량이 증가합니다.
- 지연 시간이 증가하면, 즉 대기열이 길어집니다.
주요 핵심 사항#
“최상의” 전략이라는 것은 없습니다. 어떤 전략을 선택할지는 항상 최신 이미지가 필요한지, 아니면 모든 이미지가 필요한지에 따라 달라집니다. 다음 표는 올바른 전략을 선택하는 데 참고가 될 수 있습니다.
| 전략 | Latency | 프레임 손실 | 결정론 |
|---|---|---|---|
| 최신 이미지만 | 낮음 | 예 | 낮음 |
| OneByOne | 높음 (비록 느리긴 하지만) | 아니요 | 높음 |