Jetson & 머신러닝

Nvidia AGX Xavier의 OpenCV 4.10.0 with CUDA 설치(GPU사용)

아크리엑터 2021. 3. 24. 23:38
반응형

아래 글은 과거에 작성해둔 글을 현기준(2024.6월)으로 추가 업데이트를 하였습니다.  내용에 기존 것과 좀 섞여있을 수 있는데, 절차는 문제가 없으니 따라하시면 됩니다.

jetpack을 설치하면 OpenCV가  CUDA지원이 안되는 상태로 확인된다. 아래는 jetpack4.5가 설치된 것의 정보인데, OpenCV는 4.1.1이 CUDA미지원되는 것으로 보여진다. (현기준 2024.6월에는 jetpack 5.1.3 에 설치된 opencv 4.6 을 삭제하고 신규 버전으로 대체하려 한다)

 

$ jetson_release

 - NVIDIA Jetson AGX Xavier [16GB]
   * Jetpack 4.5 [L4T 32.5.0]
   * NV Power Mode: MODE_10W - Type: 1
   * jetson_stats.service: active
 - Libraries:
   * CUDA: 10.2.89
   * cuDNN: 8.0.0.180
   * TensorRT: 7.1.3.0
   * Visionworks: 1.6.0.501
   * OpenCV: 4.1.1 compiled CUDA: NO
   * VPI: ii libnvvpi1 1.0.12 arm64 NVIDIA Vision Programming Interface library
   * Vulkan: 1.2.70

 

그래서, 기존 OpenCV를 삭제하고 재설치 하려고 한다. 먼저, opencv  설치 정보를 확인해봤다. 그런데, 패키지 확인이 안된다. 

$ pkg-config --modversion opencv

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

 

opencv4로 찾아봤어야 하는구나.. T.T

$ pkg-config --modversion opencv4

4.1.1

 

기존 opencv4를 삭제하려면 아래의 명령어로 삭제할 수 있다. 그런데, 동일 버전으로 설치할 생각이라서, 삭제를 하지 않고 그냥 재설치하려고 한다. 아래 명령은 입력 안했다.

$ sudo apt purge libopencv*
....
Removing libgstreamer-plugins-bad1.0-dev:arm64 (1.16.3-0ubuntu1.1) ...
Removing libgstreamer-opencv1.0-0:arm64 (1.16.3-0ubuntu1.1) ...
Removing libopencv-dev (4.5.4-8-g3e4c170df4) ...
Removing opencv-licenses (4.5.4-8-g3e4c170df4) ...
Removing libopencv4.2-java (4.2.0+dfsg-5) ...
Removing libopencv4.2-jni (4.2.0+dfsg-5) ...
Removing libopencv-python (4.5.4-8-g3e4c170df4) ...
Removing libopencv-samples (4.5.4-8-g3e4c170df4) ...
Removing libopencv (4.5.4-8-g3e4c170df4) ...
Removing libopencv-superres4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-contrib4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-videostab4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-viz4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-stitching4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-objdetect4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-dnn4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-shape4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-video4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-photo4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-calib3d4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-features2d4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-flann4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-ml4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-highgui4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-videoio4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-imgcodecs4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-imgproc4.2:arm64 (4.2.0+dfsg-5) ...
Removing libopencv-core4.2:arm64 (4.2.0+dfsg-5) ...
Processing triggers for libc-bin (2.31-0ubuntu9.16) ...
...

