我想看一下Open3D示例


一份介绍open3d并试图做一个例子的备忘录。
撰写本文时的Open3d版本为v0.7.0.0

TL; DR

如果您现在想做一个Open3D示例,可以通过zip快速下载较旧版本的git存储库。 https://github.com/intel-isl/Open3D/tree/v0.7.0
否则,由于版本差异,该示例将无法正常工作。

你想做的事

玩open3d。在python中。
为此,我想看一下Open3D示例。

Open3d的

一个包装,当我告诉大三学生我想用Python处理几何点云时,我立刻就失望了。

Open3d的介绍

本章是主页的翻译。
http://www.open3d.org/docs/release/getting_started.html

Open3d是用于编写3d数据处理的新库。在Python和C中可用。
将此用于引文,例如论文。

1
2
3
4
5
6
@article{Zhou2018,
    author    = {Qian-Yi Zhou and Jaesik Park and Vladlen Koltun},
    title     = {{Open3D}: {A} Modern Library for {3D} Data Processing},
    journal   = {arXiv:1801.09847},
    year      = {2018},
}

你知道这是什么吗?

Python版本安装

仅支持2.7、3.5和3.6。 3.7不支持吗?

pip

1
pip install open3d-python

如果您不使用虚拟环境,则必须小心。

1
2
3
4
5
pip3 install open3d-python
# or
pip install --user open3d-python
# or
python3 -m pip install --user open3d-python

conda

1
conda install -c open3d-admin open3d

open3d软件包由open3d-admin通道处理,因此请使用-c进行指定。

测试

1
python -c "import open3d"

教程

当我这样做时,找不到下面介绍的教程文件。 (未经许可不是DL)

rgbd_redwood.py运行一个示例,该示例读取并显示一对RGB-D图像,然后将其转换为点云并显示。

这个奇怪的名词是什么?学习要求

1
2
cd lib/Tutorial/Basic
python rgbd_redwood.py

有关教程的具体内容,请参考每个文件。本教程使用numpy,matplotlib和opencv-python。

环境设定

我实际上是从这里做的

环境

  • Windows10的
  • VS2015、2019安装
  • python未安装

设定

从官方页面正确安装conda。我没有通过路径,而是从conda提示符下使用code命令启动了VS Code并使用了它。

open3d仅支持python3.6,但conda的默认版本当前为3.7。我建立了一个专用环境,名称为o3d。

首先,我在启动的vscode终端中做了conda创建,但是

1
conda create -n o3d python=3.6

在那之后,即使我继续使用vscode激活它,也没有任何响应。因此,在anaconda提示符下激活conda后,我重新启动了vscode。

1
2
conda activate o3d
code

之后,我在vscode终端中使用conda安装了open3d。

1
2
conda install -c open3d-admin open3d
python -c "import open3d"

python命令结束而没有输出,我能够确认安装已完成。

例子

我想做例子(失败)

我不确定

示例在哪里,所以我直接将它从github页面上删除并进行了尝试,但是我很生气,因为没有测试数据。

我不记得何时安装curl

1
2
curl https://raw.githubusercontent.com/intel-isl/Open3D/master/examples/Python/Basic/python_binding.py -o python_binding.py
python .\python_binding.py

做例子(强制)

我无能为力,所以我克隆了整个存储库并获得了示例。

此方法不好。正如我稍后了解到的,似乎可以通过conda安装的版本不同于可以通过git clone获得的master分支的版本。当然不行了。

1
git clone https://github.com/intel-isl/Open3D.git

python_binding.py

在Open3D /示例/ Python / Basic中启动python_binding.py。

1
python .\python_binding.py

各种信息少而又少。我能够用两个q键完全完成它。

1
2
3
4
5
6
7
8
geometry::PointCloud with 198835 points.
Help on package open3d.open3d.visualization in open3d.open3d:

NAME
    open3d.open3d.visualization

DESCRIPTION
以下つらつら???

执行了以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# examples/Python/Basic/python_binding.py

import open3d as o3d


def example_import_function():
    pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
    print(pcd)


def example_help_function():
    help(o3d)
    help(o3d.geometry.PointCloud)
    help(o3d.io.read_point_cloud)


