Ubuntu 환경에서 OpenCV4 C++ 삭제 후 재설치 (버전 변경)

Dingool95·2023년 8월 27일
0

참 감사한 라이브러리지만 상위 버전을 설치하면 이전 버전의 함수들과 호환이 안 되는 경우를 자주 접하게 된다... 그래서 이럴 때마다 버전을 변경해 줘야 하는데 리눅스에서 설치한 뭔가를 깔끔하게 삭제한다는 게 여간 어려운 일이 아니다. 해보자..

삭제

우선 설치된 opencv 버전을 체크해 주자.

$ pkg-config --modversion opencv4
$ pkg-config --modversion opencv <- opencv 3.x 버전인 경우

확인했으면 과감하게 삭제
$ sudo apt-get purge libopencv* libopencv4.2-java libopencv4.2-jni
$ sudo apt-get autoremove

혹시나 수동으로 찾아서 삭제하는 법

$ dpkg -l | grep libopencv

또 삭제

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

이러면 permission 어쩌고 하면서 삭제 안 되는 놈들의 경로가 나온다.
sudo rm -rf명령어로 일일이 다 삭제해 주자.

그리고 다시 버전 확인해 보면 안 떠야 제대로 삭제된 거다.

$ pkg-config --modversion opencv4

설치

다 지웠으면 설치하자.

이것저것 설치

$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 
$ sudo apt-get install libgtk-3-dev <- 이거 넘겨도 됨
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev <- 이거도 넘겨도 됨
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

이제 설치를 하는데, 여기서 버전을 선택할 수 있다.
복사해서 4.2.0 이 숫자를 원하는 버전으로만 바꿔서 설치해 주면 된다.

$ mkdir opencv
$ cd opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.2.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.2.0.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip

파일 받았으니 빌드해야 한다.
밑에 cmake -D 로 시작하는 것들은 컴파일 옵션인데
워낙 종류도 많고 뭐가 뭔지도 잘 모르겠다.
원하는 목적에 따라 찾아보고 ON 해주면 된다.
위에서 opencv_contrib를 설치했다.
그래서 OPENCV_EXTRA_MODULES_PATH 요기 경로를 잘 명시해 줘야 한다.
opencv_contrib 이건 설치 안 해도 되는데, 라이브러리를 좀 좋은 거 쓰려면 필요하다.

$ cd opencv-4.2.0 <- 위에서 설치한 버전대로 디렉토리 이름이 만들어 짐
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D OPENCV_GENERATE_PKGCONFIG=ON \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-4.2.0/modules \
      -D BUILD_EXAMPLES=ON \
      -D WITH_GSTREAMER=ON ..
$ sudo make -j$(nproc)	<- 무진장 오래 걸림
$ sudo make install
$ sudo ldconfig

for Jetson

$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git
$ git checkout 4.2.0
$ cmake -D CMAKE_BUILD_TYPE=Release \
		-D CMAKE_INSTALL_PREFIX=/usr/local \
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
        -D BUILD_EXAMPLES=OFF \
        -D BUILD_opencv_python3=OFF \
        -D BUILD_opencv_python2=OFF \
        -D WITH_CUDA=ON \
        -D ENABLE_NEON=ON \
        -D OPENCV_GENERATE_PKGCONFIG=ON \
        -D WITH_GSTREAMER=ON ..
$ sudo ln -s /usr/local/cuda-11.4/targets/aarch64-linux/lib/libnppc.so /usr/local/cuda-11.4/targets/aarch64-linux/lib/libnppicom.so
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_CUDA=ON \
      -D CUDA_ARCH_BIN="8.7" \
      -D CUDA_ARCH_PTX="" \
      -D WITH_CUDNN=ON \
      -D WITH_CUBLAS=ON \
      -D ENABLE_FAST_MATH=ON \
      -D CUDA_FAST_MATH=ON \
      -D ENABLE_NEON=ON \
      -D WITH_LIBV4L=ON \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
      -D CUDA_nppicom_LIBRARY=/usr/local/cuda-11.4/targets/aarch64-linux/lib/libnppicom.so \
      ..

이제 버전을 확인해 보면 원하는 버전으로 잘 설치되었는지 확인할 수 있다.

$ pkg-config --modversion opencv4

ROS 관련

나는 ROS랑 opencv를 같이 쓴다.
ROS를 설치하면 opencv 관련해서 자동으로 설치되는 것들이 있다.
그래서 ROS도 같이 삭제했다. 안 해도 될지도...? 연구가 필요.
(위 삭제과정에서 ROS 관련 opencv가 삭제되기 때문에 재설치 반드시 필요)

ROS 삭제

아래 명령어로 삭제.

$ sudo apt-get purge ros-*
$ sudo apt-get autoremove

ROS를 삭제하고 나면 제대로 설치 안 되는 것들이 있더라.
dependency 어쩌구 하면서 설치가 안 되는데
당황하지 말고 에러 메세지에서 튀어 나오는 것들을 다 설치해 보자.
결국 dependency 최상단에서 문제를 일으킨 놈을 발견할 수 있다.
그 놈을 지우고 다시 설치하면 된다.

ROS 설치

msgs 중 설치 자동으로 안 되는 것들이 있음. (ROS 버전에 맞게 설치)

$ sudo apt install ros-noetic-geographic-msgs
$ sudo apt install ros-noetic-vision-msgs
$ sudo apt install ros-noetic-ddynamic-reconfigure
$ sudo apt install ros-noetic-desktop-full

NVIDIA Jetson board

Even if we check opencv contrib when we install Jetpack, opencv contrib for c++ does not installed.

ceres solver for jetson

sudo apt install libceres-dev is not candidate in jetson.

sudo apt update
sudo apt install cmake libgoogle-glog-dev libgflags-dev libeigen3-dev libsuitesparse-dev

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build && cd build

cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install

Nvidia Jetso Orin NX에서 ROS 설치를 하는데 자꾸 libopencv-dev가 4.5.4로 설치가 되었다.
뭔가 이상해서 보니까 /etc/apt/sources.list (이게 아닐 수도) 아무튼 /etc/apt에 가보면 ubuntu의 서버에서 설치 되는 게 아니라 nvidia가 들어가 있는 서버에서 설치되도록 주소가 명시되어 있다.
해당 서버 주소를 주석 처리하고 다시 설치하면 정상적으로 4.2 버전이 설치된다.

/etc/apt/sources.list.d 경로에 있는 nvidia-l4t-apt-source.list 파일 수정.
root에 있는 파일이므로 sudo 로 수정.

# SPDX-FileCopyrightText: Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.

deb https://repo.download.nvidia.com/jetson/common r35.1 main   <-- comment
deb https://repo.download.nvidia.com/jetson/t194 r35.1 main  <-- comment
profile
내 맘대로 요점정리

0개의 댓글