【Python】3Dデータ処理を行うOpen3Dのインストール

【Python】3Dデータ処理を行うOpen3Dのインストール プログラミング

「Pythonで3Dデータを扱いたい」
「Pythonで高速に3D画像を処理したい」
「3Dデータを用いた機械学習を試したい」

このような場合には、Open3Dがオススメです。
この記事では、Open3Dについて解説しています。

本記事の内容

  • Open3Dとは?
  • Open3Dのシステム要件
  • Open3Dのインストール
  • Open3Dの動作確認

それでは、上記に沿って解説していきます。

Open3Dとは?

Open3Dとは、3Dデータを扱うオープンソースのPythonライブラリです。
Open3Dの特徴は、以下が公式で主張されています。

  • 3D data structures
  • 3D data processing algorithms
  • Scene reconstruction
  • Surface alignment
  • 3D visualization
  • Physically based rendering (PBR)
  • 3D machine learning support with PyTorch and TensorFlow
  • GPU acceleration for core 3D operations
  • Available in C++ and Python

英語のままの方が、わかりやす部分があるでしょう。
「Surface alignment」なんて、対応する日本語がありません。

上記の特徴は要するに、次のことを言っています。

  • PythonとC++から操作が可能
  • 物理ベースレンダリングによるリアルな3D表現
  • 3D機械学習への対応
  • GPUによる処理の高速化

まさに時代が求めている機能です。
Open3Dは、今後メタバース関連での利用が進むかもしれませんね。

以上、Open3Dのついて説明しました。
次は、Open3Dのシステム要件を確認します。

Open3Dのシステム要件

現時点(2022年2月)でのOpen3Dの最新バージョンは、0.14.1となります。
この最新バージョンは、2021年12月3日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

通常、Python 3.6で動けば、それ以降のバージョンでも動きます。
今だと、Python 3.10系が最新バージョンです。

そのため、次のバージョンでもインストールは可能だと考えます。

$ python -V
Python 3.10.2

しかし、上記のPythonバージョンだとインストールでエラーが出てしまいます。

ERROR: Could not find a version that satisfies the requirement open3d (from versions: none)
ERROR: No matching distribution found for open3d

Pythonライブラリについては、多くのライブラリをインストールしてきました。
しかし、このようなケースはかなり珍しいです。

Open3Dは、Pythonのバージョンをかなり厳格に見ているということでしょう。
でも、それなら次のPython公式開発サイクルには対応して欲しいですね。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

ここは、次の最新バージョンに期待しておきましょう。
とにかく、Pythonのバージョンには従う必要があるということです。

以上、Open3Dのシステム要件を説明しました。
次は、Open3Dのインストールを行います。

Open3Dのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.8.10

また、公式ではPython仮想環境へのインストールが推奨されています。
後述していますが、依存パッケージが数がかなり多いです。
Python仮想環境については、次の記事でまとめています。

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.0.3
setuptools 60.8.1
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Open3Dのインストールです。
Open3Dのインストールは、以下のコマンドとなります。

pip install open3d

