C++

설명

C++ SDK는 작업을 간편하게 하기 위해 다음과 같은 세 가지 오픈 소스 라이브러리를 사용합니다.

  1. HTTP/HTTPS 라이브러리 https://github.com/yhirose/cpp-httplib HTTP 요청을 전송하기 위해 사용

  2. JSON for Modern C++ https://github.com/nlohmann/json JSON 문자열을 파싱하기 위해 사용

  3. PNG 인코더 및 디코더 https://github.com/lvandeve/lodepng 이미지 데이터를 저장하기 위해 사용

인터페이스 정의

struct EpicEyeInfo {
    std::string SN;         // 시리얼 번호
    std::string IP;         // 카메라 IP 주소
    std::string model;      // 카메라 모델
    std::string alias;      // 카메라 별칭, Web UI에서 수정 가능
    uint32_t width = 0;     // 이미지 너비
    uint32_t height = 0;    // 이미지 높이
};
함수명 기능 설명 매개변수와 반환값

std::string getSDKVersion()

SDK 버전 가져오기

반환값: SDK 버전 번호(std::string 타입)

bool getInfo(std::string ip, EpicEyeInfo &info)

카메라 정보 가져오기

매개변수:

ip: 카메라 IP 주소

info: 카메라의 상세 정보를 수신할 EpicEyeInfo 객체(너비와 높이 포함)

반환값: 요청 성공 여부를 나타내는 bool 타입

bool triggerFrame(std::string ip, std::string &frameID, bool pointCloud = true)

프레임 촬영 트리거

매개변수:

ip: 카메라 IP 주소

frameID: 촬영 후 반환되는 프레임 ID(std::string 타입)

pointCloud: 포인트 클라우드 데이터를 요청할지 여부를 나타내는 bool 타입

반환값: 요청 성공 여부를 나타내는 bool 타입

bool getImage(std::string ip, std::string frameID, void *imageBuffer, int &pixelByteSize)

frameID를 기반으로 2D 이미지 가져오기

매개변수:

ip: 카메라 IP 주소

frameID: 데이터를 가져올 프레임 ID

imageBuffer: 이미지 데이터를 반환하는 void 포인터

pixelByteSize: 이미지 데이터의 바이트 크기를 수신할 int 타입

반환값: 요청 성공 여부를 나타내는 bool 타입

bool getPointCloud(std::string ip, std::string frameID, float *pointCloudBuffer)

frameID를 기반으로 포인트 클라우드 가져오기(SDK 사용자가 메모리 관리)

매개변수:

ip: 카메라 IP 주소

frameID: 촬영에서 얻은 프레임 ID

pointCloudBuffer: 포인트 클라우드 데이터를 저장할 float 포인터(너비×높이×sizeof(float)×3의 메모리 필요)

반환값: 요청 성공 여부를 나타내는 bool 타입

bool getDepth(std::string ip, std::string frameID, float *depth)

frameID를 기반으로 깊이 맵 가져오기(SDK 사용자가 메모리 관리)

매개변수:

ip: 카메라 IP 주소

frameID: 촬영에서 얻은 프레임 ID

depth: 깊이 맵 데이터를 저장할 float 포인터(너비×높이×sizeof(float)의 메모리 필요)

반환값: 요청 성공 여부를 나타내는 bool 타입

bool getConfig(std::string ip, nlohmann::json &configJson, std::string frameID = "")

frameID를 기반으로 카메라 설정 가져오기, frameID가 빈 문자열 ""이면 최신 설정 반환

매개변수:

ip: 카메라 IP 주소

configJson: 카메라 설정 데이터를 반환하는 nlohmann::json 객체

반환값: 요청 성공 여부를 나타내는 bool 타입

Linux 실행

  1. 종속 패키지: gcc, g++, cmake, make

    Debian 계열 Linux에서 다음 명령으로 설치할 수 있습니다:

    sudo apt install gcc g++ cmake make
  2. 환경이 준비된 후:

    mkdir build && cd build
    cmake .. && make -j12

    컴파일된 라이브러리와 samples 바이너리 파일은 output 폴더에 저장됩니다:

    output/
    ├── bin
    │   ├── CameraConfig
    │   ├── CameraInfo
    │   ├── CameraParameters
    │   ├── EpicEyeCapture
    │   └── SearchCamera
    └── lib
        └── libEpicEyeSDK.a

OpenCV 예제

  1. OpenCV 환경 설치:

    sudo apt install libopencv-dev
  2. 또는 사전 컴파일된 OpenCV 패키지를 다운로드할 수 있습니다: OpenCV 사전 컴파일 패키지 다운로드

    sudo dpkg -i opencv-qytech_4.5.3-5+focal_amd64.deb

Windows 실행

Windows에서 CMake 및 Clang 도구 체인을 사용할 경우 Linux 절차를 참고하십시오.

Visual Studio를 사용할 경우, VsCode에서 cpp 폴더를 직접 열면 됩니다. 외부 종속성이 없으므로 특별한 설정은 필요하지 않습니다.

alt

전체 빌드를 실행:

alt

실행하려는 대상을 선택하여 실행:

alt

OpenCV 예제

샘플 프로젝트에는 EpicEyeCaptureOpencv 프로그램이 포함되어 있으며, Windows 환경에서 OpenCV를 설정해야 합니다.

  1. Opencv 릴리스 페이지에서 해당 버전을 다운로드합니다.

    alt
  2. 프로젝트 디렉토리(epiceyesdk_samples/cpp/samples/EpicEyeCaptureOpencv/thirdparty)에 압축 해제합니다.

    alt
  3. Visual Studio에서 EpicEyeSDK를 구성합니다.

    alt
  4. "빌드" → "모두 다시 빌드"를 클릭하여 OpenCV 라이브러리가 바이너리 출력 폴더로 자동 복사됩니다.

    alt