본문 바로가기

Tect.tip/Linux

[install] opencv 최신버전 설치 (4.5.1) in ubuntu

opencv 4.5.1로 진행합니다.

설치확인

pkg-config --modversion opencv

# or

pkg-config --modversion opencv4

설치 안되어 있을 경우

$ 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

설치 되어 있을 경우

$ pkg-config --modversion opencv
3.2.0  #(버전이 뜸)

제거

OpenCV 라이브러리 설정 파일을 포함해서 기존에 설치된 OpenCV 패키지를 삭제

sudo apt purge libopencv* python-opencv -y
sudo apt autoremove -y

기존에 설치된 opencv 라이브러리를 삭제
rm 다음에 있는 -i를 제거하면 물어보지 않고 전부 삭제

sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \;

sudo find /usr/local/ -name "*opencv*" -exec rm {} \;

필요 패키지 설치

1) 기존 설치된 패키지 업그레이드

OpenCV 4.5.1를 설치해주기 전에 기존에 설치된 패키지들을 업그레이드 해주기 위한 작업입니다.

오래 걸리더라도 해주는 것이 좋습니다.

Ubuntu 저장소(repository)로부터 패키지 리스트를 업데이트합니다.

기존에 설치된 패키지들의 새로운 버전이 저장소에 있다면 리스트를 업데이트 하기위해 실행합니다.

$ sudo apt update

기존에 설치된 패키지의 새로운 버전이 있으면 업그레이드를 진행합니다.

$ sudo apt upgrade

2) OpenCV 컴파일 전 필요한 패키지 설치

OpenCV를 컴파일하는데 사용하는 것들이 포함된 패키지들을 설치합니다. 언급한 패키지가 이미 설치된 경우도 있을 겁니다.

build-essential 패키지에는 C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있습니다.

cmake는 컴파일 옵션이나 빌드된 라이브러리에 포함시킬 OpenCV 모듈 설정등을 위해 필요합니다.

$ sudo apt install build-essential cmake

pkg-config는 프로그램 컴파일 및 링크시 필요한 라이브러리에 대한 정보를 메타파일(확장자가 .pc 인 파일)로부터 가져오는데 사용됩니다.

터미널에서 특정 라이브러리를 사용한 소스코드를 컴파일시 필요한 컴파일러 및 링커 플래그를 추가하는데 도움이 됩니다.

$ sudo apt install 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

Video4Linux 패키지는 리눅스에서 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API를 포함하고 있습니다.

$ sudo apt install libv4l-dev v4l-utils qv4l2 v4l2ucp

GStreamer는 비디오 스트리밍을 위한 라이브러리입니다.

$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev

OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오를 보여줄 수 있습니다.

윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다. 여기서는 gtk2를 지정해주었습니다.

$ sudo apt install libgtk2.0-dev

그외 선택 가능한 패키지는 다음과 같습니다.

$ sudo apt install libgtk-3-dev libqt4-dev qt5-default

OpenGL 지원하기 위해 필요한 라이브러리입니다.

$ sudo apt install mesa-utils libgl1-mesa-dri libqt4-opengl-dev libgtkgl2.0-dev libgtkglext1-dev libtbb2 libtbb-dev

OpenCV 최적화를 위해 사용되는 라이브러리들입니다.

$ sudo apt install libatlas-base-dev gfortran libeigen3-dev

python2.7-dev와 python3-dev 패키지는 OpenCV-Python 바인딩을 위해 필요한 패키지들입니다.

Numpy는 매트릭스 연산등을 빠르게 처리할 수 있어서 OpenCV에서 사용됩니다.

$ sudo apt install python2.7-dev python3-dev python-numpy python3-numpy python3-setuptools

zip 압축관련 라이브러리 설치하기

$ apt install -y zip unzip

위에 명령어 한번에 하기

