金子邦彦研究室インストールUbuntu, WSL2OpenCV, OpenCV Contrib のインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu 上)

OpenCV, OpenCV Contrib のインストール,CUDA 対応可能(ソースコードを使用)(Ubuntu 上)

Ubuntu で,OpenCV 最新版をソースコードからビルドして,インストールする手順をスクリーンショット等で説明する.

ユースケース.OpenCVは「apt install opencv-dev」で簡単にインストールできるが,OpenCV の最新版を追いかけたい場合.自分の環境にあわせてビルドしたい(NVidia CUDA を使うなど)場合は,ソースコードからビルドする.

目次

  1. 前準備
  2. Ubuntu で OpenCV のビルドとインストール(OpenCV サイトから最新版をダウンロード)

OpenCV は,実時間コンピュータビジョン (real time computer vision) の アルゴリズムと文書とサンプルコードの集まり.

【サイト内の OpenCV 関連ページ】

【OpenCV の公式情報】

前準備

Ubuntu のシステム更新

UbuntuUbuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する.

UbuntuUbuntu のインストールは別ページ »で説明

sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now

C/C++ コンパイラー,make,パッケージツール,qt5-qmake のインストール

端末で,次のコマンドを実行する.

sudo apt -y install build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config
sudo apt -y install qt5-qmake

NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.7, NVIDIA cuDNN v8.4.1 のインストールのインストール(Ubuntu 上)

Ubuntu での NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.7, NVIDIA cuDNN v8.4.1 のインストール: 別ページ »で説明している.

Git, cmake, curl のインストール(Ubuntu 上)

インストールするには,端末で,次のコマンドを実行する.

sudo apt -y install git cmake cmake-curses-gui cmake-gui curl

Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)

Python のインストールは行わない(Ubuntu のシステム Python を用いる.)

Python, pip のコマンドでの起動のまとめ.

Ubuntu のシステム Python を用いるとき, python, pip は,次のコマンドで起動できる.

Ubuntu での Python 開発環境(JupyterLab, spyder, nteract)のインストール: 別ページ »で説明している.

Python3 開発用ファイル,pip, setuptools, venv のインストール

端末で,次のコマンドを実行する.

sudo apt -y update
sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential

Ceres Solver のインストール(Ubuntu 上)

端末で,次のコマンドを実行する.
sudo apt -y install  libceres-dev libceres2

Intel Performance ライブラリのインストール

Intel Performance ライブラリを使いたいときは,インストールしておく (必ずしもインストールする必要はない)

Inter Performance ライブラリのインストールは,別ページ »で説明している.

