튜토리얼

pylon C++ API: 개발 시간을 획기적으로 단축

pylon C++ API를 사용하면 개발자는 다른 SDK와 비교해 C++ 프로그래밍 시 개발 시간을 최대 80%까지 절감할 수 있습니다. 이 튜토리얼에서는 pylon Viewer에서 몇 줄의 코드만으로 카메라에 접근하고 설정하여 초기 이미지 획득을 빠르게 프로토타이핑하는 방법을 소개합니다. Basler는 설정, 처리 및 최적화를 위한 지원 도구와 샘플 코드를 제공합니다. 또한 동일한 API를 사용하여 완성된 코드를 다른 운영 체제로 쉽게 이식할 수 있습니다.

  • 읽는 시간: 약 19 분

사전 요구사항

pylon C++ API를 빠르게 활용하고 제공되는 예제 및 도구를 효과적으로 사용하기 위해 다음 사항을 확인하십시오.

  • C++에 대한 충분한 지식: API는 기술적으로 난이도가 있으며, C++ 및 객체 지향 프로그래밍에 대한 이해가 필요합니다.

  • pylon 소프트웨어(설치: C++ API, 문서, 프로그래밍 가이드, 도구(예: pylon Viewer) 및 다양한 샘플 프로그램이 포함되어 있습니다.

  • 지원되 운영 체제: pylon은 Windows, Linux, Linux ARM, macOS 등 다양한 플랫폼을 지원하므로 적절한 개발 환경을 구축할 수 있습니다.

  • 호환되는 카메라 하드웨어 접근 권한(선택 사항이지만 권장)): 지원되는 카메라는 실습 및 테스트에 유용하지만, 시작하는 데 반드시 필요하지는 않습니다.

도움말 및 샘플 코드

개발 및 디버깅을 위한 pylon Viewer:

  • 모든 카메라 파라미터와 해당 속성 및 현재 값 표시

  • 컨텍스트 메뉴: 파라미터(Parameter) 마우스 오른쪽 버튼 클릭→ 도움말 보기 → 제품 문서→ 복사 가능한 전체 코드

또한 도움말 메뉴에서 다음 항목을 확인할 수 있습니다.

  • C++ 프로그래머 가이드 – 다양한 프로그래밍 언어 개발을 지원하는 개발 가이드

  • pylon SDK 샘플 매뉴얼: 카메라 파라미터 및 일반적인 사용 사례를 위한 샘플 코드에 대한 상세 설명 제공, 코드의 애플리케이션 통합 지원

카메라 파라미터용 C++ SDK 예제는 빠른 개발 결과를 제공하며, 사용자 애플리케이션에서 재사용할 수 있도록 설계되었습니다.
카메라 파라미터용 C++ SDK 예제는 빠른 개발 결과를 제공하며, 사용자 애플리케이션에서 재사용할 수 있도록 설계되었습니다.

pylon C++ API 아키텍처

pylon C++ API는 여러 모듈로 구성됩니다.

  • pylon Instant Camera Classes: API의 핵심 구성 요소 → 단일 카메라 및 멀티 카메라 시스템(Instant Camera Array Classes)의 카메라 객체 및 기능에 접근

  • Event Handler Classes: 최소한의 코드로 카메라를 구성하고, 획득한 이미지를 처리하며, 카메라 이벤트를 표시

  • GenICam 구현: pylon에 현재 모든 카메라 기능을 표시

  • 전송 계층(Transport Layer): pylon 드라이버와 연결 → 카메라 검색, 카메라 객체 생성

    • 일반 전송 계층 팩토리(Transport Layer Factory)

    • 인터페이스와 관련된 특정 전송 계층(Specific, interface-related Transport Layers)

  • 이미지 처리를 위한 유틸리티 클래스(Utility Classes for working with images) : 한 줄의 코드로 이미지 표시 및 저장, 픽셀 포맷 변환, 비디오 녹화를 위한 인코더 사용 및 이미지 압축 해제

pylon C++ API는 여러 모듈로 구성되어 있습니다
pylon C++ API의 구조

pylon에서 GenICam 기능 사용하기