$ sudo apt autoremove
...
Removing apt-clone (0.4.1ubuntu3) ...
Removing archdetect-deb (1.117ubuntu7) ...
Removing bogl-bterm (0.1.18-13ubuntu2) ...
Removing busybox-static (1:1.30.1-4ubuntu6.4) ...
Removing cryptsetup-bin (2:2.2.2-3ubuntu2.4) ...
Removing dctrl-tools (2.24-3) ...
Removing dpkg-repack (1.46) ...
Removing libgdal26 (3.0.4+dfsg-1build3) ...
Removing gdal-data (3.0.4+dfsg-1build3) ...
Removing gir1.2-gst-plugins-bad-1.0:arm64 (1.16.3-0ubuntu1.1) ...
Removing gir1.2-timezonemap-1.0 (0.4.6-2) ...
Removing gir1.2-xkl-1.0:arm64 (5.4-4) ...
Removing os-prober (1.74ubuntu2) ...
Removing grub-common (2.04-1ubuntu26.17) ...
Removing libvtk6.3 (6.3.0+dfsg2-5build2) ...
Removing libhdf5-openmpi-103:arm64 (1.10.4+repack-11ubuntu1) ...
Removing libnetcdf-c++4 (4.2-11build2) ...
Removing libnetcdf15:arm64 (1:4.7.3-1) ...
Removing libhdf5-103:arm64 (1.10.4+repack-11ubuntu1) ...
Removing libsz2:arm64 (1.0.4-1) ...
Removing libaec0:arm64 (1.0.4-1) ...
Removing libarmadillo9 (1:9.800.4+dfsg-1build1) ...
Removing libarpack2:arm64 (3.7.0-3) ...
Removing libavformat-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libavcodec-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libavresample-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libavresample4:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libswscale-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libswresample-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libavutil-dev:arm64 (7:4.2.7-0ubuntu0.1) ...
Removing libcfitsio8:arm64 (3.470-3) ...
Removing libgdcm-dev (3.0.5-1.1ubuntu2) ...
Removing libgdcm3.0:arm64 (3.0.5-1.1ubuntu2) ...
Removing libcharls2:arm64 (2.0.0+dfsg-1build1) ...
Removing libdapclient6v5:arm64 (3.20.5-1) ...
Removing libdap25:arm64 (3.20.5-1) ...
Removing libdc1394-22-dev:arm64 (2.2.5-2.1) ...
Removing libdebian-installer4:arm64 (0.110ubuntu3) ...
Removing libepsilon1:arm64 (0.9.2+dfsg-4) ...
Removing libgphoto2-dev:arm64 (2.5.25-0ubuntu0.1) ...
Removing libexif-dev:arm64 (0.6.21-6ubuntu0.4) ...
Removing libspatialite7:arm64 (4.3.0a-6build1) ...
Removing libfreexl1:arm64 (1.0.5-3) ...
Removing libfyba0:arm64 (4.1.1-6build1) ...
Removing libgeos-c1v5:arm64 (3.8.0-1build1) ...
Removing libgeos-3.8.0:arm64 (3.8.0-1build1) ...
Removing libgeotiff5:arm64 (1.5.1-2) ...
Removing libgl2ps1.4 (1.4.0+dfsg1-2) ...
Removing libhdf4-0-alt (4.2.14-1ubuntu1) ...
Removing libopenexr-dev (2.3.0-6ubuntu0.5) ...
Removing libilmbase-dev:arm64 (2.3.0-6build1) ...
Removing libtiff-dev:arm64 (4.1.0+git191117-2ubuntu0.20.04.13) ...
Removing libjbig-dev:arm64 (2.1-3.1ubuntu0.20.04.1) ...
Removing libjpeg-dev:arm64 (8c-2ubuntu8) ...
Removing libjpeg8-dev:arm64 (8c-2ubuntu8) ...
Removing libjpeg-turbo8-dev:arm64 (2.0.3-0ubuntu1.20.04.3) ...
Removing libkmlengine1:arm64 (1.3.0-8build1) ...
Removing libkmldom1:arm64 (1.3.0-8build1) ...
Removing libkmlbase1:arm64 (1.3.0-8build1) ...
Removing libtesseract4:arm64 (4.1.1-2build2) ...
Removing liblept5:arm64 (1.79.0-1) ...
Removing liblzma-dev:arm64 (5.2.4-1ubuntu1.1) ...
Removing libminizip1:arm64 (1.1-8build1) ...
Removing libodbc1:arm64 (2.3.6-0.1ubuntu0.1) ...
Removing libogdi4.1 (4.1.0+ds-1build1) ...
Removing libpng-dev:arm64 (1.6.37-2) ...
Removing libpq5:arm64 (12.18-0ubuntu0.20.04.1) ...
Removing libproj15:arm64 (6.3.1-1) ...
Removing libqhull7:arm64 (2015.2-4) ...
Removing libraw1394-dev:arm64 (2.1.2-1) ...
Removing libsocket++1:arm64 (1.12.13-10build1) ...
Removing libsuperlu5:arm64 (5.2.1+dfsg1-4) ...
Removing libtiffxx5:arm64 (4.1.0+git191117-2ubuntu0.20.04.13) ...
Removing libtimezonemap1:arm64 (0.4.6-2) ...
Removing libtimezonemap-data (0.4.6-2) ...
Removing liburiparser1:arm64 (0.9.3-2) ...
Removing libxerces-c3.2:arm64 (3.2.2+debian-1ubuntu0.2) ...
Removing proj-data (6.3.1-1) ...
Removing python3-icu (2.4.2-0ubuntu3) ...
Removing python3-pam (0.4.2-13.2ubuntu8) ...
Removing rdate (1:1.10-2) ...
Removing odbcinst (2.3.6-0.1ubuntu0.1) ...
Removing odbcinst1debian2:arm64 (2.3.6-0.1ubuntu0.1) ...
Removing tasksel-data (3.34ubuntu16) ...
Removing tasksel (3.34ubuntu16) ...
Processing triggers for libc-bin (2.31-0ubuntu9.16) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for initramfs-tools (0.136ubuntu6.7) ...
update-initramfs: Generating /boot/initrd.img-5.10.192-tegra
...

 