インストールには、かなりの時間がかかります。
焦らずに気長に待ちましょう。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package              Version
-------------------- ---------
addict               2.4.0
anyio                3.5.0
argon2-cffi          21.3.0
argon2-cffi-bindings 21.2.0
asttokens            2.0.5
attrs                21.4.0
Babel                2.9.1
backcall             0.2.0
black                22.1.0
bleach               4.1.0
certifi              2021.10.8
cffi                 1.15.0
charset-normalizer   2.0.11
click                8.0.3
cycler               0.11.0
debugpy              1.5.1
decorator            5.1.1
defusedxml           0.7.1
deprecation          2.1.0
entrypoints          0.4
executing            0.8.2
fonttools            4.29.1
idna                 3.3
importlib-resources  5.4.0
ipykernel            6.8.0
ipython              8.0.1
ipython-genutils     0.2.0
ipywidgets           7.6.5
jedi                 0.18.1
Jinja2               3.0.3
joblib               1.1.0
json5                0.9.6
jsonschema           4.4.0
jupyter-client       7.1.2
jupyter-core         4.9.1
jupyter-packaging    0.11.1
jupyter-server       1.13.5
jupyterlab           3.2.9
jupyterlab-pygments  0.1.2
jupyterlab-server    2.10.3
jupyterlab-widgets   1.0.2
kiwisolver           1.3.2
MarkupSafe           2.0.1
matplotlib           3.5.1
matplotlib-inline    0.1.3
mistune              0.8.4
mypy-extensions      0.4.3
nbclassic            0.3.5
nbclient             0.5.10
nbconvert            6.4.1
nbformat             5.1.3
nest-asyncio         1.5.4
notebook             6.4.8
numpy                1.22.2
open3d               0.14.1
packaging            21.3
pandas               1.4.0
pandocfilters        1.5.0
parso                0.8.3
pathspec             0.9.0
pexpect              4.8.0
pickleshare          0.7.5
Pillow               9.0.1
pip                  22.0.3
platformdirs         2.4.1
prometheus-client    0.13.1
prompt-toolkit       3.0.26
ptyprocess           0.7.0
pure-eval            0.2.2
pycparser            2.21
Pygments             2.11.2
pyparsing            3.0.7
pyrsistent           0.18.1
python-dateutil      2.8.2
pytz                 2021.3
PyYAML               6.0
pyzmq                22.3.0
requests             2.27.1
scikit-learn         1.0.2
scipy                1.8.0
Send2Trash           1.8.0
setuptools           60.8.1
six                  1.16.0
sniffio              1.2.0
stack-data           0.1.4
terminado            0.13.1
testpath             0.5.0
threadpoolctl        3.1.0
tomli                2.0.0
tomlkit              0.9.0
tornado              6.1
tqdm                 4.62.3
traitlets            5.1.1
typing_extensions    4.0.1
urllib3              1.26.8
wcwidth              0.2.5
webencodings         0.5.1
websocket-client     1.2.3
wheel                0.36.2
widgetsnbextension   3.5.2
zipp                 3.7.0

過去最高レベルのパッケージ数かもしれません。
それほど、Open3Dには依存関係のあるパッケージが多いということです。

すでに述べましたが、やはりPython仮想環境を利用すべきでしょうね。
おそらく、既存環境への導入はかなりハードルが高いはずです。

なお、インストールの確認は次のコマンドで可能です。
公式では、この確認方法が記載されています。

python -c "import open3d as o3d"

何もエラーが出なければ、Open3Dのインストールは成功です。
エラーが出た場合は、次のコマンドで詳細を確認することになります。

python -W default -c "import open3d as o3d"

以上、Open3Dのインストールを説明しました。
次は、Open3Dの動作確認を行います。

Open3Dの動作確認

サンプルは、以下で公開されています。
https://github.com/isl-org/Open3D/tree/master/examples/python

その中から、シンプルなコードを選びます。
visualization/line_width.py

import open3d as o3d
import random

NUM_LINES = 10


def random_point():
    return [5 * random.random(), 5 * random.random(), 5 * random.random()]


def main():
    pts = [random_point() for _ in range(0, 2 * NUM_LINES)]
    line_indices = [[2 * i, 2 * i + 1] for i in range(0, NUM_LINES)]
    colors = [[0.0, 0.0, 0.0] for _ in range(0, NUM_LINES)]

    lines = o3d.geometry.LineSet()
    lines.points = o3d.utility.Vector3dVector(pts)
    lines.lines = o3d.utility.Vector2iVector(line_indices)
    # The default color of the lines is white, which will be invisible on the
    # default white background. So we either need to set the color of the lines
    # or the base_color of the material.
    lines.colors = o3d.utility.Vector3dVector(colors)

    # Some platforms do not require OpenGL implementations to support wide lines,
    # so the renderer requires a custom shader to implement this: "unlitLine".
    # The line_width field is only used by this shader; all other shaders ignore
    # it.
    mat = o3d.visualization.rendering.MaterialRecord()
    mat.shader = "unlitLine"
    mat.line_width = 10  # note that this is scaled with respect to pixels,
    # so will give different results depending on the
    # scaling values of your system
    o3d.visualization.draw({
        "name": "lines",
        "geometry": lines,
        "material": mat
    })


if __name__ == "__main__":
    main()

上記コードを実行すると、次のような画面が表示されます。
環境によっては、時間がかかる場合もあるでしょう。

画面内をマウスでグリグリと動かすことが可能です。
単純なコードですが、ちゃんとした3Dが表示されています。

これで、Open3Dの動作確認としては十分でしょう。

あとは、サンプルをダウンロードして見ていくだけです。
習うより慣れろの精神でサンプルコードを漁っていきましょう。

以上、Open3Dの動作確認を説明しました。

タイトルとURLをコピーしました