はじめに
この記事は,Ubuntu系の計算機にオープンソースの
フォトグラメトリを行う環境を構築する手順の記載となります.
各オープンソースの最新版で環境構築できたので,備忘録として残しておきます.
昨年記事: オープンソースによるフォトグラメトリを実行するための環境構築
フォトグラメトリとは
立体復元対象が写っている複数の写真から,
立体復元対象の3Dモデルを生成する手法のことです.
計算機スペック
- OS: LinuxMint21.3(Ubuntu22.04相当)で環境構築を行います
- フォトグラメトリに使用する計算機のCPUとGPUは高スペックであることが望ましい(計算時間がかかります.)
- CPUはamd64プロセッサ(intelやryzenで大丈夫かと,arm64系は多分インストールできません.)
- GPUはGeForce RTX 3080 Tiを使用
- CUDAが必須(NVIDIA系のGPUが必要になります.)
- make -j32を使っています.(著者環境なので,CPUのコア数で適宜変更してください.)
インストールするオープンソースフォトグラメトリライブラリ
- openMVS (https://github.com/cdcseacave/openMVS)
-
COLMAP (https://colmap.github.io/)
(OpenSfMは更新されていないようなので・・・)
クリーンインストールした状態からの環境構築手順
- 必要に応じて適宜変更して行ってください.
1. 初期設定およびnvidiaドライバのインストール
ユーザディレクトリの英語化
$ LANG=C xdg-user-dirs-gtk-update
パッケージの更新
$ sudo apt update
$ sudo apt upgrade
vimをインストール(著者はvimを使うので)
$ sudo apt install vim
nouveauの確認
$ lsmod | grep nouveau
# このコマンドを実行後,何か表示されたら,次の内容を行うこと
# 表示されない場合,nvidiaドライバの確認へ
nouveauの無効化の準備
$ sudo vim /etc/modprobe.d/blacklist-nouveau.conf # 次の内容を書き込んでください
blacklist-nouveau.confに書き込む内容
blacklist nouveau
options nouveau modeset=0
nouveauの無効化,再起動
$ sudo update-initramfs -u
$ sudo reboot
nouveauの無効化の確認および,nvidiaドライバの確認
$ lsmod | grep nouveau # 何も表示しないことを確認する
$ ubuntu-drivers devices # recommended表示の nvidia-driver-○○ の "○○"をメモする
nvidiaドライバのインストール
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt install nvidia-driver-535 # メモした"○○"をインストール(今回の場合は535をインストール)
$ sudo reboot # 再起動すれば,nvidiaドライバが機能します.
2. CUDAのインストール(cuda12.1をインストールします,別件で著者はPyTorchを使うため)
- CUDA Toolkit 12.1 Update 1 Downloadsを参考にインストールします.
- Select Target Platformは以下を選択
- Operating System: Linux
- Architecture: x86_64
- Distribution: Ubuntu
- Version: 22.04
- Installer Type: deb(local)
- ただし,cuda-toolkitをインストールします.
CUDAをインストール(最後だけ注意)
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
$ sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
$ sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
$ sudo apt update
$ sudo apt install cuda-toolkit-12-1
CUDAのパスを通す
$ vim .bashrc
.bashrcの最後に以下を記載する
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
設定を反映させる
$ source .bashrc
$ nvcc -V # このコマンドが実行できればOK
3. OpenMVSのインストール(参考サイト)
必要パッケージのインストール(Ceres Solver)
$ sudo apt install git cmake cmake-curses-gui cmake-gui build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config libeigen3-dev libatlas-base-dev libsuitesparse-dev libgoogle-glog-dev libgflags-dev libsuitesparse-dev
Ceres Solverのインストール(最新安定版を選択: 今回は2.2.0)
$ git clone https://ceres-solver.googlesource.com/ceres-solver -b 2.2.0
$ cd ceres-solver
$ mkdir build
$ cd build
$ cmake .. -DEIGENSPARSE=ON -DSUITESPARSE=ON -DSuiteSparse_AMD_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_CAMD_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_COLAMD_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_CCOLAMD_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_CHOLMOD_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_SPQR_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_Config_INCLUDE_DIR=/usr/include/suitesparse -DSuiteSparse_Config_LIBRARY=/usr/lib/x86_64-linux-gnu/libsuitesparseconfig.a
$ make -j32
$ sudo make install
$ cd
参考URL: Ceres Solver
必要パッケージのインストール(OpenMVS)
# Prepare and empty machine for building:
$ sudo apt install libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
# Boost (Required)
$ sudo apt install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
# OpenCV (Required)
$ sudo apt install libopencv-dev
# CGAL (Required)
$ sudo apt install libcgal-dev libcgal-qt5-dev
# VCGLib (Required)
$ cd /usr/local/
$ sudo git clone https://github.com/cdcseacave/VCG.git vcglib
$ sudo chown -R $USER vcglib
$ cd
# GLFW3 (Optional)
$ sudo apt install freeglut3-dev libglew-dev libglfw3-dev
# OpenMVS
$ sudo apt install python3-dev
$ git clone https://github.com/cdcseacave/openMVS.git -b v2.3.0
$ mkdir openMVS_build
$ cd openMVS_build
$ cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/usr/local/vcglib"
$ make -j32
$ sudo make install
$ cd
参考URL: OpenMVS Building
OpenMVSのパスを通す
$ vim .bashrc
.bashrcのPATHを以下の内容に変更する
export PATH="/usr/local/cuda/bin:/usr/local/bin/OpenMVS:$PATH"
設定を反映させる
$ source .bashrc
4. COLMAPのインストール
必要パッケージのインストール
$ sudo apt install git cmake ninja-build build-essential libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libeigen3-dev libflann-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgtest-dev libsqlite3-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libceres-dev
コンパイラのインストール
$ sudo apt install gcc-10 g++-10
コンパイラのパスを通す
$ vim .bashrc
.bashrcの最後に以下の内容を追記する
export CC=/usr/bin/gcc-10
export CXX=/usr/bin/g++-10
export CUDAHOSTCXX=/usr/bin/g++-10
設定を反映させる
$ source .bashrc
必要パッケージのインストール
$ sudo apt install nvidia-cuda-toolkit nvidia-cuda-toolkit-gcc libcgal-qt5-dev
COLMAPのインストール
$ git clone https://github.com/colmap/colmap.git -b 3.9
$ cd colmap
$ vim CMakeLists.txt
CMakeLists.txtの最初の1行目に以下を追記する
set(CMAKE_CUDA_COMPILER "/usr/local/cuda/bin/nvcc")
COLMAPのインストール(続き)
$ mkdir build
$ cd build
使用するGPUのCompute Capabilityを調べておく
- 参考URL: https://www.hpc.co.jp/library/commentary/gpu-compute-capability-summary/
- 著者の場合: GeForce RTX 3080 Tiなので8.6
COLMAPのインストール(続き)
$ cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=86
# GeForce RTX 3080 TiのCompute Capability 8.6の小数点を除去した値を指定
# GeForce RTX 4090使用の場合,-DCMAKE_CUDA_ARCHITECTURES=89 となる
$ ninja
$ sudo ninja install
$ cd
5. COLMAP,OpenMVSの実行例
OpenMVSのサンプル画像をダウンロードするしてフォトグラメトリを実行
$ git clone https://github.com/cdcseacave/openMVS_sample.git
$ cd openMVS_sample
$ rm -rf !(images) # imagesフォルダ以外すべて削除する
# COLMAPの処理
$ colmap feature_extractor --database_path database.db --image_path ./images
$ colmap exhaustive_matcher --database_path database.db
$ mkdir sparse
$ mkdir dense
$ colmap mapper --database_path database.db --image_path ./images --output_path ./sparse
$ colmap image_undistorter --image_path ./images --input_path ./sparse/0 --output_path ./dense
# OpenMVSの処理
$ InterfaceCOLMAP -i ./dense -o scene.mvs
$ DensifyPointCloud ./scene.mvs
$ ReconstructMesh ./scene_dense.mvs
$ TextureMesh -i scene_dense.mvs --mesh-file scene_dense_mesh.ply
$ Viewer -i scene_dense_texture.ply
# Ctrl-CでViewerを止める