설치를 위해, 필요한 패키지를 먼저 설치한다.

필수 도구와 GUI용 QT 라이브러리를 설치한다.

$ sudo apt install cmake cmake-qt-gui build-essential git libqt5*-dev pkg-config

 

이미지 관련 패키지를 설치한다.

$ sudo apt install libjpeg-dev libtiff5-dev libpng-dev

 

비디오 코덱 관련 패키지를 설치한다.

$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev x264 libxine2-dev libv4l-dev v4l-utils libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev  

 

OpenGL + 알파

sudo apt install mesa-utils libgl1-mesa-dri libatlas-base-dev gfortran libeigen3-dev libtbb2 libtbb-dev

 

파이썬 관련 패키지는 이미 설치를 해두었기 때문에 별도로 설치하지는 않는다. 설치를 안했다면 아래의 패키지를 설치한다.

$ sudo apt install python3-dev python-numpy python3-numpy python3-setuptools

 

추가로 누락된 패키지도 설치하자

$ sudo apt install -y libavresample-dev liblapacke-dev qt5-default

 

OpenCV 설치한다. OpenCV 최신버전을 다운받는다. 아래의 github에서 소스와 extra 모듈을 다운로드 받는다.

https://github.com/opencv/opencv

 

GitHub - opencv/opencv: Open Source Computer Vision Library

Open Source Computer Vision Library. Contribute to opencv/opencv development by creating an account on GitHub.

github.com

https://github.com/opencv/opencv_contrib

 

GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modules

Repository for OpenCV's extra modules. Contribute to opencv/opencv_contrib development by creating an account on GitHub.

github.com

 

위 2가지를 다운로드 받는다.

 

$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

 

makefile 생성을 한다.

$ cd opencv/
$ mkdir build
$ cd build

 

OpenCV를 빌드하기 위해 cmake-gui를 실행한다.

$ cmake-gui

 

실행된 화면에서  붉은 선으로 표시한 것과 같이 소스와 빌드될 폴더를 설정한다.

왼쪽 하단의 Configure 버튼을 누른다.  아래 팝업 화면에서는 기본을 선택하였다.

