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

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에서 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 메뉴에서 접근 가능)가 전체 과정을 단계별로 안내합니다.



