Background
OpenCV Advent Calendar 2020で何か書こうと思って、最新のOpenCVのversionである4.5をbuildしたのですが思いの外にエラーが出て半日かかってしまいました。
どうやったらbuildできたか、または失敗したかを書いていきます。
Points
結局のところ、
- cuda系のドライバー・ライブラリを削除、再インストールする
-
OpenCV のソースコードはgithubでcloneするのではなく、圧縮ファイルを使った方が良いgit cloneでも問題なくbuild出来た。時々commitされているコードが他のパッケージに影響を受けてerrorになっている場合があるっぽい(2020/12/7) - Ubuntu18.04を使っていたためか、gccのversionは6系にセットする
でbuildが成功しました。
cuda系のドライバー・ライブラリを削除、再インストールする
まず、既にインストールされているパッケージ・ライブラリを削除する。
(UbuntuにNvidia GPUのDriver + CUDAをInstallする(GTX1080対応版)をみたった。)
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
CUDA Toolkit 11.1 Update 1 Downloadsから最新版をダウンロードしてインストールします。
runfile自体3GBととても重いです。リポジトリをインストールしてその後でaptを使ってインストールする方法があるのですが、正常に安定的に作動させるにはこちらが確実かもしれません。
wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run
#完了後にサーバを再起動
sudo reboot
で、下記のコマンドでversionが表示できるか確認。
#nvidia driver
nvidia-smi
#cuda
nvcc -V
次にDeep Learning用のライブラリであるcuDNNをインストールします。
nvidia公式からパッケージをダウンロードするのですが事前にサインインする必要があります。ダウンロード後はdpkgを使ってインストールします。
sudo dpkg -i libcudnn8_8.0.5.39-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.deb
sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.1_amd64.deb
OpenCV のソースコードはgithubでcloneするのではなく、圧縮ファイルを使った方が良い git clone, 圧縮ファイルのどちらを使っても結局は良さそう (2020/12/7)
OpenCV Installation in Linuxや他の開発者のページを見るとgithubでcloneしてソースファイルをダウンロードしています。
git clone https://github.com/opencv/opencv.git
cd opencv
#最新版にチェックアウト
git checkout -b 4.5.0
cd ../
git clone https://github.com/opencv/opencv_contrib.git
#最新版にチェックアウト
cd opencv_contrib
git checkout -b 4.5.0
使っているマシンの相性が悪いためかその後buildするとエラーが出てしまって失敗します。
おそらく、世界中の開発者がリアルタイムでコミットしてて、他のパッケージに影響が出ているから、と思ってたりします。
なので、https://github.com/opencv/opencv/releases、https://github.com/opencv/opencv_contrib/releases から圧縮ファイルをダウンロードして解凍した方が確実だと思います。
再度、git clone
にてbranchがmaster
であるのと4.5.0
の両方buildしてみたのですが、どちらとも正常にbuild出来ました。しかし、ときどきコミットがミスっている可能性がありそうなのでgit clone
でbuild errorが出る場合は、圧縮ファイルを使った方が良さそう。
(2020/12/7)
wget https://github.com/opencv/opencv/archive/4.5.0.tar.gz
tar -zxvf 4.5.0.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/4.5.0.tar.gz
tar -zxvf 4.5.0.tar.gz
Ubuntu18.04を使っていたためか、gccのversionは6系にセットする
./
├ build/
├ opencv-4.5.0/
├ opencv_contrib-4.5.0/
とフォルダの構成にします。
それで、 cd build
で移動してcmakeコマンドを打つのですが、もしエラーが続く場合は先頭にCC=gcc-6 CXX=g++-6
を付けてgccのバージョンをセットすると良いです。あとは、-D CMAKE_CXX_FLAGS="-std=c++17"
でc++のバージョンを変えてみたらいいかな。
CC=gcc-6 CXX=g++-6 cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_CXX_FLAGS="-std=c++17" \
-D CMAKE_INSTALL_PREFIX=/usr/local/lib/opencv4.5 \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.0/modules \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_TESTS=ON \
-D WITH_MKL=OFF \
-D WITH_CUDA=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUDNN=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_ARCH_BIN=5.2 \
-D CUDA_ARCH_PTX=5.2 \
-D BUILD_EXAMPLES=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_GTK=ON \
-D CVV_DEBUG_MODE=ON \
-D WITH_OPENCL=ON \
-D WITH_OPENGL=ON \
-D OPENCV_SKIP_DLLMAIN_GENERATION=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_PYTHON=ON \
-D PYTHON_DEFAULT_EXECUTABLE=python3 \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/kai_walker/.local/lib/python3.6/site-packages/numpy/core/include \
../opencv-4.5.0
あとは、
sudo make install
ldconfig
で完了。
作成したlibファイルは -D CMAKE_INSTALL_PREFIX=/usr/local/lib/opencv4.5
で指定したフォルダに保管されます。
PostScripts
build時のオプションは何使えばいいかよくわからんすね。 CUDAの場合は WITH_CUDA=ON
以外何設定すればいいかです。まとまったページがあればいいんだけど、現状では CMakeLists.txt
のMakeファイル見るしかないか。
Reference
- OpenCV 4.1.0をWindowsでビルドする手順
- OpenCV Installation in Linux
- cudacodecモジュールを使ってみよう
- OpenCVのビルドインストール(CUDA対応環境用)
- OpenCV 4.3.0 (最新版) のビルドとインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu 上)
- CUDA cuDNNのインストール手順
- CUDA,cuDNNのバージョン確認
- UbuntuにNvidia GPUのDriver + CUDAをInstallする(GTX1080対応版)
- Ubuntu18.04にCUDA10.1+cuDNN7.6.5+tensorflow-2.3.0をインストール