Skip to main content

Python bindings for the Point Cloud Library

Project description

pclpy: Point Cloud Library for python

PyPI PyPI Python version

Automatically generated python bindings for the Point Cloud Library (PCL) using pybind11 and CppHeaderParser.

The library is in early stage and in active development, do not use in production. The api is likely to change.

Only Windows x64 and python 3.6 are supported at the moment.

Contributions, issues, comments are welcome!

Github repository: https://www.github.com/davidcaron/pclpy

Pypi: https://pypi-hypernode.com/project/pclpy/

Why another binding?

The python-pcl bindings contain a lot of repeated code. Maintaining, adding features or point types is quite tedious. While Cython is great, binding templated code isn't one of its strenghts. Also, python-pcl implement only a subset of PCL's classes and point types.

Using pybind11, we can use c++ templates directly. The goal is to wrap as much of the library as possible.

Installing

pip install pclpy

When pip installs the project, pclpy_dependencies is installed as a requirement. This simple package contains only the PCL dlls required on Windows so you don't have to download a PCL release or build it.

Features

  • All point types are implemented (those specified by the default msvc compile flags)
  • You can view point cloud data as numpy arrays using cloud.x or cloud.xyz
  • boost::shared_ptr is handled by pybind11 so it's completely abstracted at the python level

Example

Here is how you would use the library to process Moving Least Squares. See the PCL documentation: http://pointclouds.org/documentation/tutorials/resampling.php

import pclpy
from pclpy import pcl

point_cloud = pclpy.io.read_las(test_data("street.las"))
mls = pcl.surface.MovingLeastSquaresOMP.PointXYZRGBA_PointNormal()
tree = pcl.search.KdTree.PointXYZRGBA()
mls.setSearchRadius(0.05)
mls.setPolynomialFit(False)
mls.setNumberOfThreads(12)
mls.setInputCloud(point_cloud)
mls.setSearchMethod(tree)
mls.setComputeNormals(True)
output = pcl.PointCloud.PointNormal()
mls.process(output)

You can see it's quite similar to the C++ version:

// C++ version

pcl::PointCloud<pcl::PointXYZ>::Ptr point_cloud (new pcl::PointCloud<pcl::PointXYZ> ());
pcl::io::loadPCDFile ("bun0.pcd", *point_cloud);
pcl::MovingLeastSquaresOMP<pcl::PointXYZ, pcl::PointNormal> mls;
pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);
mls.setSearchRadius (0.05);
mls.setPolynomialFit (false);
mls.setNumberOfThreads (12);
mls.setInputCloud (point_cloud);
mls.setSearchMethod (tree);
mls.setComputeNormals (true);
pcl::PointCloud<pcl::PointNormal> output;
mls.process (output);

Modules

  • These modules should work, but are untested
    • 2d
    • common
    • geometry
    • features
    • filters
    • io
    • kdtree
    • keypoints
    • octree
    • recognition
    • sample_consensus
    • search
    • segmentation
    • stereo
    • surface
    • tracking
    • visualization
  • These modules are skipped for now
    • ml
    • people
    • outofcore
    • registration
    • every other module not built in the precompiled windows binaries

Not Implemented

(see todo.md and the what to skip section in generators/config.py)

To build

  • Download PCL release for Windows (PCL-1.8.1-AllInOne-msvc2017-win64.exe) at: https://github.com/PointCloudLibrary/pcl/releases/download/pcl-1.8.1/PCL-1.8.1-AllInOne-msvc2017-win64.exe
  • PCL_ROOT environment variable must be set to the installation directory of PCL
  • About requirements:
  • Generate modules using generate_pybind11_bindings.py
  • There is a missing file from the PCL release that you should get from the github repo: 2d/impl/kernel.hpp
  • Must be built with x64 version of cl.exe because of the large memory usage (see workaround in setup.py)
  • python setup.py install
  • Useful setup.py arguments:
    • --msvc-mp-build should enable a multiprocessed build
    • --msvc-no-code-link makes linking much faster (do not use for releases, see setup.py description)
    • --use-clcache to cache msvc builds using clcache (must be installed)
    • --debug to build in debug mode

Roadmap

  • Wrap as much of PCL as reasonably possible
  • More tests
  • CI on Appveyor
  • Make it installable on Linux and Mac

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 Distribution

pclpy-0.4.0-cp36-cp36m-win_amd64.whl (12.2 MB view details)

Uploaded CPython 3.6m Windows x86-64

File details

Details for the file pclpy-0.4.0-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for pclpy-0.4.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7680082cec8589a6b413d3dcf341753b6979530e131f2e3107a403bd1f908d8c
MD5 43de15a61678cef5d6698de4b745a29a
BLAKE2b-256 ef28d1b2969edfbbb5dacb7a494db6f7bc2e8cae8a073c370a1c0ae5002ada90

See more details on using hashes here.

Supported by

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