각 카메라의 기능은 400~500개의 기능을 포함하는 하나 이상의 GenICam XML 파일에 정의되어 있습니다.

카메라를 열면 pylon은 이러한 XML 파일을 자동으로 PC에 다운로드하고, 이를 기반으로 feature map(INodeMap)을 동적으로 생성합니다. 이 맵은 카메라가 지원하는 모든 기능에 대해 구조화되고 표준화된 접근 방식을 제공합니다.

Instant Camera Classes를 통한 중앙 집중식 카메라 접근

이 두 가지 카메라 클래스를 사용하면 카메라 객체를 통해 이미지 획득, 카메라 파라미터 설정, 카메라 연결 및 버퍼 처리 기능에 접근할 수 있습니다. 이를 위해 별도의 파라미터를 설정할 필요가 없습니다. 단 한 줄의 코드만으로 첫 번째 이미지를 획득할 수 있습니다. 멀티 카메라 시스템은 단일 카메라 배열 객체(CInstantCameraArray)를 통해 지원됩니다.

CInstantCamera

  • GenICam을 기반으로 하는 완전한 범용 클래스, pylon Viewer의 기반 클래스

  • 특정 카메라 인터페이스 또는 파라미터에 대한 정보를 포함하지 않음

  • 카메라 파라미터는 동적 INodeMap을 통해 접근

  • 모든 카메라, 인터페이스 및 파라미터와 호환

장점:pylon 업데이트 횟수가 적음, 새로운 인터페이스 또는 카메라 유형에 대해 높은 미래 호환성 제공

단점: 프로그래밍이 더 복잡하며, 단기 개발 비용이 더 높음

CBaslerUniversalInstantCamera

  • 모든 pylon 릴리스 시 생성 및 업데이트됨 → 모든 Basler 카메라의 최신 GenICam XML 파일 기반

  • 최신 Basler 카메라, 인터페이스 및 파라미터를 인식하고 지원

  • 클래스를 통한 네이티브 파라미터 접근 지원

  • 정적 API(카메라 파라미터용 정적 멤버) 및 IDE 자동 완성을 통해 보다 간편한 카메라 설정 가능

장점: 파라미터에 직접 접근할 수 있어 프로토타이핑 및 카메라 설정이 더 쉽고 빠름, 개발 노력 감소

단점: 새로운 기능 사용을 위해 정기적인 pylon 업데이트 필요

첫 이미지 획득을 위한 코드 예제

영상에서는 소수의 코드만으로 카메라 및 멀티 카메라 시스템의 이미지 획득을 설정하는 방법을 소개합니다.

• 카메라 검색, 연결 및 파라미터 설정
• 이미지 버퍼 자동 관리
• 하나의 카메라 객체를 통한 다중 카메라 제어

추가 정보와 다양한 코드 예제는 C++ 프로그래머 가이드에서 확인할 수 있습니다.

카메라 검색을 위한 Transport Layer

범용 Transport Layer 및 특정 Transport Layer를 사용하여 카메라를 검색하고 카메라 객체를 생성할 수 있습니다. 카메라 파라미터에 접근하려면 위에서 설명한 두 가지 Instant Camera 클래스를 통해 두 가지 방법을 사용할 수 있습니다.

전송 계층 팩토리(CTlFactory)

  • 일반 진입점

  • 인터페이스와 관계없이 카메라 검색 가능

  • 특정 Transport Layer 생성

  • pylon Device 형태의 카메라 객체 생성

전송 계층 (ITransportLayer)

  • 인터페이스별 전송 계층 (예: GigE Vision)

  • 특정 인터페이스에 대한 카메라 검색

  • 기존 Transport Layer용 pylon Device 형태의 카메라 객체 생성

  • 인터페이스별 파라미터 조회 가능 (예: GigE Action Command)

카메라 검색을 위한 샘플 코드

이 영상에서는 범용 및 특정 Transport Layer를 모두 사용하여, 몇 줄의 코드만으로 다양한 방식으로 카메라를 검색하고 카메라 객체를 생성하는 방법을 알아봅니다.

또한 IP 주소(GigE), 사용자 ID 또는 일련번호를 기준으로 카메라를 열거할 수도 있습니다.

