点云库的python绑定
pclp的Python项目详细描述
pclpy:python的pcl
点云库(PCL)的Python绑定。 使用cppHeaderParser和pyBind11从头生成。
此库正在进行活动开发,API可能会更改。 所包含的模块可以工作,但测试不完整 案例仍然很常见。
目前只支持Windows和Python3.6x64。
欢迎投稿、发稿、评论!
github存储库:https://www.github.com/davidcaron/pclpy
PYPI:https://pypi.org/project/pclpy/
动机
许多其他python库试图绑定pcl。 最流行的是python pcl,它使用cython。 虽然Cython非常强大,但绑定C++模板并不是其中之一。 它的优点(PCL大量使用模板)。 python pcl的结果是大量代码重复,这很难 维护和添加PCL类的特性以及不完整的绑定 和点类型。
使用PybDun11,直接使用C++。模板,boost::smart_ptr和 缓冲协议是实现起来更简单的例子。
目前的结果非常有希望。PCL的很大一部分被覆盖。
安装
使用Python 3.6 x64的Windows
pip install pclpy
当pip安装项目时,pclpy_dependencies
作为一个需求安装。
这个简单的包只包含windows上所需的pcl dll,因此您没有
下载或构建PCL版本。
Linux
暂时不工作。欢迎投稿!
功能
- 实现所有点类型(由默认msvc编译标志指定的点类型)
- 您可以使用
cloud.x
或cloud.xyz
将点云数据视为numpy数组。
- boost::shared_ptr由pybind11处理,因此它在python级别完全抽象化了
- 用于读取/写入LAS文件的Laspy集成
示例
您可以使用更高级的pythonic api,也可以使用pcl api上的包装器。 包装器意味着尽可能接近原始PCL C++API。
下面是如何使用库处理移动最小二乘法。 请参阅PCL文档:http://pointclouds.org/documentation/tutorials/resampling.php
使用更高级别的API:
importpclpy# read a las filepoint_cloud=pclpy.read("street.las","PointXYZRGBA")# compute mlsoutput=point_cloud.moving_least_squares(search_radius=0.05,compute_normals=True,num_threads=8)
或者pcl api上的包装器:
importpclpyfrompclpyimportpclpoint_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++ versionpcl::PointCloud<pcl::PointXYZ>::Ptrpoint_cloud(newpcl::PointCloud<pcl::PointXYZ>());pcl::io::loadPCDFile("bunny.pcd",*point_cloud);pcl::MovingLeastSquaresOMP<pcl::PointXYZ,pcl::PointNormal>mls;pcl::search::KdTree<pcl::PointXYZ>::Ptrtree(newpcl::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);
模块
- 二维
- 普通
- 几何学
- 功能
- 过滤器
- IO
- kdtree
- 关键点
- 八叉树
- 认可度
- 样本一致性
- 搜索
- 分段
- 立体声
- 表面
- 跟踪
- 可视化
暂时跳过这些模块
- 毫升
- 人
- 离开核心
- 注册
- 不在PCL Windows版本中的每个模块(GPU、CUDA等)
未实现
(见github issues
以及generators/config.py
中的what to skip部分
建造
使用Python 3.6 x64的Windows
- 下载适用于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的安装目录
- 关于要求:
- 从Github(2.3dev版本)安装PyBind11它包含一个必要的错误修复程序
- 从https://github.com/davidcaron/CppHeaderParser安装cppHeaderParser(特定的错误修复)
- 使用
generate_pybind11_bindings.py
生成模块
- PCL版本中缺少一个文件,您应该从github repo中获取该文件:2d/impl/kernel.hpp
- 由于占用大量内存,必须使用x64版本的cl.exe构建(请参见setup.py中的解决方法)
- python setup.py安装
- 有用的setup.py参数:
- --msvc mp build应启用多进程生成
- --msvc no code link使链接速度更快(不用于发行版,请参阅setup.py说明)
- --使用cl使用clcache缓存msvc生成(必须安装)
- --调试以在调试模式下生成
路线图
- 尽可能多地包装PCL
- 更多测试
- 应用程序上的CI
- 在Linux上运行
- 从Github(2.3dev版本)安装PyBind11它包含一个必要的错误修复程序
- 从https://github.com/davidcaron/CppHeaderParser安装cppHeaderParser(特定的错误修复)
generate_pybind11_bindings.py
- --msvc mp build应启用多进程生成
- --msvc no code link使链接速度更快(不用于发行版,请参阅setup.py说明)
- --使用cl使用clcache缓存msvc生成(必须安装)
- --调试以在调试模式下生成