跳转到主要内容

点云库的Python绑定

项目描述

pclpy: PCL for python

PyPI PyPI Python version

点云库(PCL)的Python绑定。使用CppHeaderParser和pybind11从头文件生成。

这个库正在积极开发中,API可能会改变。包含的模块可以工作,但测试不完整,并且仍然存在边界情况。

目前仅支持Windows和python 3.6 x64。

欢迎贡献、问题和评论!

Github仓库: https://www.github.com/davidcaron/pclpy

Pypi: https://pypi.ac.cn/project/pclpy/

动机

许多其他Python库尝试绑定PCL。最受欢迎的是python-pcl,它使用Cython。虽然Cython非常强大,但绑定C++模板并不是它的强项(PCL大量使用模板)。python-pcl的结果是大量代码重复,难以维护和添加功能,并且PCL的类和点类型绑定不完整。

使用pybind11,我们直接使用C++。模板、boost::smart_ptr和缓冲区协议是更容易实现的例子。

到目前为止的结果非常有希望。PCL的大部分内容都得到了覆盖。

安装

Windows with python 3.6 x64

pip安装pclpy

当pip安装项目时,将安装 pclpy_dependencies 作为依赖项。这个简单的包只包含Windows上所需的PCL dlls,因此您无需下载PCL发布版或构建它。

Linux

目前无法使用。欢迎贡献!

功能

  • 实现了所有点类型(由默认的msvc编译标志指定的)
  • 您可以使用 cloud.xcloud.xyz 将点云数据视为 numpy 数组。
  • pybind11 处理 boost::shared_ptr,因此在 Python 层面上完全抽象。
  • laspy 集成用于读取/写入 las 文件。

示例

您可以使用高级、更 Pythonic 的 API,或者 PCL API 的包装器。包装器旨在尽可能接近原始 PCL C++ API。

以下是使用此库处理移动最小二乘法的方法。请参阅 PCL 文档:http://pointclouds.org/documentation/tutorials/resampling.php

使用高级 API

import pclpy

# read a las file
point_cloud = pclpy.read("street.las", "PointXYZRGBA")
# compute mls
output = point_cloud.moving_least_squares(search_radius=0.05, compute_normals=True, num_threads=8)

或 PCL API 的包装器

import pclpy
from pclpy import pcl

point_cloud = pclpy.read("street.las", "PointXYZRGBA")
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)

您可以看到包装器非常接近 C++ 版本

// C++ version

pcl::PointCloud<pcl::PointXYZ>::Ptr point_cloud (new pcl::PointCloud<pcl::PointXYZ> ());
pcl::io::loadPCDFile ("bunny.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);

模块

  • 2d
  • common
  • geometry
  • features
  • filters
  • io
  • kdtree
  • keypoints
  • octree
  • recognition
  • sample_consensus
  • search
  • segmentation
  • stereo
  • surface
  • tracking
  • visualization

目前跳过了这些模块

  • ml
  • people
  • outofcore
  • registration
  • 不在 PCL Windows 发布版中的每个模块(gpu、cuda 等)

未实现

(请参阅 GitHub 问题generators/config.py 中的 what to skip 部分)

构建

Windows with python 3.6 x64

  • 在以下位置下载 Windows 版本的 PCL 发布版(PCL-1.8.1-AllInOne-msvc2017-win64.exe):https://github.com/PointCloudLibrary/pcl/releases/download/pcl-1.8.1/PCL-1.8.1-AllInOne-msvc2017-win64.exe
  • PCL_ROOT 环境变量必须设置为 PCL 的安装目录
  • 关于需求
  • 使用 generate_pybind11_bindings.py 生成模块
  • PCL 发布版中缺少一个文件,您应从 GitHub 仓库中获取:2d/impl/kernel.hpp
  • 由于内存使用量大,必须使用 x64 版本的 cl.exe 构建(请参阅 setup.py 中的解决方案)
  • python setup.py install
  • 有用的 setup.py 参数
    • --msvc-mp-build 启用多进程构建
    • --msvc-no-code-link 使链接速度更快(不要用于发布版,请参阅 setup.py 描述)
    • --use-clcache 使用 clcache 缓存 msvc 构建(必须安装)
    • --debug 以调试模式构建

路线图

  • 尽可能多地包装 PCL
  • 更多测试
  • 在 Appveyor 上进行 CI
  • 使其在 Linux 上工作

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

此发布版没有可用的源分布文件。请参阅有关 生成分布存档 的教程。

构建分布

pclpy-0.11.0-cp36-cp36m-win_amd64.whl (11.3 MB 查看哈希值)

上传时间 CPython 3.6m Windows x86-64

由支持