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
し直してみよう。