apt-get update -y && \
apt-get upgrade -y && \
apt install -y \
build-essential \
cmake \
pkg-config \
libjpeg-dev \
libtiff5-dev \
libpng-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libxvidcore-dev \
libx264-dev \
x264 \
libxine2-dev \
libv4l-dev \
v4l-utils \
qv4l2 \
v4l2ucp \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-good1.0-dev \
libgtk2.0-dev \
libgtk-3-dev \
libqt4-dev \
qt5-default \
mesa-utils \
libgl1-mesa-dri \
libqt4-opengl-dev \
libgtkgl2.0-dev \
libgtkglext1-dev \
libtbb2 \
libtbb-dev \
libatlas-base-dev \
gfortran \
libeigen3-dev \
python2.7-dev \
python3-dev \
python-numpy \
python3-numpy \
python3-setuptools \
zip \
unzip \
wget

libqt5-dev 는 안됨.

명령어 한번에 쓰면 잘 안되는 경우가 있음.

따로따로 써볼 것.

OpenCV 설정과 패키지 설치

최상위 폴더에서 진행하면 편함.

소스 코드를 저장할 임시 디렉토리를 생성하여 이동

cd /
mkdir opencv
cd opencv

OpenCV 4.5.1 소스코드를 다운로드 받아 압축을 풀어줍니다.

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip && \
unzip opencv.zip

opencv_contrib(extra modules) 소스코드를 다운로드 받아 압축을 풀어줍니다.

SIFT, SURF 등을 사용하기 위해 필요합니다.

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip && \
unzip opencv_contrib.zip

다음처럼 두 개의 디렉토리가 생성됩니다.

$ ls -d */
opencv-4.5.1/  opencv_contrib-4.5.1/

opencv-4.5.1 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.

컴파일은 build 디렉토리에서 이루어집니다.

$ cd opencv-4.5.1/
$ mkdir build
$ cd build

cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다.

OpenCV 4에서 pkg-config를 디폴트로 지원하지 않는 것으로 바뀌었습니다.

그래서 OPENCV_GENERATE_PKGCONFIG=ON 옵션을 추가해야합니다.

( 참고 https://github.com/opencv/opencv/issues/13154 )

Non free 모듈을 사용하려면 다음 옵션을 추가하세요.

  • D OPENCV_ENABLE_NONFREE=ON

jetson 용

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDA_FAST_MATH=ON \
-D CUDNN_VERSION='8.0' \
-D OPENCV_DNN_CUDA=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D WITH_OPENGL=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_NEON=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
\
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
\
-D WITH_TBB=ON \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
../

OPENCV_DNN_CUDA 를 OFF 해야될것 같음.

-D ENABLE_FAST_MATH = ON : 부동소수점 무시 -> 연산 속도 향상

BUILD_opencv_world = OFF :
시간이 매우 오래 걸리나 opencv의 모듈을 하나의 파일로 빌드할 수 있도록 하는 opencv 3 버전 이후의 편리한 도구라고 생각
하지만 나는 OFF 하겠음

에러가 나는 경우 한줄로 바꾼 다음 명령을 사용하세요.

3090 용

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDA_FAST_MATH=ON \
-D CUDNN_VERSION='8.0' \
-D OPENCV_DNN_CUDA=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D WITH_OPENGL=ON \
-D WITH_CUBLAS=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_TBB=ON \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D WITH_QT=ON \
-D WITH_GTK=OFF \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
../

cmake 완료 후

다음과 같은 메시지가 보이면 정상적으로 된 것입니다.

-- Configuring done
-- Generating done
-- Build files have been written to: /opencv/opencv-4.5.1/build

cmake를 사용하여 진행한 OpenCV 컴파일 관련 설정 결과입니다.

-- General configuration for OpenCV 4.5.1 =====================================
--   Version control:               unknown
--
--   Extra modules:
--     Location (extra):            /opencv/opencv_contrib-4.5.1/modules
--     Version control (extra):     unknown
--
--   Platform:
--     Timestamp:                   2021-11-17T05:12:53Z
--     Host:                        Linux 4.9.201-tegra aarch64
--     CMake:                       3.10.2
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
--
--   CPU/HW features:
--     Baseline:                    NEON FP16
--       required:                  NEON
--
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/c++  (ver 7.5.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-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 -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-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 -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-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 -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-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
--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          m pthread cudart_static dl rt nppc nppial nppicc nppicom nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda-10.2/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 line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python2 python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cvv hdf java julia matlab ovis sfm ts viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         YES
--
--   GUI:
--     GTK+:                        YES (ver 3.22.30)
--       GThread :                  YES (ver 2.56.4)
--       GtkGlExt:                  NO
--     OpenGL support:              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 (ver 2.3.1)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
--
--   Video I/O:
--     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)
--     Xine:                        YES (ver 1.2.8)
--
--   Parallel framework:            TBB (ver 2017.0 interface 9107)
--
--   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 FAST_MATH)
--     NVIDIA GPU arch:             53
--     NVIDIA PTX archs:
--
--   cuDNN:                         YES (ver 8.0)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /opencv/opencv-4.5.1/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:                   /usr/lib/aarch64-linux-gnu/libpython3.6m.so (ver 3.6.9)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.13.3)
--     install path:                lib/python3.6/dist-packages/cv2/python-3.6
--
--   Python (for build):            /usr/bin/python2.7
--
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /opencv/opencv-4.5.1/build

