ヴェズルフェルニルの研究ノート

座右の銘「ただ一人犀の角のように歩め」的な研究活動ノート

【Python】Open3Dの試しインストール

OpenCVやML/DLで物体認識をやっているときに、認識した物体の形状をポリゴンや3D点群データとして扱うことがある。そのためPoint Cloud LibraryやOpen3Dの存在は知っていたが、あるきっかけで、Open3Dについてもっと深く知りたいという欲求が生まれたので、最近Open3Dを研究対象テーマに加えた。

github.com

本格的な研究開発を始める前の取りかかりとして、Open3Dのインストールと動作確認をやってみた。

Open3Dのインストール

まずは、Open3D用のPython仮想環境を作った。

% mkdir open3d_test
% cd open3d_test
% pyenv local 3.7
% poetry init
....    ....
Compatible Python versions [^3.11]:  >=3.7,<3.11
% poetry install
% poetry shell
% python -V
Python 3.10.9

私のPython環境はanyenv + pyenv + Poetryだが、pyenvによって3.6〜3.11のPythonを使い分けている。Open3Dのサイトで対象のPythonバージョンを調べてみると3.7〜3.10だったので、poetryで作る仮想環境のPythonバージョンは上のようにした。

そして、その仮想環境にOpen3Dをインストールした。

% poetry add open3d

初回のインストール時は少し時間がかかる。Open3Dは多くのパッケージに依存しているようだ。Open3Dと一緒に追加されたパッケージを確認してみると、下のようになっていた。

% pip list
Package              Version
-------------------- --------
ansi2html            1.8.0
attrs                23.1.0
certifi              2023.5.7
charset-normalizer   3.2.0
click                8.1.4
ConfigArgParse       1.5.5
dash                 2.11.1
dash-core-components 2.0.0
dash-html-components 2.0.0
dash-table           5.0.0
fastjsonschema       2.17.1
Flask                2.2.5
idna                 3.4
itsdangerous         2.1.2
Jinja2               3.1.2
jsonschema           4.17.3
jupyter_core         4.12.0
MarkupSafe           2.1.3
nbformat             5.7.0
nest-asyncio         1.5.6
numpy                1.21.6
open3d               0.17.0
packaging            23.1
pip                  23.1.2
plotly               5.15.0
pyrsistent           0.19.3
requests             2.31.0
retrying             1.3.4
setuptools           67.8.0
six                  1.16.0
tenacity             8.2.2
traitlets            5.9.0
typing_extensions    4.7.1
urllib3              2.0.3
Werkzeug             2.2.3
wheel                0.40.0

続いて、Open3Dの動作環境の確認を行った。

% python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'sklearn'
$ poetry add scikit-learn
Configuration file exists at /Users/yuhri/Library/Preferences/pypoetry, reusing this directory.

[tool.poetry]
Consider moving TOML configuration files to /Users/yuhri/Library/Application Support/pypoetry, as support for the legacy directory will be removed in an upcoming release.
Using version ^1.3.0 for scikit-learn

Updating dependencies
Resolving dependencies... (0.2s)

The current project's Python requirement (>=3.7,<3.11) is not compatible with some of the required packages Python requirement:
  - scikit-learn requires Python >=3.8, so it will not be satisfied for Python >=3.7,<3.8

Because no versions of scikit-learn match >1.3.0,<2.0.0
 and scikit-learn (1.3.0) requires Python >=3.8, scikit-learn is forbidden.
So, because open3d-test depends on scikit-learn (^1.3.0), version solving failed.

  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties

    For scikit-learn, a possible solution would be to set the `python` property to ">=3.8,<3.11"

    https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies,
    https://python-poetry.org/docs/dependency-specification/#using-environment-markers

% vi pyproject.toml
....    ....
[tool.poetry.dependencies]
- python = ">=3.7,<3.11"
+ python = ">=3.8,<3.11"
$ poetry add scikit-learn

最初にモジュールsklearnが足りないと言ってくるが、これはscikit-learnのことなので、それをインストールしようとすると、上のような警告が表示される。現時点で最新版のscikit-learnPython 3.8〜3.10でしか使えないらしい。

それで、pyproject.toml内の依存Pythonバージョン定義を上のように書き換えて、scikit-learnをインストールした。

さらに続けて、Open3Dの依存パッケージを追加していった。

% python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'yaml'
% poetry add pyyaml
$ python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'addict'
% poetry add addict
% python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'PIL'
% poetry add pillow
% python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'pandas'
% poetry add pandas
% python -c "import open3d as o3d"
....    ....
ModuleNotFoundError: No module named 'tqdm'
% poetry add tqdm
% python -c "import open3d as o3d"

コマンドpython -c "import open3d as o3d"で警告が表示されなければ、依存パッケージはすべて追加できて動作環境が整ったことになるようだ。Open3Dは上記のパッケージにも依存しているらしいが、それならインストール時に一緒に追加してくれれば良いのに思うのだが。

Open3Dの動作確認

これでやっと動作環境が整ったようだ。最後に、GitHubからOpen3Dのソースを取得して、その中のPythonサンプルプログラムを動かしてみた。

% git clone https://github.com/isl-org/Open3D.git
% python Open3D/examples/python/visualization/demo_scene.py

上の画像をマウスでドラッグすると3次元方向に動かせる。こういうのを見ると、やっぱり3Dは面白いなぁと思う。

じつは、コンピュータグラフィックスにすごく興味が湧いてきて、いまUnityも使い始めている。Open3Dの研究を始めたのは、これをiOSAndroidで動かしてみたいと思ったからだ。

Open3D-iOSというパッケージが存在しており、すでにiOSではOpen3Dが使えるらしい。それなら、これのAndroid版を作ってみたい。さらに、UnityでもOpen3Dを使えるようにしたい。iOSAndroid両方でUnity上でOpen3Dが使えるようにすることをこの研究の最終目的としている。

【参照リンク】

self-development.info