1. 필요 패키지 설치
sudo apt-get install build-essential cmake # C/C++ 컴파일러 관련 라이브러리 및 도구
sudo apt-get install pkg-config # 컴파일 및 링크시 필요한 라이브러리 정보를 메타파일로부터 가져옴
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 # 실시간 웹캠 비디오 캡처를 위한 디바이스 드라이버 및 API
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev # 비디오 스트리밍 라이브러리 설치 (Gstreamer)
sudo apt-get install libgtk-3-dev # opencv GUI (이외: libgtk2.0-dev, libqt4-dev, libqt5-dev)
sudo apt-get install libatlas-base-dev gfortran libeigen3-dev # OpenCV 최적화 라이브러리
sudo apt-get install python3-dev python3-numpy # OpenCV-Python 바인딩 & 행렬 연산
sudo apt-get install libfreetypes6-dev libharfbuzz-dev # opencv 한글 지원
sudo apt install unzip
2. OpenCV 소스코드 내려받기
mkdir ~/opencv && cd ~/opencv
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
3. CMake Setup
cd ./opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \\
-D CMAKE_INSTALL_PREFIX=/usr/local \\
-D WITH_TBB=OFF \\
-D WITH_IPP=OFF \\
-D WITH_1394=OFF \\
-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_CUDA=ON \\
-D WITH_CUDNN=ON \\
-D OPENCV_DNN_CUDA=ON \\
-D CUDA_FAST_MATH=ON \\
-D CUDA_ARCH_BIN=7.5 \\ # 자신 GPU의 compute capability 값
-D WITH_CUBLAS=ON \\
-D WITH_CUFFT=ON \\
-D WITH_QT=ON \\
-D WITH_GTK=OFF \\
-D WITH_OPENGL=ON \\
-D WITH_V4L=ON \\
-D WITH_FFMPEG=ON \\
-D WITH_XINE=ON \\
-D BUILD_NEW_PYTHON_SUPPORT=ON \\
-D INSTALL_C_EXAMPLES=OFF \\
-D INSTALL_PYTHON_EXAMPLES=OFF \\
-D OPENCV_GENERATE_PKGCONFIG=ON \\
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \\
-D OPENCV_ENABLE_NONFREE=ON \\
-D BUILD_EXAMPLES=OFF ..
nproc # 자신 시스템의 코어 수 확인
# build (modify the core number '12' after option -j accordingly)
make -j8 # 자신 시스템 코어 수에 맞게 -j 다음의 숫자를 변경
# install
sudo make install
# check if it is installed successfully
pkg-config --modversion opencv4
4. 설치 확인
4.1 OpenCV 동작 여부 확인
아래 코드를 test.cpp라는 파일명으로 저장
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap(0);
if (!cap.isOpened()){
printf("카메라를 열수 없습니다. \\n");
}
Mat frame;
namedWindow("camera1", 1);
for (;;)
{
cap >> frame;
imshow("camera1", frame);
if (waitKey(20) >= 0) break;
}
return 0;
}
아래 내용을 복사해 CMakeLists.txt로 저장
get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C CXX)
set (CMAKE_CXX_STANDARD 11)
cmake_minimum_required(VERSION 2.8)
find_package( OpenCV REQUIRED )
file(GLOB SOURCES *.cpp)
add_executable(${PROJECT_NAME} ${SOURCES} )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )
CMake → Make → 실행
mkdir buld && cd build
cmake ../
make
./test
4.2 OpenCV GPU 사용 가능 여부 확인
아래 코드를 gpu.cpp라는 파일명으로 저장
#include <iostream>
using namespace std;
#include <opencv2/core.hpp>
using namespace cv;
#include <opencv2/cudaarithm.hpp>
using namespace cv::cuda;
int main()
{
printShortCudaDeviceInfo(getDevice());
int cuda_devices_numbers = getCudaEnabledDeviceCount();
cout << "CUDA Device(s) Compatible: " << cuda_devices_numbers << endl;
DeviceInfo _deviceInfo;
bool _isd_evice_compatible = _deviceInfo.isCompatible();
cout << "CUDA Device(s) Compatible: " << _isd_evice_compatible << endl;
return 0;
}
빌드
g++ -o gpu gpu.cpp $(pkg-config opencv4 --libs --cflags)
실행 결과에서 Number와 Compatible에서 모두 1이 나오면 GPU 동작 수행 가능
만약 1이 나오지 않는다면 설치과정 3의 옵션 중 아래 두 옵션의 수를 잘못 기입한 것임.
-D CUDA_ARCH_BIN=x.x
-D CUDA_ARCH_PTX=x.x
이를 해결하기 위해 해당 그래픽 카드에 맞는 버전으로 기입해줄 것
Reference
[1] https://darkpgmr.tistory.com/184
[2] https://webnautes.tistory.com/1767
'Computer Science > 로봇공학' 카테고리의 다른 글
ROS2 launch 파일로 Gazebo와 Rviz2 실행하기 (0) | 2023.06.11 |
---|---|
Gazebo 시뮬레이션에서 world 파일 사용법 (1) | 2023.06.11 |
Gazebo를 활용한 드론 시뮬레이션 실행 (0) | 2023.06.11 |
Ubuntu 22.04에 VSCode C++ 개발 환경 구축 (0) | 2023.06.11 |
Ubuntu 22.04에 ROS2 humble과 Gazebo 설치 (3) | 2023.06.10 |