Ubuntu で OpenCV のビルドとインストール

  1. 前提ソフトウェア類

    端末で,次のコマンドを実行する.

    sudo apt -y build-dep libopencv-dev
    sudo apt -y install libgtk2.0-dev
    sudo apt -y install openalpr openalpr-utils libopenalpr-dev
    sudo apt -y install openni2-utils libopenni2-dev
    sudo apt -y install libpcl-dev
    sudo apt -y install libguava-java
    sudo apt -y install python3-dev pylint3 flake8 python3-flake8
    sudo apt -y install libjasper-dev libleveldb-dev liblmdb-dev 
    sudo apt -y install libatlas-base-dev libopenblas-dev liblapack-dev libtbb-dev libeigen3-dev
    
  2. OpenCV のバージョンの確認

    次のページなどで,最新バージョンのバージョン番号を確認できる.

    https://github.com/opencv/opencv

  3. ソースコードのダウンロードと cmake の実行

    端末で,次のコマンドを実行する. 「-b 4.6.0」でバージョン指定している. 「/usr/local/cuda-11.7」のところは,NVIDIA CUDA ツールキット をインストールしたディレクトリに読み替えること.

    NVIDIA ドライバ (https://www.nvidia.com/download/index.aspx), NVIDIA CUDA ツールキット 11.7,NVIDIA cuDNN v8.2 のインストール: 別ページ »で説明

    Intel MKL を使いたいときは「-DUSE_MKL=ON」に設定する.このとき, 「/opt/intel/compilers_and_libraries_2020.0.166/linux/mkl/include」のところは,Intel MKL の mkl.h があるディレクトリに読み替えること.Intel MKL のインストールのインストールは,別ページ »で説明している.

      cd /usr/local
      sudo rm -rf opencv
      sudo git clone --recursive -b 4.6.0 https://github.com/opencv/opencv.git
      sudo chown -R ${USER} /usr/local/opencv
      cd /usr/local
      sudo rm -rf opencv_contrib
      sudo git clone --recursive -b 4.6.0 https://github.com/opencv/opencv_contrib.git
      sudo chown -R ${USER} /usr/local/opencv_contrib
      cd /usr/local/opencv
      sudo rm -rf build
      sudo mkdir build
      sudo chown -R ${USER} /usr/local/opencv/build
      cd build
      CUDA_PATH="/usr/local/cuda-11.7" CFLAGS="-I/usr/local/cuda-11.7/include -I/opt/intel/compilers_and_libraries/linux/mkl/include" LDFLAGS="-L/usr/local/cuda-11.7/lib64" \
      cmake .. -D CMAKE_BUILD_TYPE=RELEASE \
      -D BUILD_opencv_world=ON \
      -D BUILD_opencv_apps=ON \
      -D OPENCV_EXTRA_MODULES_PATH=/usr/local/opencv_contrib/modules \
      -D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \
      -D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblas.so \
      -D WITH_PYTHON=ON \
      -D BUILD_opencv_python2=OFF \
      -D BUILD_opencv_python3=ON \
      -D PYTHON_DEFAULT_EXECUTABLE=python3 \
      -D WITH_MKL=ON \
      -D WITH_CUDA=ON \
      -D CUDA_FAST_MATH=ON \
      -D WITH_CUBLAS=ON \
      -D WITH_CUDNN=ON \
      -D WITH_NVCUVID=OFF \
      -D OPENCV_DNN_CUDA=OFF \
      -D BUILD_opencv_cudaimgproc=OFF \
      -D BUILD_EXAMPLES=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_TESTS=ON \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_BIN_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON 
    

    補足説明

    • cmake の実行で「CMake Generate step failed. Build files cannot be regenerated correctly」と表示される場合がある. この場合にはgit の実行(2箇所ある)で「-b 4.6.0」のようにバージョン指定する(最新版を追いかけない)と解決する場合がある.
    • MKL (Intel Math Kernel Library) を使わないときは「-D WITH_MKL=OFF
    • NVIDIA CUDA使わないときは,次の設定を外す
        -D WITH_CUDA=ON \
        -D CUDA_FAST_MATH=ON \
        -D WITH_CUBLAS=ON \
        -D WITH_CUDNN=ON \
        -D WITH_NVCUVID=OFF \
        -D OPENCV_DNN_CUDA=ON \
        -D CUDA_ARCH_PTX=7.5 \
        -D BUILD_opencv_cudaimgproc=OFF \
      
    • cmake のオプションについては「ccmake ..」で確認できる
    • 古いバージョンである OpenCV 3.4.1ubuntu 18.04 でビルドするとき 「unsupported GNU version! gcc version later than 6 are not supported!」というエラーが出る場合がある. このエラーを回避するために,次のコマンドを実行する
      CC=gcc-6 CXX=g++-6 cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D INSTALL_PYTHON_EXAMPLES=ON \
            -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv_contrib/modules \
            -D BUILD_opencv_python3=ON \
            -D PYTHON_DEFAULT_EXECUTABLE=python3 \
            -D BUILD_EXAMPLES=ON ..
      
  4. cmake の結果の確認

    エラーメッセージが出ていないこと

    [image]
  5. ビルド

    端末で,次のコマンドを実行する.

    cd /usr/local/opencv/build
    CUDA_PATH="/usr/local/cuda-11.7" CFLAGS="-I/usr/local/cuda-11.7/include" LDFLAGS="-L/usr/local/cuda-11.7/lib64" \
    make -j4
    

    [image]
  6. ビルドの結果の確認

    エラーメッセージが出ていないことを確認

    [image]
  7. インストール

    端末で,次のコマンドを実行する.

    sudo make install
    sudo /sbin/ldconfig
    
  8. インストールの結果の確認

    エラーメッセージが出ていないことを確認

    [image]
  9. バージョン確認

    バージョン番号が表示されれば OK.下の図とは違うバージョンが表示されることがある.

    python3 -c "import cv2; print( cv2.__version__ )"
    

    [image]

OpenCV を用いた画像表示の例

OpenCV で画像表示を行う C++ プログラム

ファイル名 a.cpp で保存.

#include<opencv2/opencv.hpp>

int main (int argc, char *argv[])
{
  cv::Mat bgr = cv::imread("/usr/local/share/opencv4/samples/data/fruits.jpg");
  cv::imshow("", bgr);
  cv::waitKey(0);
  cv::destroyAllWindows();

  return 0;
}

次のようなコマンドで実行

g++ -I/usr/local/include/opencv4 -o a.out a.cpp -L/usr/local/lib -lopencv_world
./a.out

ソースコードからビルドするときに「-D BUILD_opencv_world=ON」を付けなかったときは, 次のようなコマンドで実行

g++ -I/usr/local/include/opencv4 -o a.out a.cpp -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs
./a.out

画像表示が行われる.画面をクリックし,なにかのキーを押して閉じる.

[image]

OpenCV で画像表示を行う Python プログラム

Python プログラムを実行する

Python プログラムの実行: 別ページ »で説明

Python のまとめ: 別ページ »にまとめ

import cv2
CVSAMPLEDAT="/usr/local/share/opencv4/samples/data/"
bgr = cv2.imread(CVSAMPLEDAT + "fruits.jpg")
cv2.imshow("", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる

[image]