그러면, 한참을 체크하다가, 화면에 여러가지 변수/값 설정된 화면이 나온다. tesseract가 인지 안되었다. tesserct ocr을 사용할 수 있는데.... 그냥 지금은 넘어가자.

Detected processor: aarch64
Looking for ccache - found (/usr/bin/ccache)
NEON_BF16 is not supported by C++ compiler
Dispatch optimization NEON_BF16 is not available, skipped
Cleaning INTERNAL cached variable: WEBP_LIBRARY
Cleaning INTERNAL cached variable: WEBP_INCLUDE_DIR
Could NOT find OpenJPEG (minimal suitable version: 2.0, recommended version >= 2.3.1). OpenJPEG will be built from sources
OpenJPEG: VERSION = 2.5.0, BUILD = opencv-4.10.0-dev-openjp2-2.5.0
OpenJPEG libraries will be built from sources: libopenjp2 (version "2.5.0")
Found OpenEXR: /usr/lib/aarch64-linux-gnu/libIlmImf.so
CUDA detected: 11.4
CUDA: Using CUDA_ARCH_BIN=7.2
CUDA: NVCC target flags -gencode;arch=compute_72,code=sm_72;-D_FORCE_INLINES
LAPACK(Atlas): LAPACK_LIBRARIES: /usr/lib/aarch64-linux-gnu/liblapack.so;/usr/lib/aarch64-linux-gnu/libcblas.so;/usr/lib/aarch64-linux-gnu/libatlas.so
LAPACK(Atlas): Support is enabled.
VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
Checking for module 'libavdevice'
  No package 'libavdevice' found
freetype2:   YES (ver 23.1.17)
harfbuzz:    YES (ver 2.6.4)
Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version "")
Julia not found. Not compiling Julia Bindings. 
Module opencv_ovis disabled because OGRE3D was not found
CERES support is disabled. Ceres Solver for reconstruction API is required.
Checking for module 'tesseract'
  No package 'tesseract' found
Tesseract:   NO
Allocator metrics storage type: 'int'
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse2.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse3.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.ssse3.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_1.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.sse4_2.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx2.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin128.avx512_skx.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx2.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.avx512_skx.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin256.lasx.cpp
Excluding from source files list: <BUILD>/modules/core/test/test_intrin512.avx512_skx.cpp
Excluding from source files list: modules/imgproc/src/corner.avx.cpp
Excluding from source files list: modules/imgproc/src/imgwarp.avx2.cpp
Excluding from source files list: modules/imgproc/src/imgwarp.lasx.cpp
Excluding from source files list: modules/imgproc/src/imgwarp.sse4_1.cpp
Excluding from source files list: modules/imgproc/src/resize.avx2.cpp
Excluding from source files list: modules/imgproc/src/resize.lasx.cpp
Excluding from source files list: modules/imgproc/src/resize.sse4_1.cpp
Registering hook 'INIT_MODULE_SOURCES_opencv_dnn': /home/igi/Downloads/opencv/modules/dnn/cmake/hooks/INIT_MODULE_SOURCES_opencv_dnn.cmake
Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.avx512_skx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.rvv.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/layers_common.lasx.cpp
Excluding from source files list: <BUILD>/modules/dnn/int8layers/layers_common.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/int8layers/layers_common.avx512_skx.cpp
Excluding from source files list: <BUILD>/modules/dnn/int8layers/layers_common.rvv.cpp
Excluding from source files list: <BUILD>/modules/dnn/int8layers/layers_common.lasx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_block.avx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_block.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_depthwise.avx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_depthwise.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_depthwise.rvv.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_depthwise.lasx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_winograd_f63.avx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/conv_winograd_f63.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/fast_gemm_kernels.avx.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/fast_gemm_kernels.avx2.cpp
Excluding from source files list: <BUILD>/modules/dnn/layers/cpu_kernels/fast_gemm_kernels.lasx.cpp
Excluding from source files list: modules/features2d/src/fast.avx2.cpp
highgui: using builtin backend: GTK3
CERES support is disabled. Ceres Solver for reconstruction API is required.
Building with NVIDIA Optical Flow API 2.0
Found 'misc' Python modules from /home/user_id/Downloads/opencv/modules/python/package/extra_modules
Found 'mat_wrapper;utils' Python modules from /home/igi/Downloads/opencv/modules/core/misc/python/package
Found 'gapi' Python modules from /home/user_id/Downloads/opencv/modules/gapi/misc/python/package
Found 'misc' Python modules from /home/user_id/Downloads/opencv/modules/python/package/extra_modules
Found 'mat_wrapper;utils' Python modules from /home/igi/Downloads/opencv/modules/core/misc/python/package
Found 'gapi' Python modules from /home/user_id/Downloads/opencv/modules/gapi/misc/python/package

