Skip to main content

LibMultiSense python package wrapped using pybind11

Project description

LibMultiSense

LibMultiSense is a C++ and Python library designed to simplify interaction with the MultiSense S family of stereo sensors developed by Carnegie Robotics. It provides a comprehensive, easy-to-use API for capturing and processing stereo sensor data an generating depth images, color images, and 3D point clouds.

Official product page: Carnegie Robotics MultiSense Products

Detailed documentation: LibMultiSense Documentation

LibMultiSense was recently refactored to have a new API. The following examples in the README all assume the user is using the new API. To build with the new API, the following CMake arguments should be set.

-DBUILD_LEGACY_API=0FF

The README for the Legacy API can be found here.

The LibMultiSense C++ and Python library has been tested with the following operating systems

  • Ubuntu
    • 20.04
    • 22.04
    • 24.04
  • MacOS Sequoia
  • Windows 11

Table of Contents

Client Networking Prerequisite

The MultiSense comes preconfigured with a static 10.66.171.21 IP address with a /24 subnet. To connect to the MultiSense, a client machine must be updated with an IP address on the 10.66.171 subnet.

Please see the host network configuration for details on how to set a client machine's IP address and MTU.

Quickstart Guide

Below are minimal examples demonstrating basic usage of LibMultiSense to capture rectified images from the camera.

Before running the examples make sure LibMultiSense is installed, and your machines network is properly configured.

For new users, it's recommended to start with the Python version of LibMultiSense

Python

Install the LibMultiSenes python client and OpenCV dependency via

pip install libmultisense opencv-python
import libmultisense as lms
import cv2

channel_config = lms.ChannelConfig()
channel_config.ip_address = "10.66.171.21"
with lms.Channel.create(channel_config) as channel:
    channel.start_streams([lms.DataSource.LEFT_RECTIFIED_RAW, lms.DataSource.RIGHT_RECTIFIED_RAW])

    while True:
        frame = channel.get_next_image_frame()
        if frame:
            for source, image in frame.images.items():
                cv2.imwrite(str(source) + ".png", image.as_array)

C++

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

int main()
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    channel->start_streams({lms::DataSource::LEFT_RECTIFIED_RAW, lms::DataSource::RIGHT_RECTIFIED_RAW});

    while(true)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            for (const auto &[source, image]: image_frame->images)
            {
                const auto path = std::to_string(image_frame->frame_id) +  "_" +
                                  std::to_string(static_cast<int>(source)) + ".png";
                lms::write_image(image, path);
            }
        }
    }
    return 0;
}

Optional Dependencies When Building From Source

OpenCV

LibMultiSense optionally has OpenCV utility functions to make the LibMultiSense client API easier to integrate with existing systems. To build the OpenCV helpers the following CMake argument should be set

-DBUILD_OPENCV=ON

This will require a system installation of OpenCV, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

nlohmann json

LibMultiSense optionally uses nlohmann_json for serialization of base LibMultiSense types. To build the nlohmann_json serialization helpers the following CMake argument should be set

-DBUILD_JSON_SERIALIZATION=ON

This will require a system installation of nlohmann_json, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

pybind11

LibMultiSense optionally uses pybind11 to generate python bindings for the C++ API. To build the pybind11 python bindings the following CMake argument should be set

-DBUILD_PYTHON_BINDINGS=ON

This will require a system installation of pybind11, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument

googletest

LibMultiSense optionally uses googletest for unit testing the C++ API. To build the googletest unit tests the following CMake argument should be set

-DBUILD_TESTS=ON

This will require a system installation of googletest, or an installation which can be pointed to with CMake's CMAKE_PREFIX_PATH argument


Installation

Linux

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API:

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project.

To install the LibMultiSense Python bindings

> sudo apt install build-essential pybind11-dev nlohmann-json3-dev

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> pip install .

C++

LibMultiSense uses CMake for its build system.

To build the standalone LibMultiSense library and demonstration applications.

# Note this only needs to be run once before building
> sudo apt install build-essential nlohmann-json3-dev

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> mkdir build
> cd build && cmake -DBUILD_LEGACY_API=OFF -DBUILD_JSON_SERIALIZATION=ON -DCMAKE_INSTALL_PREFIX=../install ..
> make install
> cd ../install