자세한 정보 및 코드 예제는 C++ Programmer's Guide를 참조하십시오.

범용 파라미터 접근
(CInstantCamera)

  • INodeMap을 로드하고 이를 기반으로 노드(즉, 카메라 파라미터)를 생성

  • 새로운 인터페이스와 기능을 통합할 때 유연하고 미래에도 대응할 수 있음

  • 매개변수 정보 및 속성을 찾는 데 필요한 자체적인 노력

  • 내장 헬퍼 함수를 통해 작성해야 하는 소스 코드 양 감소

네이티브 파라미터 접근
(CBaslerUniversalInstantCamera)

  • 일반적으로 사용되는 카메라 파라미터에 직접 접근 가능 (먼저 카메라를 열어야 함)

  • INodeMap 생성 불필요

  • 빠르고 간편하게 시작 가능

카메라 파라미터를 위한 샘플 코드

이 동영상에서는 예제 코드를 통해 일반적 방식과 네이티브 방식을 사용하여 카메라 파라미터에 접근하는 방법을 설명합니다.

자세한 정보 및 코드 예제는 C++ Programmer's Guide를 참조하십시오.

이벤트 핸들러 및 유틸리티 클래스

이벤트 핸들러는 최소한의 코드로 카메라를 설정하고, 획득한 이미지를 처리하며, 카메라 이벤트를 표시하는 데 사용됩니다.

유틸리티 클래스는 다양한 작업을 수행합니다. 이 영상에서는 그중 세 가지를 소개합니다.

이벤트 핸들러 클래스

Instant Camera 클래스에는 세 개의 미리 정의된 이벤트 핸들러 클래스가 포함되어 있습니다.

  • 구성 핸들러: 카메라 설정 수행 (예: 이미지 획득 또는 트리거 모드)
    (4가지 설정이 사전 구성됨: 단일 프레임 이미지 획득, 연속 이미지 획득, 소프트웨어 트리거, GigE Action Command)

  • 이미지 이벤트 핸들러: 획득한 이미지 처리

  • 카메라 이벤트 핸들러: 카메라 이벤트 표시 (예: 노출 종료)

이 영상에서는 몇 줄의 코드만으로 카메라를 성공적으로 설정하는 방법을 보여줍니다.

Configuration Handler는 유사한 사용 사례에 재사용할 수 있습니다. 헤더 파일 형태로 제공되므로, 예를 들어 하드웨어 트리거용 Configuration Handler를 만들기 위해 코드를 간단히 복사하고 수정할 수 있습니다.

유틸리티 클래스

CPylonImage

  • 버퍼 자동 관리 (크기, 수명 주기)

  • 자체 버퍼 또는 외부 버퍼 사용 가능

  • 일반적인 이미지 포맷 저장 및 로드 지원 (BMP, TIFF, JPG, PNG, RAW)

  • 2D 이미지 및 관심 영역(ROI)을 손쉽게 편집 가능 (예: 결함 썸네일 생성)

CFeaturePersistence

  • 카메라 설정 전체를 저장하고 다른 카메라에 간편하게 불러올 수 있습니다

CVideoWriter

  • 최소한의 소스 코드로 MPEG-4 비디오 녹화

  • 획득한 이미지(이미지 시퀀스)를 비디오 파일로 저장

이 영상에서는 세 가지 유틸리티 클래스를 소개합니다. 다른 클래스에 대한 정보는 SDK 예제(Help 메뉴에서 접근 가능)를 참조하십시오.

데모: pylon Visual Studio 프로젝트 설정

이 데모에서는 처음부터 pylon Visual Studio 프로젝트를 설정하는 방법을 알아봅니다.

  • 카메라(또는 카메라 에뮬레이션) 검색, 열기 및 설정

  • 단 5분 만에 이미지 획득, 표시 및 저장

C++ Programmer’s Guide(Help 메뉴에서 접근 가능)가 전체 과정을 단계별로 안내합니다.

자세히 보기

어떻게 도와드릴까요?

제품 선택에 대한 조언을 드리고 고객의 ‍어플리케이션에 적합한 솔루션을 찾아드립니다.