https:/webnautes.tistory.com/916 OpenCV 4.5.1과 opencv_contrib(extra modules)을 컴파일하여 Raspberry Pi4에 설치하는 방법을 다룹니다. Raspberry Pi3에서도 동일하게 작동합니다. 1. 기존 OpenCV 버전 삭제 2. 기존 설치된 패키지 업그레이드 . webnautes.tistory.com 상의 블로그를 참고하여 opencv를 설치하는 제 기록
설치하는데 걸리는 시간은 총 1시간 반 정도!
명령어가 복잡해서 카피페를 추천합니다.기존 패키지를 업데이트/업그레이드 해줍니다.pi@minjoo:~ $ sudo apt updatepi@minjoo:~ $ sudo apt upgrade
다음에 재부팅 해줍니다.pi@minjoo:~ $ sudo shutdown -r now
참고 블로그에서는 sudor reboot 이었지만 Networkerror가 나와서 저는 위와 같이 했습니다.
OpenCV 컴파일 시 필요한 패키지 설치
build-essential 패키지에는 C/C++ 컴파일러와 관련 라이브러리, make와 같은 도구가 포함된 cmake는 컴파일 옵션이나 빌드된 라이브러리에 포함할 OpenCV 모듈 설정 등을 위해 필요 pi@minjoo: ~$sudoapt install build-essential cmake
특정 포맷의 이미지 파일을 가져오거나 저장하기 위해 필요한 패키지 설치 pi@minjoo:~$ sudo apt install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev
모르는게 위랑 아래랑 같은 명령어인데 왜 처음에는 못찾고 두번째는 되는지…?
특정 코덱의 비디오 파일/스트리밍을 가져오거나 기록하는 데 필요한 FFmpeg 관련 패키지 pi@minjoo: ~$ sudoapt install libavcodec-dev libavformat-dev libxvidcore-dev libx264-dev libxine2-dev
Video4 Linux 패키지는 Linux에서 실시간 비디오 캡처를 지원하기 위한 장치 드라이버 및 API를 포함하는 pi@minjoo : ~$sudoaptinstalllib v4l-devv4l-utils
여기서 또 이상한 점
libx4l부터 L(영어엘) 인것 같은데 입력해도 안돼. 혹시 I(영어아이)인가, 시도해봤는데 아니야. 복사해서 쓰시면 됩니다..!
특정 고덱의 비디오 파일/스트리밍을 가져오거나 기록하는 데 필요한 GSTreamer 관련 패키지 pi@minjoo: ~$ sudoapt install libgstreamer 1.0-dev libgstreamer-base 1.0-dev gstreamer 1.0-plugins-bad gstreamer 1.0-plugins-bad gstreamer 1.0-plugly
OpenCV에서는 highgui 모듈을 사용하여 독자적으로 창을 생성하고 이미지나 영상을 표시하는 창 생성 등 GUI를 위해 gtk 또는 qt를 선택하여 사용할 수 있으며, 이 글에서는 gtk2를 사용하는 pi@minjoo: ~$sudoapt install libgtk2.0-dev
OpenGL을 지원하기 위해 필요한 라이브라이프@minjoo: ~$ sudo apt install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
OpenCV 최적화를 위해 사용되는 라이브러리 pi@minjoo : ~$ sudo apt install libatlas-base-dev gfortran libeigen3-dev
python 2.7-dev와 python 3-dev 패키지는 파이썬을 위한 헤더 파일과 라이브러리가 포함된 패키지의 Numpy는 매트릭스 연산 등을 신속하게 처리할 수 있으므로 OpenCV Python에서 사용되는 pi@minjoo: ~$sudoapt install python 3-dev python 3-numpy
소스 코드를 저장할 임시 디렉토리를 작성하고 이동 후 진행 pi@minjoo: ~$mkdiropencvpi@minjoo: ~$cdopencvpi@minjoo: ~/opencv$
OpenCV 4.5.1 소스코드를 다운로드 받아 압축을 풂pi@minjoo:~/opencv $ wget -O opencv.zip http://github.com/opencv/opencv/archive/4.5.1.zippi@minjoo:~/opencv $ unzip opencv.zip
opencv_contrib(extra modules) 소스코드를 다운받아 압축을 푸는 SURF 등을 사용하기 위해 필요pi@minjoo:~/opencv$wget-Oopencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zippi@minjoo:~/opencv$unzipopencv_contrib.zip
이렇게 깔린 것을 확인할 수 있다.
openc v-4.5.1 디렉토리로 이동하여 Build 디렉토리를 생성하고 Build 디렉토리로 이동 컴파일은 Buile 디렉토리로 수행된다.pi@minjoo:~/opencv $ cd opencv-4.5.1pi@minjoo:~/opencv/opencv-4.5.1 $ mkdir buildpi@minjoo:~/opencv/opencv-4.5.1 $ cd buildpi@minjoo:~/opencv/opencv-4.5.1/build $
cmake를 사용해 OpenCV 컴파일 설정복사해서 쓰세유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=ON -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.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 ../
이렇게 뜨면 완료.
진행하기 전 스왑 공간을 늘려야 하므로 멀티코어를 사용하여 컴파일 시 메모리 부족으로 오류가 발생하지 않는 pi@minjoo: ~/opencv/opencv-4.5.1/build $ sudonano/etc/dphys-swapfile
CONF_SWAPSIZE 변수 값을 100에서 2048로 수정해준다.
free로 확인해보니 현재 스와프가 100메가
스왑관련 서비스를 재부팅하는 pi@minjoo: ~/opencv/opencv-4.5.1/build$sudo/etc/init.d/dphys-swapfile restartingdphys-swapfile(via systemctl): dphys-swapfile. 서비스. << 이렇게 표시할 필요가 있습니다.
스와프가 2048메가로 전환되다
make 명령어를 사용하여 컴파일 시작 -j4 옵션을 주고 먼저 진행 pi@minjoo: ~/opencv/opencv-4.5.1/build$timemake-j4
★여기서 1시간 정도 걸립니다.★
만약 문제가 생기면 Ctrl+C에서 멈추고 pi@minjoo:~/opencv/opencv-4.5.1/build$make 이렇게 해서 재시작
컴파일 결과물 설치 pi@minjoo:~/opencv/opencv-4.5.1/build$sudo make install
샘플 코드는 /usr/local/share/opencv4/samples/에 복사된다
opencv 라이브러리를 찾을 수 있도록 명령어 실행 (소문자 엘)pi@minjoo: ~/opencv/opencv-4.5.1/build$sudoldconfig
다음 /etc/dphy-swapfile 열려 pi@minjoo: ~/opencv/opencv-4.5.1/build$sudonano/etc/dphys-swapfile CONF_SWAPSIZE 변수 값을 다시 2048에서 100으로 바꾼다.
아까처럼 서비스를 재부팅하고 변경된 설정을 반영해주시면 pi@minjoo:~/opencv/opencv-4.5.1/build$sudo/etc/init.d/dphys-swapfile restart
스왑 크기가 원래대로 돌아간다. python3에서 opencv 라이브러리 사용 가능한지 확인
4.5.1 나오면 잘 깔린 거예요.혹시 안되면 중간에 명령어가 제대로 깔리지 않은 게 있을 거예요.삭제하고 재설치하면서 제대로 설치되었는지 확인하면서 하나하나 해보시길 권합니다.오류가 나는 부분에서 왜 문제인지 구글링하면서 찾으면 다운받을 수 있을 것 같아요.
라즈베리 파이 카메라의 접속법과 접속 확인법은 다음 포스트에 씁니다.