General configuration for OpenCV 4.10.0-dev =====================================
  Version control:               4.9.0-586-gd1b643a05a

  Extra modules:
    Location (extra):            /home/user_id/Downloads/opencv_contrib/modules
    Version control (extra):     4.9.0-85-ga886fa5c

  Platform:
    Timestamp:                   2024-06-19T18:45:57Z
    Host:                        Linux 5.10.192-tegra aarch64
    CMake:                       3.16.3
    CMake generator:             Unix Makefiles
    CMake build tool:            /usr/bin/make
    Configuration:               Release

  CPU/HW features:
    Baseline:                    NEON FP16
    Dispatched code generation:  NEON_DOTPROD NEON_FP16
      requested:                 NEON_FP16 NEON_BF16 NEON_DOTPROD
      NEON_DOTPROD (1 files):    + NEON_DOTPROD
      NEON_FP16 (2 files):       + NEON_FP16

  C/C++:
    Built as dynamic libs?:      YES
    C++ standard:                11
    C++ Compiler:                /usr/bin/c++  (ver 9.4.0)
    C++ flags (Release):         -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
    C++ flags (Debug):           -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
    C Compiler:                  /usr/bin/cc
    C flags (Release):           -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
    C flags (Debug):             -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
    Linker flags (Release):      -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
    Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined  
    ccache:                      YES
    Precompiled headers:         NO
    Extra dependencies:          m pthread cudart_static dl rt nppc nppial nppicc nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda/lib64 -L/usr/lib/aarch64-linux-gnu
    3rdparty dependencies:

  OpenCV modules:
    To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform java line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency sfm shape signal stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 cannops cvv hdf julia matlab ovis python2 viz
    Applications:                tests perf_tests apps
    Documentation:               NO
    Non-free algorithms:         YES

  GUI:                           GTK3
    GTK+:                        YES (ver 3.24.20)
      GThread :                  YES (ver 2.64.6)
      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.37)
    TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
    JPEG 2000:                   build (ver 2.5.0)
    OpenEXR:                     /usr/lib/aarch64-linux-gnu/libImath.so /usr/lib/aarch64-linux-gnu/libIlmImf.so /usr/lib/aarch64-linux-gnu/libIex.so /usr/lib/aarch64-linux-gnu/libHalf.so /usr/lib/aarch64-linux-gnu/libIlmThread.so (ver 2_3)
    HDR:                         YES
    SUNRASTER:                   YES
    PXM:                         YES
    PFM:                         YES

  Video I/O:
    FFMPEG:                      YES
      avcodec:                   YES (58.54.100)
      avformat:                  YES (58.29.100)
      avutil:                    YES (56.31.100)
      swscale:                   YES (5.5.100)
      avresample:                YES (4.0.0)
      avdevice:                  NO
    GStreamer:                   YES (1.16.3)
    v4l/v4l2:                    YES (linux/videodev2.h)

  Parallel framework:            pthreads

  Trace:                         YES (with Intel ITT)

  Other third-party libraries:
    Lapack:                      YES (/usr/lib/aarch64-linux-gnu/liblapack.so /usr/lib/aarch64-linux-gnu/libcblas.so /usr/lib/aarch64-linux-gnu/libatlas.so)
    Eigen:                       YES (ver 3.3.7)
    Custom HAL:                  YES (carotene (ver 0.0.1, Auto detected))
    Protobuf:                    build (3.19.1)
    Flatbuffers:                 builtin/3rdparty (23.5.9)

  NVIDIA CUDA:                   YES (ver 11.4, CUFFT CUBLAS FAST_MATH)
    NVIDIA GPU arch:             72
    NVIDIA PTX archs:

  cuDNN:                         YES (ver 8.6.0)

  OpenCL:                        YES (AMDBLAS)
    Include path:                /home/user_id/Downloads/opencv/3rdparty/include/opencl/1.2 /usr/include
    Link libraries:              Dynamic load

  Python 3:
    Interpreter:                 /usr/bin/python3 (ver 3.8.10)
    Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.8.so (ver 3.8.10)
    Limited API:                 NO
    numpy:                       /usr/local/lib/python3.8/dist-packages/numpy/core/include (ver 1.24.4)
    install path:                lib/python3.8/site-packages/cv2/python-3.8

  Python (for build):            /usr/bin/python3

  Java:                          
    ant:                         NO
    Java:                        YES (ver 21.0.3)
    JNI:                         /usr/lib/jvm/java-21-openjdk-arm64/include /usr/lib/jvm/java-21-openjdk-arm64/include/linux /usr/lib/jvm/java-21-openjdk-arm64/include
    Java wrappers:               YES (JAVA)
    Java tests:                  NO

  Install to:                    /usr/local