To build the standalone LibMultiSense library without the demonstration applications, set the cmake variable -DMULTISENSE_BUILD_UTILITIES=OFF


MacOS

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API:

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project.

To install the LibMultiSense Python bindings

> brew install pybind11 nlohmann-json

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> pip install .

C++

LibMultiSense uses CMake for its build system.

To build the standalone LibMultiSense library and demonstration applications.

# Note this only needs to be run once before building
> brew install nlohmann-json

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> mkdir build
> cd build && cmake -DBUILD_LEGACY_API=OFF -DBUILD_JSON_SERIALIZATION=ON -DCMAKE_INSTALL_PREFIX=../install ..
> make install
> cd ../install

To build the standalone LibMultiSense library without the demonstration applications, set the cmake variable -DMULTISENSE_BUILD_UTILITIES=OFF


Windows

Python

PyPi (Recommended)

The following command installs/updates to the latest version of the LibMultisense Python API.

After installing Python via the Microsoft Store execute the following command in a Powershell terminal

pip install --upgrade libmultisense

To avoid conflicts with other Python packages, it's recommended to utilize venv to isolate dependency installations.

From Source

LibMultiSense uses pybind11 to generate Python bindings for the base LibMultiSense API. These bindings can be installed via pip into a Python virtual environment or a local Python project. To ensure Windows has the proper build tools installed, please install Microsoft Visual Studio with the C++ and CMake extensions.

Note you will need to have a version of Python installed on your Windows system. This was tested with Python 3.9 installed via the Microsoft Store on Windows 11.

To install the LibMultiSense Python bindings open a powershell terminal and execute the following commands

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> git clone https://github.com/microsoft/vcpkg.git
> ./vcpkg/bootstrap-vcpkg.bat

> $Env:VCPKG_ROOT = ./vcpkg

> pip install .

C++

LibMultiSense uses CMake and vcpkg to build the LibMultiSense library. To ensure Windows has the proper build tools installed, please install Microsoft Visual Studio with the C++ and CMake extensions.

Open a powershell terminal and execute the following commands:

> git clone https://github.com/carnegierobotics/LibMultiSense.git
> cd LibMultiSense
> git clone https://github.com/microsoft/vcpkg.git
> ./vcpkg/bootstrap-vcpkg.bat

> $Env:VCPKG_ROOT = ./vcpkg

> cmake --build build --config Release --target install

CMake Project Integration

Integrating LibMultiSense into an existing CMake project is easy. There are two primary methods for integration: a local install on your system, or a submodule clone within your repository

Local Installation

LibMultiSense is installed on your system (i.e. in a location like /opt/multisense)

find_package(MultiSense)
target_link_libraries(<your-library-or-binary> MultiSense)

When running CMake, make sure to specify the location of the LibMultiSense install via -DCMAKE_PREFIX_PATH

Git Submodule

Clone the LibMultiSense repository into the existing project's source tree. In the main CMakeLists.txt file of the project, add the following lines:

 include_directories(LibMultiSense/source/LibMultiSense)
 add_subdirectory(LibMultiSense/source/LibMultiSense)

Documentation

Documentation of high-level LibMultiSense concepts can be found here

Doxygen documentation can be built for LibMultisense by running the Doxygen configuration file located in the docs directory

> cd LibMultiSense/docs
> doxygen Doxyfile

HTML and LaTex documentation will be generated in the docs directory.

Usage examples are included in the Doxygen documentation.


Support

To report an issue with this library or request a new feature, please use the GitHub issues system

For product support, please see the support section of our website Individual support requests can be created in our support portal


Camera Configuration

Camera settings like resolution, exposure, FPS, gain, gamma, and white balance can be configured via the LibMultiSense image::Config

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        config = channel.get_config()
        config.frames_per_second = 10.0
        config.width = 960
        config.height = 600
        config.disparities = lms.MaxDisparities.D256
        config.image_config.auto_exposure_enabled = True
        config.image_config.gamma = 2.2
        if channel.set_config(config) != lms.Status.OK:
            print("Cannot set configuration")
            exit(1)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    auto config = channel->get_config();
    config.frames_per_second = 10.0;
    config.width = 960;
    config.height = 600;
    config.disparities = lms::MultiSenseConfig::MaxDisparities::D256;
    config.image_config.auto_exposure_enabled = true;
    config.image_config.gamma = 2.2;
    if (const auto status = channel->set_config(config); status != lms::Status::OK)
    {
        std::cerr << "Cannot set config" << std::endl;
        return 1;
    }

    return 0;
}

