아무래도 우리 독자분들께서는 OpenCV를 사용하시는 분들이 많은것 같다. 그래서 필자도 간혹 한번씩 써야되니까, 미리 되는지 확은을 해둘까 한다. 관련해서는 기존 방법을 그대로 이용하고, 기존 포스팅은 놔두고 새로 작성할 예정이다. 아무래도 운영체제 버전도 좀 바뀌었고 하니까 말이다.
기존 문서를 기반으로 변경된 내용 위주로 포스팅 할 예정이므로, 빌드와 관련된 자세한 방법 자체는 기존 라즈베리파이 4/400 OpenCV 4.6.0 설치 포스트"를 참조하시라. 필자가 4.6.0으로 빌드를 진행했으나 opcv_dnn관련 라이브러리 빌드중 오류가 발생됨을 확인하였다. 일부 영상처리관련 기능을 제거함으로서 처리하는 방법도 있는데, 그럴거면 버전을 올리는 것이 더 유익할 것으로 판단하여 OpenCV 버전을 4.6.0에서 4.8.1로 변경하여 진행하였다.
--- 관련(유사) 자료 목차 ----------
1. 라즈베리파이 4/400 OpenCV 4.6.0 설치 : https://makeutil.tistory.com/207
2. 이미지 파일 출력 (png, jpg, bmp) : https://makeutil.tistory.com/212
3. 웹카메라를 이용한 영상 출력 : https://makeutil.tistory.com/220
4. 웹카메라를 이용한 영상 저장 : https://makeutil.tistory.com/221
5. 웹카메라로 저장한 미디어파일(.mp4) 출력 : https://makeutil.tistory.com/222
--------------------
1. 준비하기
본 문서는 라즈베리파이 5를 기준으로 작성되었다. 그리고 메모리카드는 16GB이상의 메모리를 사용할 것을 권장한다. 필자는 NVME를 사용하여 네이티브 빌드속도 등을 확인할 목적으로 게시물을 업데이트 한다. 어쨋거나 가능하면 기록속도가 빠른 MicroSD나 USB 제품으로 하는게 빌드할 때 스트레스를 줄여준다.
* 테스트 스펙
- 라즈베리파이5 8GB RAM with PCIe NVME
- PWM PAN
- Device Mart PD-Adaptor
라즈베리파이 부트 이미지는 아래의 문서를 참고한다.
- 라즈베리파이 OS 설치하기 : https://makeutil.tistory.com/142
1.1. 시스템 업데이트
저장소 정보를 최신으로 맞춰준다.
$ sudo apt update |
1.2. 시스템 업그레이드.
$ sudo apt upgrade |
1.3. 필요없는 패키지 제거
$ sudo apt autoremove |
1.4. 기존 설치된 버전 제거
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 {} \; |
2. 패키지 설치
Opencv가 한번도 설치되지 않은경우를 제외하고 패키지를 삭제했다면 다시한번 시스템을 업데이트 한다.
2.1. 패키지 업데이트 및 업그레이드
$ sudo apt update $ sudo apt upgrade |
2.2. 관련 패키지 설치
컴파일러 및 유틸리티등 빌드 및 향후 사용하게될 유틸리티와 라이브러리를 한번에 설치한다. 관련 패키지에서 최근 라즈베리파이 OS에서 변경사항이 있다. 2개의 패키지가 변경되었으므로, 관련하여 패키지를 수정해주도록 하자.
대상 패키지는 libtbb2, libdc1394-22-dev이며 각각 libtbbmalloc2와 libdc1394-dev로 변경한다.
$ sudo apt install build-essential cmake git unzip pkg-config libjpeg-dev libtiff5-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev libv4l-dev v4l-utils libgstreamer1.0-dev gstreamer1.0-gtk3 libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-gl libgtk-3-dev libgtk2.0-dev libcanberra-gtk* libatlas-base-dev gfortran libeigen3-dev python3-dev python3-numpy python3-pip libtbbmalloc2 libtbb-dev libdc1394-dev libopenblas-dev libatlas-base-dev libblas-dev liblapack-dev gfortran libhdf5-dev libprotobuf-dev libgoogle-glog-dev libgflags-dev protobuf-compiler vim nano libfreetype6-dev libharfbuzz-dev |
패키지 설치 화면에서 y를 눌러 패키지 설치를 진행한다.
3. OpenCV 빌드와 설치
앞서 준비가 완료되었으면 이제 소스를 받아 빌드하고 설치를 진행한다.
3.1. 작업디렉터리 생성
$ cd ~ $ mkdir opencv $ cd opencv |
3.2. OpenCV 및 확장패키지 소스 다운로드
github에서 다운로드 받거나 아래와 같이 wget을 통해 받을 수 있다.
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.8.1.zip $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.8.1.zip |
3.3. 압축해제
각각 압축파일을 풀어주자.
$ unzip opencv.zip $ sync $ unzip opencv_contrib.zip $ sync |
3.4. 빌드디렉터리 생성
빌드를 진행할 디렉터리를 만들어 주고 이동한다.
$ cd opencv-4.8.1 $ mkdir build $ cd build |
3.5. 파이선을 패키지 디렉터리 확인
기존 4/400에서 빌드할 때와 다르게 시간이 지난지라 파이선 버전이 3.9에서 3.11로 변경되었음을 알수 있다.
$ python3 –m site |
3.6. 빌드 설정
아래와 같이 cmake를 이용하여 빌드 환경을 설정한다. 이때 업그레이드된 파이선 패키지 패스를 적용하여야 하므로 기존 존 문서에서 파이선 부분의 경로를 일부 수정한다. 예전엔 문제가 없었는데, 최근 블로그에서 긁어서 붙히면 공백이 다른 문자로 바뀌는 것 같다. 테스트 해보니 일일이 공백을 지웠다가 다시 넣어주니 정상적으로 빌드가 된다. 빌드가 필요한 독자 께서는 아래의 cmake cmd.txt를 받아서 긁어서 사용하는 것이 좋을 것 같다.
아래의 텍스트를 열어서 opencv-4.6.0을 opencv-4.8.1로 변경한다.
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 ../
[시간측정] 설정하는데 소요된 시간 23초.
3.7. 스왑메모리 설정(확장)
라즈베리파이4 8GB를 사용하지 않는 경우 메모리 부족으로 빌드를 여러번 반복하거나 오류가 날 수 있다. 그래서 sd메모리 일부를 메모리로 사용할 수 있도록 설정한다.
1) swap 설정파일 열기 (nano또는 vim을 이용)
$ sudo vim /etc/dphys-swapfile |
2) 설정변경
CONFSWAPSIZE 변수값을 100에서 2048로 설정후 저장하고 나온다.
3) 시스템을 재부팅하여 메모리 상태를 확인
아래의 명령을 입력하여 설정된 메모리 상태를 확인한다.
$ free |
3.8. 빌드
공유메모리 까지 처리했다면, 이제 다시 ~/opencv/opencv-4.6.0/build 디렉터리에서 컴파일을 시작한다.
$ cd ~/opencv/opencv-4.8.1/build $ time make -j4 |
** 빌드 진행시 CPU 점유율 100%, 온도 최대 67도까지 상승.. 팬이 저돌적으로 회전하는 와중 저전압 메시지 발생됨.
=> 역시 예상대로 라즈베리파이5는 전원 때문에 망할것... 아니.. 위태로워 질것 같다.
어쨋든 잠시 기다리면 아래와 같이 빌드가 완료됨을 확인할 수 있다.
빌드에 소비된 시간은 32분12초 정도이다. 이정도면 빌드 머신으로 그럭저럭 쓸만할 것같다.
3.9. 설치 및 ld등록
1) 설치
빌드가 완료되면 시스템에 설치해주자.
$ sudo make install |
2) 라이브러리 등록
빌드할때 참조 가능하도록 라이브러리 정보를 등록한다.
$ sudo ldconfig |
3.10. 스왑메모리 (제거)
앞서 Swap메모리를 설정했다면 스왑메모리를 제거한다.
$ sudo vim /etc/dphys-swapfile |
CONF_SWAPSIZE 변수값을 다시 100으로 수정
설치하는 방법은 기존 라즈베리파이4/400과 동일한데, 시스템이 업그레이드 되면서 몇몇 문제가 발생되므로 결국 버전을 올려서 빌드하는 것으로 마무리 한다.
본 문서가 조금이라도 독자들에게 도움이 되었길..
최근댓글