jetson nano의 opencv를 CUDA와 함께 설치하면 속도를 빠르게 할 수 있다.

 

CUDA 설치

jetson nano에 설치 가능한 가장 최신의 CUDA버전은 10.0이다. 

터미널에 다음과 같이 입력한다.

$ sudo apt install -y cuda-core-10-0\
cuda-cublas-dev-10-0\
cuda-cudart-dev-10-0\
cuda-libraries-dev-10-0\
cuda-toolkit-10-0

cudnn 설치

cudnn 버전은 7.0이다.

$ sudo apt install libcudnn7-dev

 

.bashrc 수정

CUDA는 /usr/local/cuda-10.0 경로에 설치되어있다. (/usr/local/cuda 가 아님에 유의)

CUDA 설치가 완료되면 .bashrc 끝에 다음을 추가한다.

$ export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

 

gcc version 수정

jetson nano에는 gcc-9와 g++-9이 설치되어있다. opencv에서는 7.버전으로 빌드해야하므로 다음과 같이 입력한다.

$ sudo apt install gcc-7 g++-7
$ sudo ln -s /usr/bin/gcc-7 /usr/local/cuda-10.0/bin/gcc
$ sudo ln -s /usr/bin/g++-7 /usr/local/cuda-10.0/bin/g++

nvcc 버전 확인

nvcc --version 명령으로 버전 확인 결과

opencv 설치 스크립트

아래 링크에서 opencv 설치를 위한 스크립트를 다운로드 한다.

https://github.com/kyuhyong/buildOpenCV

 

GitHub - kyuhyong/buildOpenCV: Scripts for build OpenCV on the NVIDIA Jetson Nano Developer Kit

Scripts for build OpenCV on the NVIDIA Jetson Nano Developer Kit - GitHub - kyuhyong/buildOpenCV: Scripts for build OpenCV on the NVIDIA Jetson Nano Developer Kit

github.com

 

 

 

정상적으로 설치가 완료되면 다음과 같이 설치된 opencv가 나타난다.

$ python3 -c "import cv2; print(cv2.__version__)"
4.2.0

문제해결

  • 파이썬에서 import cv2 에러가 발생하는 경우
$ python3
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[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/dist-packages/cv2/__init__.py", line 89, in <module>
    bootstrap()
  File "/usr/local/lib/python3.8/dist-packages/cv2/__init__.py", line 79, in bootstrap
    import cv2
ImportError: /lib/aarch64-linux-gnu/libGLdispatch.so.0: cannot allocate memory in static TLS block
>>>

~/.bashrc 파일의 끝에 다음 항목을 추가한다.

export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1

그리고나서 source ~/.bashr 수행 후 다시 시도해본다.

  • gcc 컴파일 오류가 발생하는 경우

buildOpenCV 디렉토리에 있는 Example 에서 소스코드를 빌드해본다.

$ cd buildOpenCV/Examples/
$ gcc -std=c++11 `pkg-config --cflags opencv` `pkg-config --libs opencv` gstreamer_view.cpp -o gstreamer_view -lstdc++ -lopencv_core -lopencv_highgui -lopencv_videoio
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
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
gstreamer_view.cpp:7:10: fatal error: opencv2/opencv.hpp: No such file or directory
 #include <opencv2/opencv.hpp>
          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.

/usr/local/lib/pkgconfig/ 폴더에 opencv.pc 라는 파일을 만들고 다음 내용을 추가한다.

# Package Information for pkg-config

prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir_new=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.5.0
Libs: -L${libdir} -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_new}

그리고 나서 gcc를 실행하면 gstreamer_view 라는게 생기는걸 확인할 수 있다.

$ gcc -std=c++11 `pkg-config --cflags opencv` `pkg-config --libs opencv` gstreamer_view.cpp -o gstreamer_view -lstdc++ -lopencv_core -lopencv_highgui -lopencv_videoio
$ ls
cannyDetection.py  gstreamer_view  gstreamer_view.cpp  README.md

+ Recent posts