-----------------------------------------------------------------

Configuring done
Generating done

 

그 내용을 아래와 같이 변경 추가한다.

Search에 검색어를 입력하면, 아래에 파라미터 설정할 해당 문자열이 검색이 된다.

설정된 내역은 다음과 같다. 리스트를 보면서 일일이 선택하기 보다는 검색해서 필요한 것들 선택하는 것이 더 효과적이다. 물론, 하나를 잘못 선택하는 경우, 컴파일 하다가 오류가 나서 다시 진행해야 하는 상황이 있었지만, ... 
선택된 내용을 보니, 좀 이상하다. JASPER를 선택하지 않았는데,.... 내가 나중에 사용할 것 아닌가.. T.T
무엇을 잘못했는지 몰라서, 현재의 상태를 모두 기록하고 재컴파일을 해본다.(24.6.25 updated)

"+Add Entry"를 선택하고, 아래 내용을 추가한다.

 

아래 사항을 변경했다.

CMAKE_INSTALL_PREFIX = /usr/local

OPENCV_DNN_CUDA=ON  # 필요한지 모르겠지만,

OPENCV_PYTHON3_VERSION = ON

WITH_CUDA=ON

WITH_QT=ON

WITH_VULKAN=ON

OPENCV_DNN_OPENVINO=ON

OPENCV_DNN_PERF_CAFFE=ON

OPENCV_DNN_PERF_CLCAFFE=ON

OPENCV_EXTRA_MODULES_PATH = /home/user_id/work/opencv_contrib/modules

 

 

 

최종 선택된 내용이다.

 

Generate 버튼을 누른 후 완료가 되면, 터미널에서 아래의 make를 실행한다.

