OpenCV build on Jetson Nano

opencv OpenCV

この記事ではOpenCVをJetson Nanoでビルドする方法について解説します。こちらの記事でPyTorchをJetson Nanoでビルドする方法を解説しましたが、OpenCVに関してはCUDA, cuDNNが有効なパッケージが提供されていないため、自分でOpenCVをビルドする必要があります。通常OpenCVをビルドするとデフォルトのpython3が使用されますが、任意のpython3バージョンに対応したビルド方法を解説します。

この記事でもpython3.8の例を説明します。なお説明で使用するスクリプトは https://github.com/mdegans/nano_build_opencv のレポジトリに対して追加の設定と説明のために修正を加えたものとなります。OpenCVは4.6.0を使用します。全体のスクリプトは https://github.com/otamajakusi/build_jetson_nano_libraries にあります。

install package

必要なパッケージをインストールします。nvidia-cuda、nvidia-cudnn8もインストールしています。

sudo apt-get update sudo apt-get install -y \ build-essential \ cmake \ git \ gfortran \ libatlas-base-dev \ libavcodec-dev \ libavformat-dev \ libavresample-dev \ libcanberra-gtk3-module \ libdc1394-22-dev \ libeigen3-dev \ libglew-dev \ libgstreamer-plugins-base1.0-dev \ libgstreamer-plugins-good1.0-dev \ libgstreamer1.0-dev \ libgtk-3-dev \ libjpeg-dev \ libjpeg8-dev \ libjpeg-turbo8-dev \ liblapack-dev \ liblapacke-dev \ libopenblas-dev \ libpng-dev \ libpostproc-dev \ libswscale-dev \ libtbb-dev \ libtbb2 \ libtesseract-dev \ libtiff-dev \ libv4l-dev \ libxine2-dev \ libxvidcore-dev \ libx264-dev \ pkg-config \ python3.8-dev \ python3-numpy \ python3-matplotlib \ python3-pip \ qv4l2 \ v4l-utils \ v4l2ucp \ zlib1g-dev \ nvidia-cuda \ nvidia-cudnn8
Code language: Bash (bash)

次にpython3.8のパッケージをインストールします。ポイントは、予めインストールされているopencvパッケージと、python3のnumpyをアンインストールし、python3.8のnumpyをインストールする点です。

apt list --installed | grep -i opencv | awk -F/ '{print $1}'| xargs sudo apt purge -y sudo python3 -m pip install -U pip sudo python3 -m pip uninstall -y numpy sudo python3.8 -m pip install -U pip sudo python3.8 -m pip install setuptools sudo python3.8 -m pip install numpy
Code language: Bash (bash)

build and install OpenCV

OpenCVをクローンします。

git clone --depth 1 --branch 4.6.0 https://github.com/opencv/opencv.git git clone --depth 1 --branch 4.6.0 https://github.com/opencv/opencv_contrib.git
Code language: Bash (bash)

CMAKFLAGSを設定します。

CMAKEFLAGS=" -D BUILD_EXAMPLES=OFF -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_ARCH_BIN=5.3,6.2,7.2 -D CUDA_ARCH_PTX= -D CUDA_FAST_MATH=ON -D CUDNN_VERSION='8.0' -D EIGEN_INCLUDE_PATH=/usr/include/eigen3 -D ENABLE_NEON=ON -D OPENCV_DNN_CUDA=ON -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_CUBLAS=ON -D WITH_CUDA=ON -D WITH_CUDNN=ON -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D WITH_OPENGL=ON -D PYTHON3_EXECUTABLE=python3.8 -D PYTHON3_INCLUDE_PATH=$(python3.8 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -D PYTHON3_PACKAGES_PATH=$(python3.8 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.8.so"
Code language: Bash (bash)

ポイントは、デフォルトのpython3を使用しないため、PYTHON3_EXECUTABLE、PYTHON3_INCLUDE_PATH、PYTHON3_PACKAGES_PATH、PYTHON3_LIBRARYをそれぞれ設定する必要がある点です。

ビルド&インストールします。make -j$(nproc)としてJetson Nanoのコア数4を指定していますが、私の環境では問題なくビルドできました。4.6.0以外の別のOpenCVのバージョンで実行する場合は、 https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html を参考にしてみてください。

cd opencv mkdir build cd build cmake ${CMAKEFLAGS} .. make -j$(nproc) sudo make install
Code language: Bash (bash)

時間は2時間40分程度かかります。

以上です。

参考