3090_result의 사본

다음처럼 Python 2 또는 Python 3 라이브러리 항목이 보이지 않는 경우에는

--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.17)
--     Libraries:                   /usr/lib/x86_64-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:                   /usr/lib/x86_64-linux-gnu/libpython3.6m.so (ver 3.6.9)
--     numpy:                       /home/webnautes/.local/lib/python3.6/site-packages/numpy/core/include (ver 1.17.4)
--     install path:                lib/python3.6/dist-packages/cv2/python-3.6

붉은색 줄처럼 해당 경로들을 직접 적어줘야 합니다.

자신의 python 설치 경로에 따라 변경해줘야합니다.

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules \
-D BUILD_opencv_python2=ON \
-D BUILD_opencv_python3=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDA_FAST_MATH=ON \
-D CUDNN_VERSION='8.0' \
-D OPENCV_DNN_CUDA=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D WITH_OPENGL=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_NEON=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
\
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
\
-D WITH_TBB=ON \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
\
-D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON2_PACKAGES_PATH=/usr/lib/python2.7/dist-packages \
-D PYTHON2_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/  \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
../

make 하기


jetson nano 일 경우 (아닐 경우 pass)

컴파일 전에 jetson 의 메모리 용량을 늘려준다.

  • 스왑메모리 확인 방법
  • free -h

빌드 중 메모리 공간의 부족을 해결하기 위해 swapfile 설정

