[C++]eBUS SDK Connect 예제

조회수 351



Pleora eBUS SDK, eBUS SDK 4.1.6, Teledyne FLIR, GigE Vision, FLIR 카메라 C++ 예제, PvDevice CreateAndConnect, PvStream CreateAndOpen, NegotiatePacketSize, SetStreamDestination, PvPipeline 스트리밍 설정


Teledyne FLIR사에서는 오랫동안 Pleora사의 eBUS SDK를 사용했었습니다.

현재는 자사에서 공급을 하는 Spinnaker SDK로 변경을 하고 있는 추세 입니다.


가장 안정적으로 사용 가능한 개발툴이라 

기본적인 가이드를 아래와 같이 안내를 해드립니다.

그리고 GigE Vision 표준에 따르는 툴이기 때문에

다른 SDK 들도 유사한 구조를 갖고 있습니다.



🔗Git: https://github.com/MDStechCVS/FLIR_CamSDKforCpp/tree/main/Sample/MDS_Camera_Sample

{"payload":{"allShortcutsEnabled":false,"path":"Sample/MDS_Camera_Sample","repo":{"id":681401774,"defaultBranch":"main","name":"FLIR_CamSDKforCpp","ownerLogin":"MDStechCVS","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-08-22T00:09:03.000Z","ownerAvatar":"https://avatars...

github.com


테스트 환경: eBUS SDK 4.1.6

프로그램 설치를 하면 여러가지 샘플 코드들이 같이 설치가 됩니다.

그중에서 Camera FindConnect 예제 코드를 가지고 설명을 드립니다.


예제는 아래와 같은 순서로 연결이 됩니다.

1) Device 객체 생성: 카메라에 대한 등록을 준비하는 과정

2) Connect, Stream 객체 생성: 카메라에 대한 통신 연결, 정보 취득하는 과정

3) Parameter Configuration: 카메라에 대한 연결 설정하는 과정

4) Pipeline 객체 생성: 영상 재생을 위한 스트리밍 통신 채널 설정하는 과정


프로그램을 실행하고 카메라 IP를 입력하면 아래와 같이 

동작을 하는 것을 확인 할 수 있습니다.

Pleora eBUS SDK, eBUS SDK 4.1.6, Teledyne FLIR, GigE Vision, FLIR 카메라 C++ 예제, PvDevice CreateAndConnect, PvStream CreateAndOpen, NegotiatePacketSize, SetStreamDestination, PvPipeline 스트리밍 설정