/build$ make -j8
[  0%] Built target opencv_dnn_plugins
[  0%] Built target opencv_highgui_plugins
[  0%] Built target opencv_videoio_plugins
[  2%] Built target carotene_objs
[  3%] Built target libopenjp2
[  5%] Built target libprotobuf
[  4%] Built target ittnotify
[ 10%] Built target libwebp
[ 10%] Built target ade
[ 10%] Built target opencv.sfm.numeric
[ 11%] Built target tegra_hal
[ 11%] Generate files for Java bindings
[ 11%] Built target gen_opencv_python_source
[ 11%] Built target opencv_cudev
[ 11%] Built target opencv.sfm.multiview
JAVA: Processing OpenCV modules: 27
[ 12%] Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat_nd.cu.o
[ 12%] Building NVCC (Device) object modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o
duplicated: CLASS cv::.Algorithm : 
Generated files: 434 (updated 433)
[ 12%] Built target gen_opencv_java_source
[ 12%] Copy Java(JAR) source files
[ 12%] Built target opencv_java_jar_source_copy
[ 12%] Generating ../../../CMakeFiles/dephelper/opencv_java_jar
[ 12%] Built target opencv_java_jar_sources
[ 12%] Building Java objects for opencv_java_jar.jar
/home/igi/Downloads/opencv/modules/core/src/cuda/gpu_mat.cu(67): warning: parameter "numBytes" was declared but never referenced

.....
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_test_videostab.dir/test/test_motion_estimation.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_util.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_numpy.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_convert.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_highgui.cpp.o
[100%] Linking CXX executable ../../bin/opencv_test_videostab
[100%] Built target opencv_test_videostab
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-38-aarch64-linux-gnu.so
[100%] Built target opencv_python3

 jetson nano는 core가 4개 있어서 -j4로 입력해도 된다.

jetson nano에서 설치 중에 오류가 난 것이 하나 있었는데, 구글링 하니, 소스의 include파일의 Path를 수정하니 정상적으로 컴파일 진행이 되었었다. 

jetson xavier에서는 cmake에서의 몇가지 헤더가 없다는 오류가 나왔었는데, 이것은 cmake의 파라미터 설정을 추가해서 해소하였다. 최종 사용된 파라미터 설정은 위의 cmake gui 설정 내용에 업데이트 해두었다.

컴파일이 완료가 되면, 아래 명령으로 설치를 한다.

$ sudo make install

 

설치된 확인은 아래와 같이 할 수있다.

$ python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.10.0-dev'

그런데, 오류가 난다. 아래와 같이...

$ python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'

설치된 폴더를 찾아보니, 무언가 좀 이상하다...  이것을 일일이 세팅해줘야 되었었나? 필요한 것은 심볼릭 링크가 걸리도록 해서 정상 설치가 되어야 하는데... 이상하다.. 어쨌든 아래와 같이 추가 설정을 한다.

vi ~/.bashrc 를 열어서, 맨 아래에 환경 변수를 설정한다. 아래 내용으로,.

export PATH=/usr/local/cuda-11.4/bin:/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:/usr/local/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/site-packages

아래 명령으로 적용한다.

$ source ~/.bashrc

 

아래와 같이 오류가 나는 경우가 있다.

Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.8/site-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: /lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block

이것을 .bashrc 에 추가를 해서 해결할 수 있다.

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1
$ source ~/.bashrc

 

정상적으로 설치가 되었으면 아래와 같이 결과가 나와야 한다.

$ python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.10.0-dev'

jtop으로 확인을 하면... 아래와 같이 opencv가 정상적으로 설치된 것을 확인할 수 있다.

$ jetson_release
Software part of jetson-stats 4.2.8 - (c) 2024, Raffaello Bonghi
Model: Jetson-AGX - Jetpack 5.1.3 [L4T 35.5.0]
NV Power Mode[0]: MAXN
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
 - P-Number: p2888-0004
 - Module: NVIDIA Jetson AGX Xavier (32 GB ram)
Platform:
 - Distribution: Ubuntu 20.04 focal
 - Release: 5.10.192-tegra
jtop:
 - Version: 4.2.8
 - Service: Active
Libraries:
 - CUDA: 11.4.315
 - cuDNN: 8.6.0.166
 - TensorRT: 8.5.2.2
 - VPI: 2.4.8
 - Vulkan: 1.3.204
 - OpenCV: 4.10.0-dev - with CUDA: YES
반응형