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

빠른 시작#

이 주제는 간단한 워크플로를 통해 pypylon을 시작하는 첫 단계를 안내합니다.

이 글의 목적은 단순히 작동하는 코드를 보여주는 데 그치지 않고, 더 복잡한 상황에서 이 예제 코드를 어떻게 재사용하고 수정하여 적용할 수 있는지 여러분이 파악할 수 있도록 돕는 것입니다.

가장 간단한 형태로, pypylon을 이용한 이미지 획득은 다음 단계를 거칩니다:

  • 카메라 알아보기
  • 카메라 열기
  • 이미지 획득 시작
  • 이미지 가져오기
  • 이미지 처리

다음 예제는 이러한 단계를 보여줍니다. 이 예제에는 다음과 같은 추가적인 장점이 있습니다:

  • 이를 통해 설치가 정상적으로 작동하는지 확인할 수 있습니다.
  • 카메라 연결 상태를 확인할 수 있습니다.
  • 이를 통해 인수 라이프사이클을 이해하는 데 도움이 됩니다.

예:

from pypylon import pylon

with pylon.InstantCamera(pylon.FirstFound) as camera:
    camera.StartGrabbingMax(1)

    with camera.RetrieveResult(5000) as grab_result:
        if grab_result.GrabSucceeded():
            image = grab_result.Array
            print(image.shape)

이 예제를 개별 단계별로 뜯어보겠습니다:

  1. 카메라 생성 및 관리

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

    이 줄은 두 가지 중요한 역할을 합니다:

    • 다음 항목을 선택합니다. 가장 먼저 구할 수 있는 카메라, 전송 계층 팩토리를 사용하여 pylon 장치 객체를 생성하고, 이를 InstantCamera 사용하기 편리한 객체.
    • 사용 with 오류가 발생하더라도 리소스가 자동으로 해제되고 카메라가 올바르게 종료되도록 보장합니다.
  2. 인수 시작

    camera.StartGrabbingMax(1)
    

    이 명령은 카메라가 아직 열려 있지 않은 경우 카메라를 열고, 이미지 획득 엔진을 시작한 다음, 카메라에 다음과 같은 작업을 수행하도록 지시합니다:

    • 정확히 하나의 프레임을 가져옵니다.
    • 그 후 인수를 중단하십시오.

    이는 무한 루프를 방지할 수 있으므로 테스트에 이상적입니다.

    또한 Open 함수를 호출하여 카메라를 미리 열 수 있습니다.

    camera.Open()
    

    초기화 과정은 연결을 설정하고 카메라가 다음 작업을 수행할 수 있도록 준비합니다:

    • 매개변수 설정
    • 인수 시작
  3. 그랩 결과 가져오기

    with camera.RetrieveResult(5000) as grab_result:
    

    이 호출은 다음 두 사건 중 하나가 발생할 때까지 대기합니다:

    • 프레임이 준비되어 있습니다.
      또는
    • 타임아웃(5000 ms)이 경과했습니다.

    내부적으로는 버퍼 큐에서 이미지를 불러오고 있습니다.

  4. 그랩 검증

    if grab_result.GrabSucceeded():
    

    그랩 결과가 반환되더라도, 데이터 수집이 실패했을 수 있습니다(예: 전송 오류). 데이터를 사용하기 전에 항상 성공 여부를 확인하십시오.

  5. 픽셀 데이터의 복사본 생성 (선택 사항)

    Grab 결과는 버퍼 풀의 버퍼를 사용합니다. 다음을 호출할 때 grab_result.Array, 그러면 그랩 결과 버퍼 데이터의 사본을 얻을 수 있습니다. 또는 다음을 사용할 수도 있습니다. GetMemoryView() 또는 GetArrayZeroCopy() 복사하지 않고 데이터에 접근하려면.

    그랩 결과에서 얻은 버퍼는 다음을 벗어나면 무효화됩니다. with ...이기 때문에 차단합니다. grab_result 이 공개되었습니다. 이 픽셀 데이터를 with 블록을 사용하려면 해당 블록의 복사본을 만들어야 합니다. 다음을 사용할 수 있습니다. Array 픽셀 데이터의 복사본을 생성하는 함수.

    image = grab_result.Array
    
  6. 이미지 사용

    print(image.shape)
    

    이는 다음 사실을 확인해 줍니다:

    • 그 이미지가 있습니다.
    • 데이터의 형식이 올바릅니다.

멘탈 모델#

이 시각화 자료는 내부적으로 어떤 일이 일어나는지 보여줍니다.

Camera (hardware)
      ↓
pylon driver + buffers
      ↓
Transport layer (USB/GigE)
      ↓
RetrieveResult()
      ↓
NumPy array (your application)

핵심 개념:

  • 카메라는 비동기적으로 작동합니다 (프레임을 생성하며).
  • 귀하의 파이썬 코드는 프레임을 동기식으로 처리합니다.

버퍼는 그 사이에 위치하여 두 세계(카메라와 애플리케이션)를 분리합니다.

주요 핵심 사항#

  • 항상 확인하세요 GrabSucceeded().
  • 결과 범위를 벗어나거나 캡처 결과를 해제하기 전에 항상 이미지 데이터를 복사해야 합니다. 예를 들어, 다음을 사용하여: Array 함수와 함께 직접 사용할 수 있습니다.
  • 설정하려는 속성을 식별하려면 StartGrabbingMax(1) 간단한 테스트를 위해. 또는 다음을 사용할 수도 있습니다. GrabOne(5000).
    StartGrabbingMax(1) 정확히 하나의 이미지를 가져옵니다. GrabOne(5000) 이미지 하나를 가져오지만 5000 µs 후에 시간 초과가 발생합니다.
  • 설정하려는 속성을 식별하려면 with 자원을 안전하게 처리하기 위해.

이 패턴을 이해했다면, 이를 바탕으로 다음 작업들을 수행할 수 있는 코드를 작성할 수 있습니다: