はじめに
この記事は,Ubuntu系の計算機にオープンソースの
フォトグラメトリを行う環境を構築する手順の記載となります.
フォトグラメトリとは
立体復元対象が写っている複数の写真から,
立体復元対象の3Dモデルを生成する手法のことです.
計算機スペック
- OSはUbuntu20.04で環境構築を行います
(Ubuntu22.04ではこの方法だとインストールできません.原因はまだ未解決.)- Linux Mint 20 や Ubuntu Mate 20.04でも同じ方法で環境構築可能です.
- CPUとGPUは高スペックであることが望ましい(計算時間がかかります.)
- CPUはAMD64プロセッサ(arm64はインストールできません.)
- CUDAが必須(Nvidia系のGPUが必要になります.)
- make -j32を使っています.(CPUのコア数で適宜変更してください.)
インストールするフォトグラメトリオープンソース
- OpenSfM (https://opensfm.org/)
- openMVS (https://github.com/cdcseacave/openMVS)
- COLMAP (https://colmap.github.io/)
クリーンインストールした状態からの環境構築手順
- 必要に応じて適宜変更して行ってください.
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 # Recommendされている nvidia-driver-○○-open の "○○"をメモする
nvidiaドライバのインストール
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt install nvidia-driver-525 # メモした"○○"をインストール(今回の場合は525をインストール)
$ sudo reboot # 再起動すれば,nvidiaドライバが機能します.
2. CUDAのインストール(cuda11.6をインストールします)
- CUDA Toolkit 11.6 Update 2 Downloadsを参考にインストールします.
- Select Target Platformは以下を選択
- Architecture: x86_64
- Distribution: Ubuntu
- Version: 20.04
- Installer Type: deb(local)
- ただし,cuda-toolkitをインストールします.
CUDAをインストール(最後だけ注意)
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda-repo-ubuntu2004-11-6-local_11.6.2-510.47.03-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu2004-11-6-local_11.6.2-510.47.03-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-ubuntu2004-11-6-local/7fa2af80.pub
$ sudo apt update
$ sudo apt install cuda-toolkit-11-6
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. OpenSfMのインストール
pyenvのインストール(OpenSfMのbuildでPython3.7系を使用するため)
$ sudo apt install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
pyenvのパスを通す
$ vim .bashrc
.bashrcの最後に以下を記載する
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
設定を反映させる
$ source .bashrc
$ pyenv -v # このコマンドが実行できればOK
python3.7系のインストール
$ pyenv install --list # どのバージョンがインストールできるか確認する
$ pyenv install 3.7.16
作業ディレクトリを作成する
# 作業ディレクトリ(3d)を作成し,そのディレクトリ以下はpython3.7.16で動作するようにする
$ mkdir 3d
$ cd 3d
$ pyenv local 3.7.16 # ディレクトリ(3d)以下はpython3.7.16でpythonを動かす
$ pyenv versions # python3.7.16が使用されているかどうかを確認する
OpenSfMに必要なパッケージをインストールする
$ sudo apt install cmake libatlas-base-dev libeigen3-dev libgoogle-glog-dev libopencv-dev libsuitesparse-dev python3-dev python3-numpy python3-opencv python3-pip python3-pyproj python3-scipy python3-yaml meshlab
ceres-solverをインストールする(3dディレクトリで行うこと)
$ curl -L http://ceres-solver.org/ceres-solver-1.14.0.tar.gz | tar xz && cd ceres-solver-1.14.0 && mkdir -p build && cd build
$ cmake .. -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF
$ make -j32
$ sudo make install
$ cd ../../
opengvをインストールする(3dディレクトリで行うこと)
$ git clone https://github.com/paulinus/opengv.git && cd opengv && git submodule update --init --recursive && mkdir -p build && cd build
$ cmake .. -DBUILD_TESTS=OFF -DBUILD_PYTHON=ON -DPYBIND11_PYTHON_VERSION=3.7 -DPYTHON_INSTALL_DIR=~/.pyenv/versions/3.7.16/lib/python3.7/site-packages/
$ make -j32
$ sudo make install
$ cd ../../
OpenSfM(v0.5.1)をインストール(3dディレクトリで行うこと)
$ git clone --recursive https://github.com/mapillary/OpenSfM -b v0.5.1
$ cd OpenSfM
$ pip3 install -U pip setuptools
$ pip3 install opencv-python opencv-contrib-python wheel
$ pip3 install -r requirements.txt
$ python3 setup.py build # エラーが出なければOK
$ cd ../
4. OpenMVSのインストール
OpenSfMに必要なパッケージをインストールする
$ sudo apt install git cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
Eigen(3.2)をインストールする(3dディレクトリで行うこと)
$ git clone https://gitlab.com/libeigen/eigen.git --branch 3.2
$ cd eigen
$ mkdir build && cd build
$ cmake . ..
$ make -j32
$ sudo make install
$ cd ../../
必要なパッケージをインストールする
# Boostのインストール
$ sudo apt install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
# OpenCVのインストール
$ sudo apt install libopencv-dev
# CGALのインストール
$ sudo apt install libcgal-dev libcgal-qt5-dev
# VCGLibのインストール(3dディレクトリで行うこと)
$ git clone -b master https://github.com/cdcseacave/VCG.git vcglib
$ cd vcglib
$ git checkout 88f12f212a1645d1fa6416592a434c29e63b57f0
$ cd ../
# GLFW3のインストール
$ sudo apt install freeglut3-dev libglew-dev libglfw3-dev
OpenMVSのインストール
$ git clone -b v1.1.1 https://github.com/cdcseacave/openMVS.git
$ cd openMVS
$ mkdir openMVS_build && cd openMVS_build
$ cmake . .. -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="~/3d/vcglib"
$ make -j32 # エラーが出なければOK
$ sudo make install
$ cd # COLMAPインストールのため,ホームディレクトリに移動する
5. COLMAPのインストール
- ホームディレクトリで行っています.
必要なパッケージをインストールする
$ sudo apt install git cmake build-essential libboost-program-options-dev libboost-filesystem-dev libboost-graph-dev libboost-system-dev libboost-test-dev libeigen3-dev libsuitesparse-dev libfreeimage-dev libmetis-dev libgoogle-glog-dev libgflags-dev libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libcgal-qt5-dev libatlas-base-dev libsuitesparse-dev
cmakeをアップデートする
$ sudo apt purge cmake
$ sudo apt autoremove
$ wget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1.tar.gz
$ tar xvf cmake-3.25.1.tar.gz
$ cd cmake-3.25.1/
$ ./bootstrap && make -j32 && sudo make install
$ hash -r # bashの場合,このコマンドを行う
$ cmake --version # 3.25.1かどうかを確認する
$ cd
最新版のceres-solverをインストールする(OpenSfMを先にインストールしておくこと)
$ git clone https://ceres-solver.googlesource.com/ceres-solver
$ cd ceres-solver
$ git checkout $(git describe --tags)
$ mkdir build && cd build
$ cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
$ make -j32
$ sudo make install
$ cd
Eigen(3.3.7)をインストールする(OpenMVSを先にインストールしておくこと)
$ git clone https://gitlab.com/libeigen/eigen.git --branch 3.3.7
$ cd eigen
$ mkdir build && cd build
$ cmake . ..
$ make -j32
$ sudo make install
$ cd
COLMAPをインストールする
$ git clone https://github.com/colmap/colmap.git --branch 3.7
$ cd colmap
$ git checkout 079518040b4437c1d1b8067f0167be3fd1a4157b
$ mkdir build && cd build
$ cmake ..
$ make -j32 # エラーが出なければOK
$ sudo make install
$ cd
ここまでエラーが出なければ,環境構築成功となります.
このオープンソースの使用方法に関しては,
次ページ(オープンソースによるフォトグラメトリの実行方法)に記載しました.