< OpenCV 4.8.1 빌드 및 설치 >
■ 라즈베리파이 스펙
- 라즈베리파이4 이상
- RAM 8GB 이상
- PWM PAN
- Device Mart PD-Adaptor
1. 저장소 정보를 최신으로 맞추어 준다.
1) 시스템 업데이트
$ sudo apt update
2) 시스템 업그레이드.
$ sudo apt upgrade
3) 필요없는 패키지 제거
$ sudo apt autoremove
2. 기존 설치된 버전 제거
1) 기존에 OpenCV를 설치한 적이 있는지 확인 (아래의 경우는 설치된 적이 없는경우)
$ pkg-config --modversion opencv
2) 설치된 경우에는 설치된 버전이 표시된다.
특정버전이 표시된 경우 아래의 명령을 통해서 기존에 설치된 opencv를 제거해주어야 한다.
$ sudo apt-get purge libopencv* python-opencv
$ sudo apt-get autoremove
$ sudo find /usr/local/ -name "*opencv*" -exec rm {} \;
3. 관련 패키지 설치
1) Opencv가 한번도 설치되지 않은경우를 제외하고 패키지를 삭제했다면
다시한번 시스템을 업데이트와 업그레이드를 한다.
$ sudo apt update
$ sudo apt upgrade
2) 컴파일러 및 유틸리티등 빌드 및 향후 사용하게될 유틸리티와 라이브러리를 한번에 설치한다.
- 관련 패키지에서 최근 라즈베리파이 OS에서 변경사항이 있다.
- 2개의 패키지가 변경되었으므로, 관련하여 패키지를 수정한다.
--> 대상 패키지는 libtbb2, libdc1394-22-dev이며
각각 libtbbmalloc2와 libdc1394-dev로 변경한다.
$ sudo apt install build-essential cmake git unzip pkg-config
$ sudo apt install libjpeg-dev libtiff5-dev libpng-dev libavcodec-dev libavformat-dev
$ sudo apt install libswscale-dev libxvidcore-dev libx264-dev
$ sudo apt install libxine2-dev libv4l-dev v4l-utils libgstreamer1.0-dev
$ sudo apt install gstreamer1.0-gtk3 libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good
$ sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-gl libgtk-3-dev
$ sudo apt install libgtk2.0-dev libcanberra-gtk* libatlas-base-dev gfortran libeigen3-dev
$ sudo apt install python3-dev python3-numpy python3-pip
$ sudo apt install libtbbmalloc2 libtbb-dev libdc1394-dev
$ sudo apt install libopenblas-dev libblas-dev liblapack-dev libhdf5-dev
$ sudo apt install libprotobuf-dev libgoogle-glog-dev libgflags-dev
$ sudo apt install protobuf-compiler libfreetype6-dev libharfbuzz-dev
★ 패키지 설치 화면에서 y를 눌러 패키지 설치를 진행한다.
3. OpenCV 빌드와 설치
1) 작업디렉터리 생성
$ cd ~
$ mkdir -p WORK/opencv
$ cd WORK/opencv
2) OpenCV 및 확장패키지 소스 다운로드
$ w get -O opencv.zip
https://github.com/opencv/opencv/archive/4.8.1.zip
$ w get -O opencv_contrib.zip
https://github.com/opencv/opencv_contrib/archive/4.8.1.zip
3) 압축해제
- 각각 압축파일을 풀어준다.
- sync 명령어는 시스템 버퍼에 있는 데이터를 디스크에 저장하는 명령어이다.
$ unzip opencv.zip
$ sync
$ unzip opencv_contrib.zip
$ sync
4) 빌드디렉터리 생성 - 빌드를 진행할 디렉터리를 만들어 주고 이동한다.
$ cd opencv-4.8.1
$ mkdir build
$ cd build
5) 파이선을 패키지 디렉터리 확인
$ python3 –m site
6) 빌드 설정 - cmake를 이용하여 빌드 환경을 설정한다.
$ 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 INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D ENABLE_NEON=ON -D ENABLE_VFPV3=OFF -D WITH_QT=OFF -D WITH_GTK=ON –D WITH_FREETYPE=ON -D WITH_OPENGL=ON -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.8.1/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D ENABLE_PRECOMPILED_HEADERS=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.11/dist-packages ../
★ 모두 한줄입니다.
7) 스왑메모리 설정(확장)
라즈베리파이4 8GB를 사용하지 않는 경우 메모리 부족으로 빌드를 여러번 반복하거나 오류가 날 수 있다.
그래서 sd메모리 일부를 메모리로 사용할 수 있도록 설정한다.
① swap 설정파일 열기
$ sudo vi /etc/dphys-swapfile
② 설정변경
CONFSWAPSIZE 변수값을 100에서 2048로 설정후 저장하고 나온다.
③ 시스템을 재부팅하여 메모리 상태를 확인
free 명령을 입력하여 설정된 메모리 상태를 확인한다.
$ free
8) 빌드하기
$ time make -j4
- time는 작업시간이 나옴, -j4는 쿼드코어
real 32m12.640s <---- 빌드에 소비된 시간은 32분12초 정도이다.
* 빌드 진행시 CPU 점유율 100%, 온도 최대 67도까지 상승..
--> 팬이 엄청 회전하는 데도 저전압 메시지 발생되도 계속 진행
9) 설치 및 ld등록
① 빌드가 완료되면 시스템에 설치한다.
$ sudo make install
② 등록
$ sudo ldconfig
10) 스왑메모리 (제게-복구)
$ sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE 변수값을 다시 100으로 수정
cd /usr/local/cuda-<version>
# ex) cd /usr/local/cuda-11.8
sudo rm -rf lib64/libcudnn*
sudo rm -rf include/cudnn*
sudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_cnn_infer.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_ops_infer.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_ops_train.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_adv_infer.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_adv_train.so.8
sudo ln -sf libcudnn.so.8.9.7 libcudnn_cnn_train.so.8