Point Cloud Generation

Disparity images can be converted to 3D point cloud images using the client API.

The following modified version of the Quickstart example, converts disparity images to 3D point clouds colorized using the left rectified image.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.LEFT_RECTIFIED_RAW, lms.DataSource.LEFT_DISPARITY_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                point_cloud = lms.create_gray8_pointcloud(frame,
                                                         args.max_range,
                                                         lms.DataSource.LEFT_RECTIFIED_RAW,
                                                         lms.DataSource.LEFT_DISPARITY_RAW)

                print("Saving pointcloud for frame id: ", frame.frame_id)
                lms.write_pointcloud_ply(point_cloud, str(frame.frame_id) + ".ply")

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::LEFT_RECTIFIED_RAW,
                                                    lms::DataSource::LEFT_DISPARITY_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    const double max_range_m = 20.0;

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            if (const auto point_cloud = lms::create_color_pointcloud<uint8_t>(image_frame.value(),
                                                                               max_range_m,
                                                                               lms::DataSource::LEFT_RECTIFIED_RAW,
                                                                               lms::DataSource::LEFT_DISPARITY_RAW); point_cloud)
            {
                std::cout << "Saving pointcloud for frame id: " << image_frame->frame_id << std::endl;
                lms::write_pointcloud_ply(point_cloud.value(), std::to_string(image_frame->frame_id) + ".ply");
            }
        }
    }

    return 0;
}

Depth Image Generation

Disparity images can be converted to depth images using the client API

The following modified version of the Quickstart example, converts disparity images to openni depth images and saves them to disk using OpenCV.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.LEFT_DISPARITY_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        # Set to true to save the depth image in the frame of the aux color camera
        in_aux_frame = False

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                # MONO16 depth images are quantized to 1 mm per 1 pixel value to match the OpenNI standard.
                # For example, a depth image pixel with a value of 10 would correspond to a depth of 10mm
                depth_image = lms.create_depth_image(frame, lms.PixelFormat.MONO16, lms.DataSource.LEFT_DISPARITY_RAW, in_aux_frame, 65535)
                if depth_image:
                    print("Saving depth image for frame id: ", frame.frame_id)
                    cv2.imwrite(str(frame.frame_id) + ".png", depth_image.as_array)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <opencv2/opencv.hpp>

#define HAVE_OPENCV 1
#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::LEFT_DISPARITY_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    // Set to true to save the depth image in the frame of the aux color camera
    const bool in_aux_frame = false;

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            //
            // MONO16 depth will be quantized to mm to match OpenNI's depth format
            //
            if (const auto depth_image = lms::create_depth_image(image_frame.value(),
                                                                 lms::Image::PixelFormat::MONO16,
                                                                 lms::DataSource::LEFT_DISPARITY_RAW,
                                                                 in_aux_frame,
                                                                 65535); depth_image)
            {
                std::cout << "Saving depth image for frame id: " << image_frame->frame_id << std::endl;
                cv::imwrite(std::to_string(image_frame->frame_id) + ".png", depth_image->cv_mat());
            }
        }
    }

    return 0;
}

Color Image Generation

Luma and Chroma Aux images can be converted to BGR color images using the client API

The following modified version of the Quickstart example, converts luma and chroma aux images to BGR images and saves them to disk using OpenCV.

Python

import libmultisense as lms
import cv2

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        if channel.start_streams([lms.DataSource.AUX_RAW]) != lms.Status.OK:
            print("Unable to start streams")
            exit(1)

        while True:
            frame = channel.get_next_image_frame()
            if frame:
                bgr = lms.create_bgr_image(frame, lms.DataSource.AUX_RAW)
                if bgr:
                    cv2.imwrite(str(frame.frame_id) + ".png", bgr.as_array)

if __name__ == "__main__":
    main()

C++

#include <iostream>

#include <opencv2/opencv.hpp>

