2020년 8월 27일 목요일

Xavier NX - OpenCV 4.5

 Xavier NX only works with JetPack 4.4 or later. And JetPack 4.4 is provided with OpenCV 4.1.1 installed. In most cases, there is no problem with using OpenCV 4.1.1. However, from OpenCV 4.2+, Super Resolution function is provided as C/C++ API. And from 4.3, it provides Python API. And finally, in 4.4, CUDA GPU acceleration is available. Therefore, it is recommended to use version 4.4 or higher to fully use the Super Resolution function provided by OpenCV. Therefore, to use OpenCV's SuperResolution, you need to delete the OpenCV 4.1.1 version of JetPack 4.4 and install 4.4 newly.

And from OpenCV 4.2, the dnn module started supporting Nvidia GPUs. In previous versions, only the CPU was available. The Jetson series has NVidia GPUs, so if you are using OpenCV's dnn, it is recommended to upgrade to version 4.2 or higher. OpenCV version 4.2 or higher uses NVidia GPU to speed up the inference.

If you are not interested in OpenCV's SuperResolution feature or not using OpenCV dnn module, you do not necessarily need to upgrade to OpenCV 4.4 or 4.5.


Increase swap memory

When you build a large software packages like OpenCV on Jetson Nano, you may experience an out of memory phenomenon. Increasing the swap file size can prevent this malfunction. If you are using Jetson Xavier NX, you don't have to do this.



git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile.sh

Above script file will increase 6GB swap files. You can change the swap file size by modifying the scripts. If you want to uninstall the swap setting, open the fstab file and delete the swap file line and reboot. 

Installing OpenCV 4.5

 The description from now on can also be applied to Jetson Nano and Jetson TX2 using JetPack 4.5.

 One thing to note is -D CUDA_ARCH_BIN="7.2", which specifies CUDA Architecture in the process of creating Makefile using cmake. Nano, TX2, and Xavier have different values. These values are described in JetsonNano-Useful tips before using Nano

Compute capability (version)Micro-architectureGPUsTegra,Jetson
3.2 Kepler GK20A Tegra K1, Jetson TK1
5.3 Maxwell GM20B Tegra X1, Jetson TX1, Jetson Nano
6.2 Pascal GP10B Tegra X2, Jetson TX2
7.2 Volta GV10B Tegra Xavier, Jetson Xavier NX, Jetson AGX Xavier

<table from JetsonNano-Useful tips before using Nano>

 
 The following is a script file that can be easily installed.
 
 
#!/bin/bash
#
# Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.
#
# NVIDIA Corporation and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto.  Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA Corporation is strictly prohibited.
#

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <Install Folder>"
    exit
fi
folder="$1"
user="nvidia"
passwd="nvidia"

echo "** Remove OpenCV4.1 first"
sudo apt-get purge *libopencv*

echo "** Install requirement"
sudo apt-get update
sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
sudo apt-get install -y curl
sudo apt-get update

echo "** Download opencv-4.5.1"
cd $folder
curl -L https://github.com/opencv/opencv/archive/4.5.1.zip -o opencv-4.5.1.zip
curl -L https://github.com/opencv/opencv_contrib/archive/4.5.1.zip -o opencv_contrib-4.5.1.zip
unzip opencv-4.5.1.zip 
unzip opencv_contrib-4.5.1.zip 
cd opencv-4.5.1/

echo "** Building..."
mkdir release
cd release/
cmake -D WITH_CUDA=ON -D ENABLE_PRECOMPILED_HEADERS=OFF  -D CUDA_ARCH_BIN="7.2" -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j6
sudo make install

echo "** Install opencv-4.5.1 successfully"
echo "** Bye :)"

 <opencv4.5_xavier_nx.sh>

I put the script file on my github. And since the script that changed CUDA_ARCH_BIN value for Jetson Nano and TX2 is also uploaded, you can use the script suitable for the Jetson series you are using.

Now run the script

spypiggy@XavierNX:~/src$ ./opencv4.5_xavier_nx.sh /home/spypiggy/src/

