본문으로 바로가기

 

 

환경

 

환경은 다음과 같습니다.

cat /etc/os-release

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

 

uname -a

Linux raspberrypi 5.4.59-v7+ #1336 SMP Wed Aug 19 16:03:09 BST 2020 armv7l GNU/Linux

 

 

 

설치

 

라즈베리파이에 기본으로 설치되어 있는 OpenCV2 를 제거하고 의존성 패키지까지 정리합니다.

sudo apt-get remove libopencv*
sudo apt-get autoremove

 

APT Repository 를 업데이트합니다.

sudo apt-get update
sudo apt-get upgrade

 

OpenCV 를 위한 영상처리 관련 패키지를 설치합니다.

한 줄씩 복사해서 실행합니다.

sudo apt-get install build-essential cmake cmake-curses-gui pkg-config

sudo apt-get install libjpeg-dev libjasper-dev libpng12-dev libtiff5-dev

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libeigen3-dev libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev

sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev

sudo apt-get install libatlas-base-dev gfortran

sudo apt-get install libv4l-dev v4l-utils

 

 

메모리 오류 방지를 위해 Swap 파일 크기를 변경합니다.

 

/etc/dphys-swapfile

# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024

 

Swap 관련 서비스 재시작

sudo /etc/init.d/dphys-swapfile restart

 

메모리 보는 명령어

free -m
              total        used        free      shared  buff/cache   available
Mem:            874          48         564           0         261         760
Swap:          1023         115         908

 

 

4.1.2 버전 압축파일을 다운로드하고 압축을 해제합니다.

wget https://github.com/opencv/opencv/archive/4.1.2.zip -O opencv4.zip
wget https://github.com/opencv/opencv_contrib/archive/4.1.2.zip -O opencv4_contrib.zip

unzip opencv4.zip
unzip opencv4_contrib.zip

 

압축을 해제한 디렉터리명을 확인하고

ls
opencv-4.1.2 opencv4_contrib.zip opencv4.zip opencv_contrib-4.1.2

 

해당 디렉터리로 이동해서 build 디렉터리를 생성합니다.

cd opencv-4.1.2
mkdir build

 

다음 구성으로 빌드를 시작합니다.

cmake -D CMAKE_BUILD_TYPE=RELEASE \ 
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WIDTH_IPP=OFF \
-D BUILD_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=FF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_PERF_TESTS=OFF \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D WITH_QT=OFF \
-D WITH_QTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPEN_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/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 ..\
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build

 

컴파일을 시작합니다.

time make -j4

 

완료하면 다음과 같이 출력되며, 166 분이 걸렸습니다.

[100%] Built target opencv_python2

real	166m56.009s
user	399m51.650s
sys	15m6.475s

 

오랫동안 멈춤 현상이 있는 경우에는 Ctrl + C 로 중지하고, 다시 make 하면 이어서 진행을 완료할 수 있습니다.

 

컴파일한 결과를 설치합니다.

sudo make install
...
-- Installing: /usr/local/share/opencv4/samples/python/squares.py
-- Installing: /usr/local/share/opencv4/samples/python/stereo_match.py
-- Installing: /usr/local/share/opencv4/samples/python/stitching.py
-- Installing: /usr/local/share/opencv4/samples/python/stitching_detailed.py
-- Installing: /usr/local/share/opencv4/samples/python/texture_flow.py
-- Installing: /usr/local/share/opencv4/samples/python/tst_scene_render.py
-- Installing: /usr/local/share/opencv4/samples/python/turing.py
-- Installing: /usr/local/share/opencv4/samples/python/video.py
-- Installing: /usr/local/share/opencv4/samples/python/video_threaded.py
-- Installing: /usr/local/share/opencv4/samples/python/video_v4l2.py
-- Installing: /usr/local/share/opencv4/samples/python/watershed.py

 

OpenCV 라이브러리 적용합니다.

sudo ldconfig

 

Swapfile 설정을 다시 복구합니다.

 

/etc/dphys-swapfile

CONF_SWAPSIZE=100
# CONF_SWAPSIZE=1024
free -m

              total        used        free      shared  buff/cache   available
Mem:            874         142         443          13         288         665
Swap:            99           0          99

 

리눅스에서 사용할 수 있게 디바이스 파일이 생겼는지 확인합니다.

ls /dev/video*

 

 

파이 카메라의 경우에는 다음 명령어로 모듈을 추가하여 장치를 생성합니다.

sudo modprobe bcm2835-v4l2

 

확인해봅니다.

$ pkg-config --modversion opencv4
4.1.2

 

파이썬2 와 파이썬3 에도 모듈을 import 합니다.

$ python
Python 2.7.16 (default, Oct 10 2019, 22:02:15) 
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.2'

$ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.2'

 

 

참고

 

워낙 오래걸리고 실패할 확률이 높습니다.

안되시는 분은 제가 참고한 아래 링크로 가서 차근차근 따라해보세요.

 

Raspberry Pi 3에 Extra Module(contrib) 포함하여 OpenCV 4.1.2 설치하는 방법

OpenCV 4.1.2과 opencv_contrib(extra modules)를 컴파일하여 Raspberry Pi 3에 설치하는 방법을 다룹니다. 1. 기존 OpenCV 버전 제거 2. 기존 설치된 패키지 업그레이드 3. OpenCV 컴파일 전 필요한 패키지 설치..

webnautes.tistory.com