JetsonでROS Melodic向けにCUDAを有効にしたOpenCVをビルドした忘備録
6781 ワード
はじめに
- デフォルトの OpenCV では CUDA が無効になっており、GPU を利用するには OpenCV をソースからビルドする必要があります。
OpenCV のバージョンについて
- JetPack 4.4 ~ 4.6 は Ubuntu 18.04 ベースで、CUDA 10.2 が含まれます。
- Ubuntu 18.04 用の ROS ディストロは Melodic です。
- ROS Melodic のデフォルトの OpenCV のバージョンは 3.2.0 です。
- OpenCV のバージョンを変更してビルドすることも可能ですが、ここでは CUDA を有効にするだけにしたいので、バージョンは同じにします。
ビルド手順
- Installation in Linux を参考にしながらインストールを実行します。
- GitHub からソースをクローンします。
$ cd ~/<my_working_directory> $ git clone -b 3.2.0 --depth 1 https://github.com/opencv/opencv.git $ git clone -b 3.2.0 --depth 1 https://github.com/opencv/opencv_contrib.git $ cd opencv $ mkdir build $ cd build
- 環境に合わせてソースを一部修正します。詳細については下の各節を参照してください。
- NVIDIA NPPI 対応のため
cmake/FindCUDA.cmake
を修正 - fp16 ヘッダファイル対応のため
modules/cudev/include/opencv2/cudev/common.hpp
を修正
- NVIDIA NPPI 対応のため
- CMake を使ってビルドします。オプションの詳細は下の各節を参照してください。
$ cmake \ -DWITH_CUDA=ON \ -DCUDA_ARCH_BIN=xx \ -DENABLE_PRECOMPILED_HEADERS=OFF \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. $ make $ sudo make install
NVIDIA NPPI について
- NVIDIA NPPI は CUDA で画像処理するためのライブラリです
- OpenCV のビルドに必要ですが、CUDA 8.0 以降の NPPI はいくつかに分割されており、OpenCV 3.2.0 ではこの分割に未対応です
- OpenCV 3.4.0 以降は対応済みのようなので、それを参考に
cmake/FindCUDA.cmake
の一部を以下のように変更する必要があります