/*-- Include File --*/ #include <cstdio> #include <stdio.h> #include <iostream> #include <atlstr.h> #include <PvSampleUtils.h> #include <PvDevice.h> #include <PvBuffer.h> #include <PvStream.h> #include <PvStreamGEV.h> #include <PvPipeline.h> #include <PvDeviceGEV.h> #include <PvDeviceInfoGEV.h> /*-- Include File End --*/ #define BUFFER_COUNT            ( 16 ) ============================================================== :카메라 연결 함수 PvDevice* ConnectToDevice(PvDevice* Device, CString strAddress) {    PvResult lResult = -1;    PvString ConnectionID = strAddress.GetBuffer(0); Device = PvDevice::CreateAndConnect(ConnectionID, &lResult); return Device; } ============================================================== :카메라 이미지스트림 오픈 함수 PvStream* OpenStream(PvStream* Stream, CString strAddress) {    PvResult lResult = -1;    PvString ConnectionID = (PvString)strAddress; Stream = PvStream::CreateAndOpen(ConnectionID, &lResult); return Stream; } ============================================================== :카메라 네트워크 설정 함수 (패킷 사이즈, 스트리밍 IP 대상) void ConfigureStream(PvDevice* aDevice, PvStream* aStream) { // GigE Vision 장치인 경우, GigE Vision 특정 스트리밍 파라미터를 설정 CString strLog = _T(""); PvDeviceGEV* lDeviceGEV = dynamic_cast<PvDeviceGEV*>(aDevice); if (lDeviceGEV != nullptr) {    PvStreamGEV* lStreamGEV = static_cast<PvStreamGEV*>(aStream);    // 패킷 크기 협상    lDeviceGEV->NegotiatePacketSize();    // 장치 스트리밍 대상 설정    lDeviceGEV->SetStreamDestination(lStreamGEV->GetLocalIPAddress(), lStreamGEV->GetLocalPort()); } } ============================================================== : eBus Pipeline 객체 생성     카메라 관련 파라미터, 디바이스, 스트리밍등 객체들을 관리한다. PvPipeline* CreatePipeline(PvPipeline* Pipeline, PvDevice* aDevice, PvStream* aStream) {    PvPipeline* lPipeline = nullptr; // PvPipeline 포인터 초기화    if (aDevice != nullptr)    {        uint32_t lSize = aDevice->GetPayloadSize(); // 장치의 페이로드 크기 획득    if (aStream != nullptr)    {        // 스트림이 존재하는 경우 새로운 PvPipeline 생성        lPipeline = new PvPipeline(aStream);    }    else if (aDevice != nullptr)    {        // 스트림이 없는 경우 이미 존재하는 m_Pipeline 활용        Pipeline->SetBufferCount(BUFFER_COUNT);        Pipeline->SetBufferSize(lSize);        lPipeline = Pipeline;    }    if (lPipeline != nullptr)    {        // Pipeline 설정 (BufferCount, BufferSize)        lPipeline->SetBufferCount(BUFFER_COUNT);        lPipeline->SetBufferSize(lSize);    } } return lPipeline; // 생성된 또는 설정된 PvPipeline 포인터 반환 } ============================================================== : 예제 [메인루프], 순차적으로 카메라 관련 객체를 연결, 생성하고 카메라 연결 함수를 호출한다. int main() { PvDevice *Device = nullptr; PvStream *Stream = nullptr; PvPipeline* Pipeline = nullptr; bool bFlag = false; CString strAddress = ""; // 사용자로부터 카메라 IP 입력 받기 std::wcout << L"IP Address : "; std::wstring input; std::getline(std::wcin, input); // CString으로 변환 strAddress = input.c_str(); // 카메라 장치에 연결 Device = ConnectToDevice(Device, strAddress); if (Device != nullptr)    printf("Device Connect = [success]\n");    printf("Device Connect success\\n"); // 카메라 스트림 오픈 Stream = OpenStream(Stream, strAddress); if (Stream != nullptr)    printf("Stream Open = [success]\n");    printf("OpenStream success\\n"); // 카메라 스트림 설정 ConfigureStream(Device, Stream); if (Stream != nullptr && Device != nullptr)    printf("Stream Configure = [success]\n");    printf("ConfigureStream success\\n"); if (Stream != nullptr && Device != nullptr) {    // 카메라 파이프라인 생성    Pipeline = CreatePipeline(Pipeline, Device, Stream);    if(Pipeline != nullptr)    printf("Pipeline Create = [success]\n");    printf("CreatePipeline success\\n");    delete Pipeline;    Pipeline = nullptr; return 0; }








927a1a4afb788.png





Contact us.

블로그 바로가기
www.blog.naver.com/mdstec_flir

블로그 방문하기

MDS 교육 수강하기
상반기/ 하반기 진행시 오픈 예정

수강신청 바로가기


@MDS Tech Inc. All Rights Reserved.

Youtube↖︎

Instagram↖︎

Facebook↖︎

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승


©MDS Tech Inc. All Rights Reserved.

주소 : 13493 경기도 성남시 분당구 대왕판교로 644번길 49 DTC타워 9층

TEL: 031-627-3000 FAX:031-627-3008

사업자등록번호 : 117-81-22859대표자 : 이창열, 이정승

©MDS Tech Inc. All Rights Reserved.