#define HAVE_OPENCV 1
#include <MultiSense/MultiSenseChannel.hh>
#include <MultiSense/MultiSenseUtilities.hh>

namespace lms = multisense;

volatile bool done = false;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;;
        return 1;
    }

    if (const auto status = channel->start_streams({lms::DataSource::AUX_RAW}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start streams: " << lms::to_string(status) << std::endl;
        return 1;
    }

    while(!done)
    {
        if (const auto image_frame = channel->get_next_image_frame(); image_frame)
        {
            if (const auto bgr = create_bgr_image(image_frame.value(), lms::DataSource::AUX_RAW); bgr)
            {
                cv::imwrite(std::to_string(image_frame->frame_id) + ".png", bgr->cv_mat());
            }
        }
    }

    return 0;
}

IMU Data Streaming

LibMultiSense supports streaming IMU data from the camera. The IMU must first be configured to enable the desired sensors (accelerometer, gyroscope) and set their sample rates and ranges.

Python

import libmultisense as lms

def main():
    channel_config = lms.ChannelConfig()
    channel_config.ip_address = "10.66.171.21"

    with lms.Channel.create(channel_config) as channel:
        if not channel:
            print("Invalid channel")
            exit(1)

        #
        # Get the current configuration
        #
        config = channel.get_config()

        #
        # Configure the IMU. We first need to get the IMU info to find supported rates and ranges
        #
        info = channel.get_info()
        if not info.imu:
            print("Sensor does not have an IMU")
            exit(1)

        imu_config = lms.ImuConfig()
        imu_config.samples_per_frame = 10 # Number of samples per ImuFrame

        # Enable Accelerometer. Select appropriate rate/range
        if info.imu.accelerometer:
            accel_mode = lms.ImuOperatingMode()
            accel_mode.enabled = True
            accel_mode.rate = info.imu.accelerometer.rates[0]
            accel_mode.range = info.imu.accelerometer.ranges[0]
            imu_config.accelerometer = accel_mode

        # Enable Gyroscope. Select appropriate rate/range
        if info.imu.gyroscope:
            gyro_mode = lms.ImuOperatingMode()
            gyro_mode.enabled = True
            gyro_mode.rate = info.imu.gyroscope.rates[0]
            gyro_mode.range = info.imu.gyroscope.ranges[0]
            imu_config.gyroscope = gyro_mode

        config.imu_config = imu_config
        if channel.set_config(config) != lms.Status.OK:
            print("Failed to set IMU configuration")
            exit(1)

        #
        # Start the IMU stream
        #
        if channel.start_streams([lms.DataSource.IMU]) != lms.Status.OK:
            print("Unable to start IMU stream")
            exit(1)

        while True:
            imu_frame = channel.get_next_imu_frame()
            if imu_frame:
                for sample in imu_frame.samples:
                    if sample.accelerometer:
                        print(f"Accel: x={sample.accelerometer.x}, y={sample.accelerometer.y}, z={sample.accelerometer.z}")
                    if sample.gyroscope:
                        print(f"Gyro: x={sample.gyroscope.x}, y={sample.gyroscope.y}, z={sample.gyroscope.z}")

if __name__ == "__main__":
    main()

C++

#include <iostream>
#include <MultiSense/MultiSenseChannel.hh>

namespace lms = multisense;