(참조 : https://ahnbk.com/?p=745 )

$ sudo fallocate -l 4.0G /swapfile # nano 2gb 일 경우에는 6.0G 이상으로 안그러면 4시간 넘게 걸린다...
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

부팅 시 자동 마운트를 위해서 스크립트 추가

$ sudo nano /etc/fstab

아래의 코드를 추가하고, 저장

/swapfile none swap 0 0

일반

컴파일을 시작하기 전에 사용 중인 컴퓨터의 CPU 코어수를 확인합니다.

$ cat /proc/cpuinfo | grep processor | wc -l
4

# 혹은

$ nproc
4

make 명령을 사용하여 컴파일을 시작합니다.

-j 다음에 위에서 확인한 숫자를 붙여서 실행해줍니다.

앞에 time을 붙여서 실행하면 컴파일 완료 후 걸린 시간을 알려줍니다.

$ time make -j4

컴파일 성공하면 다음과 같은 메시지를 볼 수 있습니다.

3090 (cpu 를 많이 썼더니 엄청 빠르게 컴파일 됨)

[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
[100%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-36m-x86_64-linux-gnu.so
[100%] Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python3
[100%] Built target opencv_python2

real    17m15.631s
user    55m47.050s
sys    2m39.468s

jetson

Scanning dependencies of target opencv_python2
Scanning dependencies of target opencv_python3
[100%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
[100%] Linking CXX shared module ../../lib/cv2.so
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-36m-aarch64-linux-gnu.so
[100%] Built target opencv_python2
[100%] Built target opencv_python3

real    82m19.086s
user    257m50.860s
sys     13m16.408s

이제 컴파일 결과물을 설치합니다.

$ sudo make install

/etc/ld.so.conf.d/ 디렉토리에 /usr/local/lib를 포함하는 설정파일이 있는지 확인합니다.

$ cat /etc/ld.so.conf.d/*

/usr/lib/x86_64-linux-gnu/libfakeroot
# libc default configuration
**/usr/local/lib    <--- 이거**
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

/usr/local/lib이 출력되지 않았다면 다음 명령을 추가로 실행해야합니다.

$ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'

/usr/local/lib을 찾은 경우나 못찾아서 추가한 작업을 한 경우 모두

컴파일시 opencv 라이브러리를 찾을 수 있도록 다음 명령을 실행합니다.

$ sudo ldconfig

OpenCV 설치 결과 확인

opencv_version --verbose
pkg-config --modversion opencv4

pkg-config --modversion opencv  ( 이건 옛날 버전 )

여기부턴 opencv TEST

아래와 같은 에러 뜰 경우

error while loading shared libraries: libopencv_highgui.so.4.5: cannot open shared object file: No such file or directory
$ /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
$ ldconfig

C/C++

$ g++ -o facedetect /usr/local/share/opencv4/samples/cpp/facedetect.cpp $(pkg-config opencv4 --libs --cflags)

Python

python 2.x와 python 3x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.

각각 OpenCV 버전이 출력되어야 합니다.

$ python
Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.2.0'
>>> 
$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.2.0'
>>> cv2.cuda.printCudaDeviceInfo(0)

혹시 다른 버전이 나온다면 다음 위치에 있는 cv2 디렉토리를 삭제하고 다시 해보세요.

sudo rm -rf ~ /.local/lib/python3.6/site-packages/cv2

기존 OpenCV 3를 삭제 후 진행했다면 다음과 같은 에러가 날 수 있습니다.

$ python
Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libopencv_reg.so.3.4: cannot open shared object file: No such file or directory

다음 처럼 cv2.so를 복사해줘야 합니다.

$ sudo cp /usr/local/python/cv2/python-2.7/cv2.so /usr/local/lib/python2.7/dist-packages/
$ sudo cp /usr/local/python/cv2/python-2.7/cv2.so /usr/lib/python2.7/dist-packages/
$ sudo cp /usr/local/python/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages
$ sudo cp /usr/local/python/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so /usr/local/lib/python3.6/dist-packages

예제 코드를 실행해봅니다.

$ python /usr/local/share/opencv4/samples/python/facedetect.py --cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0
$ python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0

다음처럼 터미널에 표시되면서 카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.

python2

$ python /usr/local/share/opencv4/samples/python/facedetect.py --cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0

face detection using haar cascades

USAGE:
    facedetect.py [--cascade <cascade_fn>] [--nested-cascade <cascade_fn>] [<video_source>]

[ INFO:0] Initialize OpenCL runtime...

python3

$ python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade 
"/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0

face detection using haar cascades

USAGE:
    facedetect.py [--cascade <cascade_fn>] [--nested-cascade <cascade_fn>] [<video_source>]

[ INFO:0] Initialize OpenCL runtime...

이제 필요 없어진 컴파일에 사용했던 opencv 소스코드 디렉토리를 삭제합니다.

rm -rf opencv