diff --git a/include/ClientPublisher.hpp b/include/ClientPublisher.hpp index feeb5dd..ee27ce8 100755 --- a/include/ClientPublisher.hpp +++ b/include/ClientPublisher.hpp @@ -54,8 +54,12 @@ public: ClientPublisher(); ~ClientPublisher(); - // Open camera from stream (IP:port) instead of local input + // Open camera from stream (IP:port) - for network camera streaming bool open(const std::string& ip, int port, Trigger* ref, int sdk_gpu_id); + + // Open local camera (USB/serial/SVO) - backward compatible overload + bool open(sl::InputType input, Trigger* ref, int sdk_gpu_id); + void start(); void stop(); void setStartSVOPosition(unsigned pos); diff --git a/src/ClientPublisher.cpp b/src/ClientPublisher.cpp index 004dff9..3b5552c 100755 --- a/src/ClientPublisher.cpp +++ b/src/ClientPublisher.cpp @@ -57,6 +57,53 @@ bool ClientPublisher::open(const std::string& ip, int port, Trigger* ref, int sd return true; } +bool ClientPublisher::open(sl::InputType input, Trigger* ref, int sdk_gpu_id) { + + p_trigger = ref; + + sl::InitParameters init_parameters; + init_parameters.depth_mode = sl::DEPTH_MODE::NEURAL; + init_parameters.input = input; + init_parameters.coordinate_units = sl::UNIT::METER; + init_parameters.depth_stabilization = 30; + init_parameters.sdk_gpu_id = sdk_gpu_id; + + auto state = zed.open(init_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error opening local camera: " << state << std::endl; + return false; + } + + serial = zed.getCameraInformation().serial_number; + p_trigger->states[serial] = false; + + // in most cases in body tracking setup, the cameras are static + sl::PositionalTrackingParameters positional_tracking_parameters; + positional_tracking_parameters.set_as_static = true; + + state = zed.enablePositionalTracking(positional_tracking_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error enabling positional tracking: " << state << std::endl; + return false; + } + + sl::BodyTrackingParameters body_tracking_parameters; + body_tracking_parameters.detection_model = sl::BODY_TRACKING_MODEL::HUMAN_BODY_ACCURATE; + body_tracking_parameters.body_format = sl::BODY_FORMAT::BODY_18; + body_tracking_parameters.enable_body_fitting = false; + body_tracking_parameters.enable_tracking = false; + state = zed.enableBodyTracking(body_tracking_parameters); + if (state != sl::ERROR_CODE::SUCCESS) + { + std::cout << "Error enabling body tracking: " << state << std::endl; + return false; + } + + return true; +} + void ClientPublisher::start() { if (zed.isOpened()) {