Basler pylon API를 하나의 C++ 클래스 인터페이스로 간단히 다루기 위한 프로젝트입니다.
pylon API에 익숙하지 않은 사용자도 빠르게 카메라 제어를 시작할 수 있도록 설계되었습니다.
Warning
본 프로젝트는 여러분의 애플리케이션에 정확히 맞도록 설계되지 않았으며, 이에 대한 보증을 제공하지 않습니다.
통합 전/후로 코드 및 설정을 검토하여 상황에 맞게 수정하십시오.
Note
다양한 이벤트/로그를 자세히 출력합니다. 이는 성능 저하를 유발할 수 있으니 운영환경에서는 로그 레벨/출력 빈도를 조정하는 것을 권장합니다.
GitHub 페이지 상단의 <> Code 버튼에서 ZIP 다운로드가 가능하며, Git을 사용한다면 submodule로 추가할 수 있습니다.
git submodule add https://github.com/BaslerKR/Camera.git
git submodule update프로젝트 내 CMakeLists.txt를 참고하여 여러분의 CMake 구성에 통합할 수 있습니다.
예: 해당 디렉토리를 리포지토리 내부에 두고 아래처럼 추가:
# 예시: 프로젝트 루트 CMakeLists.txt에서
add_subdirectory(Camera/C++)
target_link_libraries(${PROJECT_NAME} PUBLIC Camera)#include "CameraSystem.h"
int main() {
CameraSystem system;
system.updateCameraList();
auto camera = system.addCamera(); // 보유 카메라 중 하나를 시스템에 추가
// 카메라 연결
// cameraName = "" -> 첫번째 검색된 카메라
// cameraName = "Basler acA1300-60gm SERIALNUMBER" -> 특정 카메라의 Freindly name
camera->open(std::string cameraName);
// 촬영
// frameCnt = 0 -> 연속 촬영
// frameCnt = NUM -> 정해진 수 촬영
camera->grab(size_t frameCnt);
// 이미지 프레임 수신 콜백
camera->onGrabbed([&](const CPylonImage& pylonImage, size_t frameCnt) {
// 여기서 사용자의 이미지 처리 절차 수행
convertPylonImageToYourFormat(pylonImage);
doProcessingYourWay();
// 처리 완료 후 다음 프레임 수신 허가
camera->ready();
});
// 카메라 상태 변경 콜백
camera->onCameraStatus([&](Camera::Status status, bool on) {
// Camera::Status::GrabbingStatus: 촬영 중이면 on=true, 정지로 전환 시 false
// Camera::Status::ConnectionStatus: 연결 시 on=true, 연결 해제 시 false
});
// 파라미터 변경/정보 전달 콜백
camera->onNodeUpdated([&](GenApi::INode* node) {
// 상세 사용법은 Basler 공식 문서 참조
// 또는 본 프로젝트의 Utility/Qt/QCameraWidget.h 참고
});
// ...
camera->stop();
return 0;
}모든 카메라들은 CameraSystemClass에서 관리됩니다.
연결에 필요한 카메라 개수만큼 아래의 코드로 Camera를 생성합니다.
CameraSystem system;
system.addCamera();CameraSystem클래스를 생성한 후에는 명시적으로 카메라 리스트를 업데이트 합니다.
system.updateCameraList();또는 프로그램 실행 후 카메라의 연결 상태가 바뀐 경우(추가, 제거 등) Camera클래스에서 아래 함수를 호출하여 리스트를 업데이트할 수 있습니다.
// auto camera = system.addCamera(); 이미 선언되어 있는 경우에는 제외
camera->getUpdatedCameraList();// auto camera = system.addCamera(); 이미 선언되어 있는 경우에는 제외
// 카메라의 FriendlyName을 매개변수로 입력합니다.
camera.open("Basler acA1300-60gm (24070434)");
// 또는 시스템에 연결된 아무 카메라나 연결하고자 하는 경우
camera.open();// 카메라 연결 후
// 연속 취득 모드 (Continuous Grab)
camera.grab();
// 또는 일정한 프레임 수 획득 (예로 10장)
camera.grab(10);
// 카메라 동작 정지
camera.stop();
onGrabbed
새 이미지 프레임을 수신하면 호출됩니다. 내부에서 이미지 변환/처리 후camera->ready()를 호출해 다음 프레임 준비를 알립니다.onCameraStatus
연결/촬영 상태 변경 시 호출됩니다.GrabbingStatus: 촬영 중true, 정지 시falseConnectionStatus: 연결됨true, 해제됨false
onNodeUpdated
파라미터 변경 또는 관련 정보 전달 시 호출됩니다. 자세한 노드/GenApi 사용은 Basler 공식 문서 또는 프로젝트 내Utility/Qt/QCameraWidget.h를 참고하세요.
본 프로젝트는 지속적으로 업데이트되지만 보증하지 않습니다.
문의/버그/제안은 이 저장소의 Issues에 등록할 수 있습니다.