Learning Open3D→Tutorial→上級編→ヘッドレス・レンダリング
ヘッドレス・レンダリング
このチュートリアルでは、ディスプレイなしで端末から画像をレンダリングし保存する方法について説明する。
注意 この機能は実験的なもの。Ubuntu 16.04の環境でしかテストしていない。
$ sudo apt-get install libosmesa6-dev
上記の方法を使わない場合、ソースファイルからOSMesaの最新版をダウンロードし、構築する:
# download OSMesa 2018 release
$ cd
$ wget ftp://ftp.freedesktop.org/pub/mesa/mesa-18.0.0.tar.gz
$ tar xf mesa-18.0.0.tar.gz
$ cd mesa-18.0.0/
# configure compile option and build
$ ./configure --enable-osmesa --disable-driglx-direct --disable-gbm --enable-dri --with-gallium-drivers=swrast
$ make
# add OSMesa to local path.
$ export PATH=$PATH:~/mesa-18.0.0
$ sudo apt-get install virtualenv python-pip
$ virtualenv -p /usr/bin/python3 py3env
$ source py3env/bin/activate
(py3env) $ pip install numpy matplotlib
このスクリプトは、py3envをインストールしてアクティブにする(プロンプトがpyenvになっている)。 numpyとmatplotlibが必要なモジュールなのでpy3envにpipを用いてインストールする。
Anacondaユーザーにはこの構成を使用することを勧める。というのは、conda install matplotlibがOSMesaに基づかない追加モジュールをインストールするので、実行時にセグメンテーションエラーが発生するからである。
(py3env) $ cd ~/Open3D/
(py3env) $ mkdir build && cd build
次のステップでは、指定する必要がある2つのcmakeフラグがある。
DENABLE_HEADLESS_RENDERING = ON:このフラグはglewとglfwがOSMesaを使用する必要があることを通知する。DBUILD_GLEW = ON -DBUILD_GLFW = ON:ヘッドレスレンダリングはglew 2.1およびglfw 3.3-devバージョンでのみ機能することに注意。 ほとんどの場合、これらのバージョンは素のUbuntuシステムにはインストールされていない。これらのCMakeオプションを使用し、ソースからglew 2.1およびglfw 3.3-devを強制的にビルドする。その結果、cmakeコマンドは次のようになる:
(py3env) $ cmake -DENABLE_HEADLESS_RENDERING=ON \
-DBUILD_GLEW=ON \
-DBUILD_GLFW=ON \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
..
ここで-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3はInstall virtualenvで用いたのと同じパスとすること。
cmakeが成功すればmakefileが生成されるので、Open3Dを構築する: (CPUコアがたくさんあるマシンで作るなら-jオプションを使うべき)
(py3env) $ make # or make -j in multi-core machine
(py3env) $ cd ~/Open3D/build/lib/Tutorial/Advanced/
(py3env) $ python headless_rendering.py
これにより次のような出力が得られるはず:
Capture image 00000
Capture image 00001
Capture image 00002
Capture image 00003
Capture image 00004
Capture image 00005
:
Capture image 00030
レンダリングされる画像は~/Open3D/build/lib/TestData/depthと~/Open3D/build/lib/TestData/imagesディレクトリにある
注意
headless_rendering.pyはpngファイル形式で保存する。
これには時間がかかる場合があるため、目的に合わせてスクリプトを調整しよう。
glewとglfwがOSMesaと正しくリンクしなかった場合、次のエラーでクラッシュする可能性がある。
「GLFWエラー:X11:DISPLAY環境変数がありません。 GLFWの初期化に失敗しました』
その場合は-DBUILD_GLEW = ONと-DBUILD_GLFW = ONフラグを指定してcmakeし直してみよう。