The script file needs a parameter for source code download directory. The script file takes a lot of time to build OpenCV 4.5. If you are not the root user, you may be asked to enter a password to obtain sudo privileges in the middle.

spypiggy@XavierNX:~/src$ python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> from cv2 import dnn_superres
>>> cv2.__version__
'4.5.1'

If the installation is finished without error, you can check OpenCV 4.5 as follows. It can be seen that dnn_superres for Super Resolution is also normally imported.

Wrapping Up

 It is not difficult to upgrade OpenCV to OpenCV 4.5 on JetPack 4.5. Upgrade is possible only with the script file introduced earlier. If you want to use the new features of Ver 4.5 or need to use CUDA, you can upgrade OpenCV to 4.5.

To install OpenCV 4.5, refer to "JetPack 4.5-OpenCV 4.1 vs. OpenCV 4.5".

 

 



댓글 2개:

  1. I received the script file and proceeded with the installation.. but it is installed on python2 but not on python3.

    jdetect xphoto
    -- Disabled: world
    -- Disabled by dependency: -
    -- Unavailable: cnn_3dobj cvv hdf java js julia matlab ovis python3 sfm ts viz
    -- Applications: apps
    -- Documentation: NO
    -- Non-free algorithms: NO
    --
    -- GUI:
    -- GTK+: YES (ver 3.22.30)
    -- GThread : YES (ver 2.56.4)
    -- GtkGlExt: NO
    -- VTK support: NO
    --
    -- Media I/O:
    -- ZLib: /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.11)
    -- JPEG: /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 80)
    -- WEBP: build (ver encoder: 0x020f)
    -- PNG: /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.34)
    -- TIFF: /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.0.9)
    -- JPEG 2000: build Jasper (ver 1.900.1)
    -- OpenEXR: build (ver 2.3.0)
    -- HDR: YES
    -- SUNRASTER: YES
    -- PXM: YES
    -- PFM: YES
    --
    -- Video I/O:
    -- DC1394: NO
    -- FFMPEG: YES
    -- avcodec: YES (57.107.100)
    -- avformat: YES (57.83.100)
    -- avutil: YES (55.78.100)
    -- swscale: YES (4.8.100)
    -- avresample: NO
    -- GStreamer: YES (1.14.5)
    -- v4l/v4l2: YES (linux/videodev2.h)
    --
    -- Parallel framework: pthreads
    --
    -- Trace: YES (with Intel ITT)
    --
    -- Other third-party libraries:
    -- Lapack: NO
    -- Eigen: YES (ver 3.3.4)
    -- Custom HAL: YES (carotene (ver 0.0.1))
    -- Protobuf: build (3.5.1)
    --
    -- NVIDIA CUDA: YES (ver 10.2, CUFFT CUBLAS)
    -- NVIDIA GPU arch: 72
    -- NVIDIA PTX archs:
    --
    -- cuDNN: YES (ver 8.0.0)
    --
    -- OpenCL: YES (no extra features)
    -- Include path: /home/xavier/opencv/opencv-4.4.0/3rdparty/include/opencl/1.2
    -- Link libraries: Dynamic load
    --
    -- Python 2:
    -- Interpreter: /usr/bin/python2.7 (ver 2.7.17)
    -- Libraries: /usr/lib/aarch64-linux-gnu/libpython2.7.so (ver 2.7.17)
    -- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.3)
    -- install path: lib/python2.7/dist-packages/cv2/python-2.7
    --
    -- Python 3:
    -- Interpreter: /usr/bin/python3 (ver 3.6.9)
    -- Libraries: NO
    -- numpy: NO (Python3 wrappers can not be generated)
    -- install path: -
    --
    -- Python (for build): /usr/bin/python2.7
    --
    -- Java:
    -- ant: NO
    -- JNI: NO
    -- Java wrappers: NO
    -- Java tests: NO
    --
    -- Install to: /usr/local

    답글삭제
    답글
    1. Perhaps python3-numpy didn't seem to be installed properly. Please check again to see if python3 numpy is installed correctly with the "sudo apt-get install python3-numpy" command. It can also be installed with "pip3 install numpy".

      삭제