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

권장 사례#

이 장에서는 프로덕션 환경에서 안정적이고 효율적이며 유지 관리하기 쉬운 pypylon 애플리케이션을 구축하기 위한 검증된 권장 사항을 요약합니다.

리소스 관리#

카메라 리소스가 올바르게 획득되고 해제되는지 항상 확인하세요.

with pylon.InstantCamera(pylon.FirstFound) as camera:
    # use camera

이점:

  • 자동 정리
  • 예외 안전성
  • 리소스 누수 방지

장치 식별#

디바이스 인덱스는 안정적이지 않으므로 절대 의존하지 마세요.

devices[0]

대신 고유 식별자를 사용하세요.

  • 일련번호
  • 사용자 정의 이름

자세한 내용은 Discovering and Selecting a Camera를 참조하십시오.

성능 최적화#

적절한 Grab Strategy 사용#

  • LatestImageOnly → 낮은 지연 시간
  • OneByOne → 완전한 처리

소스에서 데이터 줄이기#

  • ROI를 지정합니다.
  • 해상도를 낮춥니다.
  • 가능한 경우 프레임 레이트를 낮춥니다.

불필요한 복사 피하기#

  • 필요한 경우에만 복사합니다.
  • 가능하면 버퍼를 재사용합니다.

스레딩 디자인#

획득과 처리 분리#

Camera → Queue → Processing

이점:

  • 더 나은 CPU 활용률
  • 획득 차단 방지

Producer–Consumer 패턴 사용#

  • 획득 스레드가 이미지를 푸시합니다.
  • 처리 스레드가 이를 소비합니다.

스레드 세이프 큐 사용#

import queue
q = queue.Queue()

다단계 파이프라인#

복잡한 애플리케이션을 파이프라인으로 구조화합니다.

Grab → Preprocess → Analyze → Output

가이드라인:

  • 각 단계에는 하나의 책임이 있습니다.
  • 큐를 통해 통신합니다.
  • 단계별 독립적인 Scaling을 허용합니다.

Error Handling#

그랩 성공 여부 항상 확인#

if grab_result.GrabSucceeded():
    process(grab_result.Array)
else:
    log_error(grab_result.ErrorDescription)

예외 처리 및 로깅#

try:
    # acquisition code
    pass
except Exception as e:
    log_error(e)

복구 로직 구현#

Error → StopGrabbing → Retry → Continue

종료 전략#

깔끔한 종료 메커니즘 구현:

  • 사용 threading.Event.
  • 타임아웃 없는 차단 호출을 피합니다.
  • 획득을 명시적으로 중지합니다.
stop_event.set()
camera.StopGrabbing()

OpenCV 통합 규칙#

  • 실행: imshow() 메인 스레드에서만.
  • 작업자 스레드에서 GUI를 사용하지 않습니다.

시스템 모니터링#

주요 지표 추적:

  • 프레임 레이트
  • 프로세싱 지연 시간
  • 큐 크기
  • CPU 사용량

구성 관리#

  • 카메라 파라미터를 외부에 저장합니다.
  • 하드코딩된 값을 피하세요.
  • 시작 시 설정을 유효성 검사합니다.

테스트 권장 사항#

  • 실제 하드웨어로 테스트하세요.
  • 부하 조건을 시뮬레이션하세요.
  • 복구 동작을 확인하세요.

일반적인 문제점#

  • 해제 후 이미지 버퍼 사용
  • 무기한 큐 차단
  • 동기화 요구사항 무시
  • UI 스레드와 워커 스레드 혼용

Mental Model#

Reliable system = correct architecture + error handling + performance tuning

주요 내용 요약#

  • 처음부터 안정성을 고려하여 설계하세요.
  • 관심사를 분리하세요(취득 대 프로세싱).
  • 모든 외부 상호작용을 유효성 검사합니다.
  • 오류 발생 및 복구 계획을 세우세요.