openCV를 설치하기 전 Jetson Nano에 이미 설치된 openCV가 있는지 확인해야 한다.
$ pkg-config --modversion opencv
openCV가 설치되어 있었으면 설치된 버전이 출력되고, 없다면 'No package 'opencv' found' 라는 결과가 출력된다.
Jetson Nano는 메모리가 부족할 일이 많기 때문에 필요 없는 라이브러리는 삭제해 준다.
$ apt-get purget libopencv* python-opencv
$ apt-get autoremove
//기존에 설치된 opencv 라이브러리 삭제 (설치된 opencv 없으면 스킵)
$ find /usr/local/ -name "*opencv*" -exec rm -i {} \;
업데이트가 제대로 되어있지 않으면 설치가 원활하게 진행되지 않을 수 있으므로 업데이트를 해준다.
$ sudo apt-get update
$ sudo apt-get upgrade
업데이트 해야되는 양이 많을수록 시간이 굉장히 오래 걸린다. 1시간 정도 걸릴 수도 있다. sudo 명령은 root 계정을 사용하는 것이므로 Jetson Nano 초기 설정에서 설정한 'username'과 'password'를 입력해야 명령어 실행이 가능하다.
이 부분은 왜 작성한 것인진 잘 모르겠지만 참고한 블로그에서 (https://blog.naver.com/erroring/222297091900) 아래의 명령어를 입력해주어서 따라 쳤다.
$ sudo apt-get install -y build-essential cmake git unzip pkg-config
$ sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install -y libgtk2.0-dev libcanberra-gtk*
$ sudo apt-get install -y python3-dev python3-numpy python3-pip
$ sudo apt-get install -y libxvidcore-dev libx264-dev libgtk-3-dev
$ sudo apt-get install -y libtbb2 libtbb-dev libdc1394-22-dev
$ sudo apt-get install -y libv4l-dev v4l-utils
$ sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install -y libavresample-dev libvorbis-dev libxine2-dev
$ sudo apt-get install -y libfaac-dev libmp3lame-dev libtheora-dev
$ sudo apt-get install -y libopencore-amrnb-dev libopencore-amrwb-dev
$ sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
$ sudo apt-get install -y liblapack-dev libeigen3-dev gfortran
$ sudo apt-get install -y libhdf5-dev protobuf-compiler
$ sudo apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev
이제 openCV 압축 파일을 설치할 차례다.
//우선 홈 디렉터리로 이동해준다.
$ cd ~
//wget 명령어를 root 권한 없이 실행할 수가 없다길래 sudo를 붙여 실행했다.
$ sudo wget -O opencv.zip
https://github.com/opencv/opencv/archive/4.5.0.zip
$ sudo wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip
설치한 압축 파일을 풀어준다.
$ unzip opencv.zip
$ unzip opencv_contrib.zip
디렉터리를 복사한다. 단순하게 이름이 바뀐다.
//왼쪽이 원본 파일, 오른쪽이 복사될 파일
$ mv opencv-4.5.0 opencv
$ mv opencv_contrib-4.5.0 opencv_contrib
//압축 파일을 삭제한다.
$ rm opencv.zip
$ rm opencv_contrib.zip
'build' 디렉터리를 생성해준다.
//설치한 opencv 파일까지 이동해준다.
$ cd ~/opencv
//해당 위치에서 build 디렉터리를 생성한다.
$ mkdir build
//생성한 build 디렉터리로 이동한다.
$ cd build
cmake 명령은 오픈 소스 빌드 툴이다. 다음 명령어를 쭉 쳐야한다. 복사 붙여넣기를 하니 멋대로 띄어쓰기가 돼서 전부 타이핑했다. 철자가 틀리거나 줄을 띄우면 안되기 때문에 집중해서 타이핑 해야한다.
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_GTK=OFF \
-D WITH_OPENCL=OFF \
-D WITH_CUDA=ON \
-D CUDA_FAST_MATH=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_PTX="" \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D ENABLE_NEON=ON \
-D WITH_QT=OFF \
-D WITH_OPENMP=ON \
-D WITH_OPENGL=ON \
-D BUILD_JASPER=ON \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_OPENCV_WORLD=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_OPENCV_PYTHON_TESTS=OFF \
-D INSTALL_TESTS=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..
위의 cmake 명령어가 에러 없이 실행되면 다음 명령어로 넘어간다.
//이 명령어의 실행 시간이 2~3시간 정도 걸릴 수 있다.
$ make -j4
$ sudo rm -rf /usr/include/opencv4/opencv2
$ sudo make install
cat 명령어로 /etc/ld.so.conf.d/ 파일에 저장된 내용을 출력한다. 출력 결과에서 /usr/local/lib를 포함하는 파일이 있는지 확인한다.
//이 명령의 결과 중에 '/usr/local/lib' 가 출력되는지 확인해야 한다.
$ cat /etc/ld.so.conf.d/*
//만약 '/usr/local/lib'이 출력되지 않았다면 아래 명령어도 실행한다.
$ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'
//공유 라이브러리 정보를 갱신한다.
$ sudo idconfig
openCV가 제대로 설치되었는지 확인한다.
//명령어의 결과로 '4.5.0'이 출력되어야 한다.
$ python3
>>>import cv2
>>>cv2.__version__
'4.5.0'
>>>exit()
끗!!!!!!