if __name__ == "__main__":
    example_import_function()
    example_help_function()

第一行似乎是example_import_function()的执行结果,随后的几行是example_help_function()的执行结果。能够获得各种帮助的帮助可能很有趣。

file_io.py

在Open3D /示例/ Python / Basic中启动file_io.py。

1
python .\file_io.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# examples/Python/Basic/file_io.py

import open3d as o3d

if __name__ == "__main__":

    print("Testing IO for point cloud ...")
    pcd = o3d.io.read_point_cloud("../../TestData/fragment.pcd")
    print(pcd)
    o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)

    print("Testing IO for meshes ...")
    mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")
    print(mesh)
    o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)

    print("Testing IO for images ...")
    img = o3d.io.read_image("../../TestData/lena_color.jpg")
    print(img)
    o3d.io.write_image("copy_of_lena_color.jpg", img)

copy_of_fragment.pcd,copy_of_knot.ply,copy_of_lena_color.jpg由于某些原因未显示在vscode上。 (我能够通过资源管理器和目录进行确认)
当我打开copy_of_lena_color.jpg时,我看到了一个经常出现在图像处理中的女性形象。

似乎可以通过指定文件名读取文件来将其用作数据。
而且,如果将其打印,您可以看到大多数基本信息。

pointcloud.py(发生错误)

在Open3D中启动\\ Pointcloud.py /示例/ Python /基本。

1
python .\pointcloud.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# examples/Python/Basic/pointcloud.py

import numpy as np
import open3d as o3d

if __name__ == "__main__":

    print("Load a ply point cloud, print it, and render it")
    pcd = o3d.io.read_point_cloud("../../TestData/fragment.ply")
    print(pcd)
    print(np.asarray(pcd.points))
    o3d.visualization.draw_geometries([pcd])

    print("Downsample the point cloud with a voxel of 0.05")
    downpcd = o3d.geometry.voxel_down_sample(pcd, voxel_size=0.05)
    o3d.visualization.draw_geometries([downpcd])

    print("Recompute the normal of the downsampled point cloud")
    o3d.geometry.estimate_normals(
        downpcd,
        search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1,
                                                          max_nn=30))
    o3d.visualization.draw_geometries([downpcd])

    print("Print a normal vector of the 0th point")
    print(downpcd.normals[0])
    print("Print the normal vectors of the first 10 points")
    print(np.asarray(downpcd.normals)[:10, :])
    print("")

    print("Load a polygon volume and use it to crop the original point cloud")
    vol = o3d.visualization.read_selection_polygon_volume(
        "../../TestData/Crop/cropped.json")
    chair = vol.crop_point_cloud(pcd)
    o3d.visualization.draw_geometries([chair])
    print("")

    print("Paint chair")
    chair.paint_uniform_color([1, 0.706, 0])
    o3d.visualization.draw_geometries([chair])
    print("")

我遇到了一个错误,但我不在乎。

1
[ViewControl] SetViewPoint() failed because window height and width are not set.[ViewControl] SetViewPoint() failed because window height and width are not set.

拖动鼠标四处移动的东西(房间?)。

似乎它以

层格式读取点云,将其转换为曲面(曲面元素),并生成可以移动的图形。
另外,如果在选择此窗口的同时按H键,则会在终端中显示帮助。
用q键退出。

这似乎是下采样的示例(我不确定这是什么),但是

1
2
3
4
Traceback (most recent call last):
  File ".\pointcloud.py", line 19, in <module>
    downpcd = pcd.voxel_down_sample(voxel_size=0.05)
AttributeError: 'open3d.open3d.geometry.PointCloud' object has no attribute 'voxel_down_sample'

我收到一个错误,它不起作用。
看一下这个问题。
https://github.com/intel-isl/Open3D/issues/1067

我知道了,您当时查看的是错误的文档。有关master分支的文档,请最晚查看。

显然,可以通过conda安装的版本不同于可以通过git clone获得的master分支的版本。因此,似乎与conda安装的v0.7.0对应的提交为

https://github.com/intel-isl/Open3D/tree/v0.7.0

由于它是

,因此我将对此zip压缩。