int main(int argc, char** argv)
{
    const auto channel = lms::Channel::create(lms::Channel::Config{"10.66.171.21"});
    if (!channel)
    {
        std::cerr << "Failed to create channel" << std::endl;
        return 1;
    }

    //
    // Get the current configuration
    //
    auto config = channel->get_config();

    //
    // Configure the IMU. We first need to get the IMU info to find supported rates and ranges
    //
    const auto info = channel->get_info();
    if (!info.imu)
    {
        std::cerr << "Sensor does not have an IMU" << std::endl;
        return 1;
    }

    lms::MultiSenseConfig::ImuConfig imu_config;
    imu_config.samples_per_frame = 10;

    // Enable Accelerometer
    if (info.imu->accelerometer)
    {
        lms::MultiSenseConfig::ImuConfig::OperatingMode accel_mode;
        accel_mode.enabled = true;
        accel_mode.rate = info.imu->accelerometer->rates[0];
        accel_mode.range = info.imu->accelerometer->ranges[0];
        imu_config.accelerometer = accel_mode;
    }

    // Enable Gyroscope
    if (info.imu->gyroscope)
    {
        lms::MultiSenseConfig::ImuConfig::OperatingMode gyro_mode;
        gyro_mode.enabled = true;
        gyro_mode.rate = info.imu->gyroscope->rates[0];
        gyro_mode.range = info.imu->gyroscope->ranges[0];
        imu_config.gyroscope = gyro_mode;
    }

    config.imu_config = imu_config;
    if (const auto status = channel->set_config(config); status != lms::Status::OK)
    {
        std::cerr << "Failed to set IMU configuration: " << lms::to_string(status) << std::endl;
        return 1;
    }

    //
    // Start the IMU stream
    //
    if (const auto status = channel->start_streams({lms::DataSource::IMU}); status != lms::Status::OK)
    {
        std::cerr << "Cannot start IMU stream: " << lms::to_string(status) << std::endl;
        return 1;
    }

    while(true)
    {
        if (const auto imu_frame = channel->get_next_imu_frame(); imu_frame)
        {
            for (const auto& sample : imu_frame->samples)
            {
                if (sample.accelerometer)
                {
                    std::cout << "Accel: x=" << sample.accelerometer->x
                              << ", y=" << sample.accelerometer->y
                              << ", z=" << sample.accelerometer->z << std::endl;
                }
                if (sample.gyroscope)
                {
                    std::cout << "Gyro: x=" << sample.gyroscope->x
                              << ", y=" << sample.gyroscope->y
                              << ", z=" << sample.gyroscope->z << std::endl;
                }
            }
        }
    }

    return 0;
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

libmultisense-7.5.0-cp313-cp313-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.13Windows x86-64

libmultisense-7.5.0-cp313-cp313-win32.whl (2.5 MB view details)

Uploaded CPython 3.13Windows x86

libmultisense-7.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp313-cp313-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

libmultisense-7.5.0-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

libmultisense-7.5.0-cp312-cp312-win32.whl (2.5 MB view details)

Uploaded CPython 3.12Windows x86

libmultisense-7.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp312-cp312-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

libmultisense-7.5.0-cp311-cp311-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.11Windows x86-64

libmultisense-7.5.0-cp311-cp311-win32.whl (2.5 MB view details)

Uploaded CPython 3.11Windows x86

libmultisense-7.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp311-cp311-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

libmultisense-7.5.0-cp310-cp310-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10Windows x86-64

libmultisense-7.5.0-cp310-cp310-win32.whl (2.5 MB view details)

Uploaded CPython 3.10Windows x86

libmultisense-7.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp310-cp310-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

libmultisense-7.5.0-cp39-cp39-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.9Windows x86-64

libmultisense-7.5.0-cp39-cp39-win32.whl (2.5 MB view details)

Uploaded CPython 3.9Windows x86

libmultisense-7.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp39-cp39-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

libmultisense-7.5.0-cp38-cp38-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.8Windows x86-64

libmultisense-7.5.0-cp38-cp38-win32.whl (2.5 MB view details)

Uploaded CPython 3.8Windows x86

libmultisense-7.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

libmultisense-7.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (3.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

libmultisense-7.5.0-cp38-cp38-macosx_11_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file libmultisense-7.5.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f810e192393599aff227dcbfc7d816824d6501de4c5041d40148375bc720a06a
MD5 4ab7fe89d9c99d58734daeb0680cef48
BLAKE2b-256 22b65c172464bf4188ac8aac1d04b1431ab889b6f07108390f29c16faa053456

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 29f13993a76e96960ae80881c8c3800efe8417bf47a85638b2b8b162375357f9
MD5 90e4b62125e9409dd21012e15b533c07
BLAKE2b-256 7c494053c0377eb45776f64ed050c753b759514c78a5e790f0e5e777863fb15f

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0549c74aea3af154662eb635e9a4dc699afbeaa9d882d516587b0b375924db51
MD5 4c7a6fd57f56f5df6dce058dc7654084
BLAKE2b-256 aa09b86a50f338bfd302d85c71db3e96654325e3aca8a5e63afea7ae07af4b8f

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 27f5bf368c19effcb827b570e894878e5e3a06e2df01db7765a1cec4996239b4
MD5 514896c8ad434fe3943423ee80ece8f6
BLAKE2b-256 81234b0af8fbf3c49c9f9dc1973dd0ee00c58595631a29d0d7860127b485d98a

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 890dfa0eb69391e85164521c4c6ecbc8faa09cc76491e03ce76f09732616fd1b
MD5 cf6d72b65013d6f6c94b7112ac85ed5a
BLAKE2b-256 e93664e773f24bdaddb328f801417e217ba12350c98e08c810fdd48234393bb5

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 982f75433544a70e98f1548a45c8f21ce726330fe8260f557e4436b95cc46fe6
MD5 aa3d70af701be3645dde72ea43344045
BLAKE2b-256 fc4c99ec2800b05d73b20d617cc0520728b4847ca699b69737e3e264e1da9099

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 96bcbf9433eb7e5b79af917e788101d1d0de403c28bc6745aa5a90196546aace
MD5 bb3c2fdf976cae8ac11ec128edc6774b
BLAKE2b-256 3ad19b1aab230f8c98b420476ef132490cfcffdb3051164b95eb46123f48f7fd

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d6cee5b44bfacd3e30bd0c67c1379ec028dd345e5aa7193f90c844ac0d69376c
MD5 1982022c35fa25d7492ec1f0d10c530e
BLAKE2b-256 74312b42f0552b62197a1570ae7ddea2143005060c5b26a8ac94d595f9f36842

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 68833c7e0d576491527c9449ecdb0762b7d62ee2cddcffcca6ca36dc0af9cf97
MD5 ab7dd6d0eceb2419284c3271b50dddf1
BLAKE2b-256 5df3290a153318e3bb05d144565438becb548185d65f36b78357ea9687a92ad0

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f2e349cbc473674db7d23a745b6ad37e595dcda899e304eb8d21276395984b6
MD5 5412186353994cb097818639923b13b0
BLAKE2b-256 9215a925c181dcf458fd862ff5a432ff5e02438093b9f70c48abc2c350e21806

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4e82e4e6eb1e239230795b03075cd628e3a5b2b815ba7323c13c4d3191d2d3ec
MD5 b91f1a5757a36b142a9be3ffc8129c0b
BLAKE2b-256 a9a54a880bc0ce13794e12d9dd58ec4ead54321c310fc81bcbd4e3e8b74d132b

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 bd13b3963c096bb978476f9352cd2be2d93697f23a1afdfbc7129cdbe5a383c5
MD5 578a33f06d1f0b3b81c7104d6a216b2b
BLAKE2b-256 1b47b8775931f1e20794e2b167ab7764881fb63d41cb479dd56ef1c99524f20e

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2e3e03a3602c493ed2c37439f21b1ae8f3be4739378d26c777e72a0de9e8e5c
MD5 d24ba6027fea1f0bfface7a7b39cbcd3
BLAKE2b-256 144faee709308d30c31778a57a7a942edcef37f9fcdefbaa947fe355f3c3b639

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2248c265749c01a0746c91f2163c74e3a80f6c1ea4eb78bc641fb868449f24ec
MD5 cf16c1079e3128abf0b8e7e58bc12258
BLAKE2b-256 882439f0e5f43326e5e208dc98d6fc7b135460fdb6cbc4f4b56950cb94af6886

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 369a6b9cff8f59e03a949dd3f9e7127e9b433a3037be09362b5336c24adda584
MD5 a9a7df1d5e1ee368924feba26a20b5f9
BLAKE2b-256 9cfebf6f465f286216b16f3cd21a2a153aba409e82a65e0292e34c15331ac7b2

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 37dceaac4dae9ad357799d6c429c4791094ea5160bf22ff5b5cb9c7e460fdc73
MD5 683f97711e640de5bab87b9d236cb5cf
BLAKE2b-256 211a14cee4e17d7088582a29040d6f23b993885b079950b68f3a0de6b67615b2

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 df62b25deeeb5c198d892fdfb5f98f0d54c13256dc92e906492847f61a049e8f
MD5 8a10037f03b3c8c2144b7f07b4ccb2c7
BLAKE2b-256 e11b437a59396968a7b79479f3bde388194c39636620acbdb439062adc6803ea

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11810a8ad94aba431d75a68d33edb8a3002d4c49605ea6fa178c074e83b337fe
MD5 15275b6b6f94214baa24938283e0b065
BLAKE2b-256 722ec7f69f7e4ddf434fc5dc8757dc9f18d96dd2da9d2a6a33846616ffbe4caf

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c610223e823d9657e0b8f62db50e918875bb5201034483d1b3feefa604f83609
MD5 7cdf9ad51b73be025b61c8d8e7219071
BLAKE2b-256 02e7c331a224eefd0e4e432db8ac7d00ba7c21b82f9da6a1831fbaf34a82e06e

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bf1497b3a1a7e30b5044db7139fe70880435b597df263709393eb1aac20dccfa
MD5 23bc4b87e3ecc9e0e5fb6ba845e4a87b
BLAKE2b-256 3723dd147582fb67523b6cff3400b0e4b0db3bbac574b670933f8aecb364234b

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7e28f801fe4450f8e933fc3eb6f76a9376ce35cdcd31f92679e37e1624a85b15
MD5 c5a60db57efedb5a781da04f8799a446
BLAKE2b-256 28f2aca33d44d9b457fea093978847318d4e05bc1bf72109579515145ddaa3aa

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 946786ed81395af7a1617f5b7809117a02e91804f3d5ab729763ecd26750d0bd
MD5 4c5ce9387b0730b67cc0fbcddda2b596
BLAKE2b-256 04149385219a025221f675e9502a6ba4f68b4bffc0fdb61b6805551238132588

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 505ba76d16f7405e12b12392c69e3b4d181afb425022e0d8e6130fb1bacc1d61
MD5 9b0fdcb30b0d99153d07458838aa9328
BLAKE2b-256 e0f2d1f388db0ff2f1c2453cb48bd79c50a667eca0217944a621bee4142f6831

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 69f0f872fd1e1f4f1a91975f380d933425e37cbdc3c772fce664135421a27328
MD5 b9f7e266bc1d795a3944eb29964429b1
BLAKE2b-256 cf22afab17d009c0b3d58293f0a9c3beacc5e2ab1d0865dbbcdb49b7cbd79f66

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3b4eaead8336abe344e599514d28f3796503cb25a07f010f2d9b859bbce0eee
MD5 23246d7ff411e9631cda46ff8cf666b4
BLAKE2b-256 27780b1c64967f1cbd75f78fd490f758bf5fac5faf7b8acd5c220258763ed1a4

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 53b6798c6ccd53f967264f5e70c8d84b1edb2cd8582e447b588164480e9debc0
MD5 03b6dc67f2ff369d15bc8b1c1420a982
BLAKE2b-256 69ccc18f5757bdb1b7f663a7d286503673c409f0f615f00fedfab489cab76b88

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: libmultisense-7.5.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for libmultisense-7.5.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 551afc95bdcbfe29d05b4a7959fd85eb664e1f7f0bf17d50e19f552678310f45
MD5 72902e61cb3cf53d31cf6cd7b3c6d9a0
BLAKE2b-256 7de08ba95eb112d8678bf73031669fd6ec3a1545dbd84534edc5a45b28e046aa

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2915f1c34353059abda2197bc5434ffb2fc05865d5dbdd3c79b762a7b082daad
MD5 46acc159e925cbbe90b5ae5233426622
BLAKE2b-256 84baad600e0214cc7ff8e174eb4d0618825f84bbdf59812f23ced8792fa17369

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 22367932ff97c4ceeb3382700feb39f43398e6a940ce17ee44f9a79aa4a468a1
MD5 66f4c5844110ab236b1876519fdb0b86
BLAKE2b-256 86fdecb278c3691e8dfab7abeaf56897955ee1c656aa6544cf8da5db724e5b4c

See more details on using hashes here.

File details

Details for the file libmultisense-7.5.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for libmultisense-7.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 06689a62bdba0e44fd77bf2e6300ac17194966b286d8018c936e86726f78279d
MD5 258d3ba5b54fa5c1b111378424c67a27
BLAKE2b-256 deb8b6e0a6e8abb9f5664861b0d4994b189fa77e1164a5ccc3cb24ff7fee2e1b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page