<본 포스팅의 정보는 약 2~3년 전의 정보이므로 현재 리눅스 버전에서 오류 혹은 막힘이 발생할 수 있습니다.>
안녕하세요. 캔위성 대회에서 사용하기 위해 openCV를 라즈베리파이에 설치했습니다. 설치 과정을 찾아봐도 매우 복잡하고 계속 오류가 떠서 외국 지문들과 포럼들을 찾아 어렵게 설치했습니다.
여러분들의 수고를 덜어드리기 위해서 직접 정리해서 올려드리려고 합니다.
천천히 잘 따라오시면 openCV를 설치하실 수 있을 겁니다.
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
위 명령어를 입력해 라즈베리파이에 설치된 패키지와 OS를 최신으로 유지합니다.
다음으로 openCV를 컴파일 하는 과정에서 꼭 필요한 것들을 설치할 것입니다.
$ sudo apt-get install build-essential cmake
build-essential 패키지에는 C++ 컴파일러 및 make 명령어를 사용할 수 있게 해주는 기능이 들어있습니다. 위 명령어로 설치합니다.
$ sudo apt-get install cmake
cmake는 openCV 모듈을 설정할 때 사용합니다.
$ sudo apt-get install pkg-config
pkg-config는 프로그램을 컴파일하거나 링크할 때 필요한 라이브러리 정보를 메타파일로 받아옵니다.
$ sudo apt-get install libpng12-dev
$ sudo apt-get install libjpeg-dev
$ sudo apt-get install libtiff5-dev
$ sudo apt-get install libjasper-dev
jpeg 및 png와 같은 다양한 이미지 파일 포맷을 불러오거나 새로 기록할 떄 필요한 패키지입니다.
패키지 이름을 정확히 보여드리기 위해서 따로 적었습니다.
$ sudo apt-get installlibpng12-dev libjpeg-dev libtiff5-dev libjasper-dev
(위 블록과 같은 내용의 명령어입니다.)
위와 같이 한꺼번에 설치할 수도 있습니다. 하지만 오타가 날 확률이 굉장히 크기 때문에 따로 설치하여 어떤 패키지에서 오류가 발생하였는지 확인하기 쉽게 따로 설치하거나 2개 정도의 패키지를 같이 설치하는 것을 추천드립니다.
$ sudo apt-get install libavformat-dev
$ sudo apt-get install libxvidcore-dev
$ sudo apt-get install libswscale-dev
$ sudo apt-get install libxine2-dev
$ sudo apt-get install libavcodec-dev
$ sudo apt-get install libx264-dev
비디오 파일을 기록하고 읽어올 때 사용합니다.
$ sudo apt-get install libv4l-dev
$ sudo apt-get installv4l-utils
위 패키지는 리눅스 기반 운영체제에서 실시간으로 비디오를 캡쳐할 때 사용하는 디바이스 드라이버와 API를 포함합니다.
$ sudo apt-get install libgstreamer1.0-dev
$ sudo apt-get install libgstreamer-plugins-base1.0-dev
위 패키지는 비디오를 스트리밍 할 때 필요한 라이브러리입니다.
$ sudo apt-get install libqt4-dev
highgui 모듈로 새로운 창으로 이미지 및 비디오를 재생합니다.
$ sudo apt-get install mesa-utils
$ sudo apt-get install libgl1-mesa-dri
$ sudo apt-get install libqt4-opengl-dev
openGL를 사용할 때 최적화를 돕는 모듈들입니다.
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install gfortran
$ sudo apt-get install libeigen3-dev
openCV를 사용할 때 최적화를 돕는 모듈들입니다.
$ sudo apt-get install python2.7-dev
$ sudo apt-get install python3-dev
$ sudo apt-get install python-numpy
$ sudo apt-get install python3-numpy
python2.7-dev와 python3-dev 패키지는 파이썬 바인딩을 위해 필요하며 연산과 다양한 수식을 사용할 수 있게 해주는 numpy 모듈을 python 2.7 버전과 3 버전에 맞게 설치해줍니다.
위 설치과정이 모두 끝났다면 본격적으로 openCV를 다운받아 줍시다.
명령어 :
pi@raspberrypi:~ $ mkdir opencv
pi@raspberrypi:~ $ cd opencv
출력 결과 :
pi@raspberrypi:~/opencv $
openCV 소스파일을 설치할 임시폴더를 생성하여 줍니다.
mkdir 명령어는 해당 경로에 폴더를 생성하는 명령어입니다. 이를 이용하여 'opencv' 라는 폴더를 생성해줍니다.
cd 명령어는 뒷 경로에 적힌 주소로 위치를 옮기는 명령어입니다. 이를 이용하여 생성한 폴더에 들어갑니다.
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
$ unzip opencv.zip
openCV 소스파일을 다운받아줍니다.
다운받은 후 unzip 명령어를 이용하여 압축을 풀어줍니다.
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip
$ unzip opencv_contrib.zip
openCV_contrib라는 추가 모듈 소스 파일을 다운받아 줍니다.
이후 압축을 풀어줍니다.
명령어 :
pi@raspberrypi:~/opencv $ ls -d */
출력 결과 :
opencv-3.4.0 opencv_contrib-3.4.0
ls -d */ 명령어로 해당 경로에 있는 폴더를 확인하면 위와 같이 두 폴더가 생성된 것을 확인할 수 있습니다.
pi@raspberrypi:~/opencv $ cd opencv-3.4.0
pi@raspberrypi:~/opencv/opencv-3.4.0 $ mkdir build
pi@raspberrypi:~/opencv/opencv-3.4.0 $ cd build
pi@raspberrypi:~/opencv/opencv-3.4.0/build $
openCV 폴더 내부에 생성된 opencv-3.4.0 폴더로 이동하여 빌드를 진행할 build 폴더를 만들고 내부로 이동합니다.
명령어 :
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
출력 결과 :
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=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 WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.0/modules \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON2_PACKAGES_PATH=/usr/lib/python2.7/dist-packages \
-D PYTHON2_LIBRARY= /usr/lib/arm-linux-gnueabihf/libpython2.7.so \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3.5/dist-packages \
-D PYTHON3_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so \
../
cmake 명령어를 이용해서 컴파일 설정을 해줍니다.
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ make -j3
make 명령어를 통해 컴파일을 시작합니다. 뒤에 -j 명령어는 라즈베리파이의 CPU 코어를 얼마나 사용할지 지정하는 명령어입니다. 제가 사용하는 라즈베리파이는 3세대 모델이라 쿼드코어를 장착하고 있습니다. -j4로 코어를 4개 전부 사용하게 되면 오류가 날 가능성이 있어 -j3로 3개만 사용하도록 합니다. 만약 이 코드를 사용했는데 컴파일에 실패하면 make만 사용하여 빌드를 해줍니다.
저는 모두 다운받는데 약 3시간 반이 소요되었습니다. 이 과정에서 계속 실패하다가 8번 시도 끝에 성공했습니다. 아마 위 코드를 따라하시면 오류가 없을 것입니다.
출력 결과 :
pi@raspberrypi:~/opencv/opencv-3.4.0/build $
위와 같은 입력 명령이 뜨면 설치가 완료된 것입니다.
컴파일이 완료되었으니 컴파일 한 파일을 설치합시다.
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ sudo make install
이 설치 과정은 얼마 걸리지는 않습니다.
설치가 완료되었다면 cat /etc/ld.so.conf.d/* 명령어를 이용하여 /usr/local/lib라는 설정이 있는지 확인합니다.
명령어 :
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ cat /etc/ld.so.conf.d/*
출력 결과 :
/opt/vc/lib
# Multiarch support /lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/libfakeroot
# libc default configuration
/usr/local/lib
위와 같이 명령어를 쳤을 때 /usr/local/lib라는 설정이 포함되어 있으면 됩니다.
만약 위 설정이 출력되지 않는다면 아래 설정을 따라합니다.
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ sudo ldconfig
이상으로 모든 설정을 마쳤습니다.
python으로 제대로 설치되어 있는지 확인해 봅시다.
명령어 :
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ python
출력 결과 :
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.0'
>>>
명령어 :
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ python3
출력 결과 :
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.0'
>>>
python이라는 명령어를 입력하여 python 2.7 버전의 openCV를, python3라는 명령어를 입력하여 python3 버전의 openCV를 확인합니다.
위와 같이 '3.4.0' 이라는 버전이 출력되어야 합니다.
위와 같이 정상적으로 설치되었다면
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ cd
pi@raspberrypi:~ $ rm -rf opencv
cd 명령어로 폴더를 빠져나온 후 rm -rf 명령어로 openCV 소스코드를 삭제합니다.
이상으로 라즈베리파이에 openCV를 설치하여 보았습니다.
혹시 오류가 있거나 설치가 진행되지 않을 경우 댓글로 달아주시면 알려드리도록 하겠습니다. 감사합니다!