OpenCVやML/DLで物体認識をやっているときに、認識した物体の形状をポリゴンや3D点群データとして扱うことがある。そのためPoint Cloud LibraryやOpen3Dの存在は知っていたが、あるきっかけで、Open3Dについてもっと深く知りたいという欲求が生まれたので、最近Open3Dを研究対象テーマに加えた。
本格的な研究開発を始める前の取りかかりとして、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-learn
はPython 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の研究を始めたのは、これをiOSとAndroidで動かしてみたいと思ったからだ。
Open3D-iOSというパッケージが存在しており、すでにiOSではOpen3Dが使えるらしい。それなら、これのAndroid版を作ってみたい。さらに、UnityでもOpen3Dを使えるようにしたい。iOSとAndroid両方でUnity上でOpen3Dが使えるようにすることをこの研究の最終目的としている。
【参照リンク】