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-cudnn8Code 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 numpyCode 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.gitCode 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 installCode language: Bash (bash)

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

以上です。

参考