라즈베리파이에서 OpenCV 3.2를 설치하는 방법을 정리해보겠습니다. 라즈베리파이에 OpenCV를 설치한다는 것은 OpenCV 소스 코드를 직접 빌드하여 헤더 파일을 복사하고 OpenCV 라이브러리를 생성하는 작업을 의미합니다. 과정이 좀 길지만 차근차근 알아보겠습니다.


OpenCV 소스 코드를 빌드하려면 빌드 관련 도구나 필요한 라이브러리 패키지를 라즈베리파이에 미리 설치해두어야 합니다. 예를 들어, 정지 영상 포맷과 관련된 jpeg 라이브러리나 png 라이브러리, 비디오 파일 포맷 또는 스트리밍 관련 라이브러리 같은 것들을 미리 설치해야 정상적으로 빌드됩니다.


[빌드 관련 도구 설치] 실제 빌드 작업에 앞서 OpenCV 빌드에 필요한 패키지를 설치합니다.

pi@RaspberryPi3:~ $ sudo apt-get install build-essential cmake pkg-config


[정지 영상 파일 입출력]

pi@RaspberryPi3:~ $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev


[비디오 파일 입출력/스트리밍]

pi@RaspberryPi3:~ $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
pi@RaspberryPi3:~ $ sudo apt-get install libxvidcore-dev libx264-dev libxine2-dev
pi@RaspberryPi3:~ $ sudo apt-get install libv4l-dev v4l-utils
pi@RaspberryPi3:~ $ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev


[GUI] OpenCV의 highgui 모듈에서 GTK를 사용하도록 합니다.

pi@RaspberryPi3:~ $ sudo apt-get install libgtk2.0-dev


[기타/최적화]

pi@RaspberryPi3:~ $ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev


[파이썬] OpenCV를 빌드한 후 C/C++ 뿐만 아니라 Python으로도 프로그래밍을 테스트하려고 합니다. 개인적으로는 Python 2.x 버전을 사용하지 않고 Python 3.x 버전만 사용할 것이구요.. 이를 위해서 python3-dev 또는 python3-numpy 패키지가 필요한데, 얘네 둘은 이미 설치가 되어 있을 겁니다. (없으면 설치해야죠.)

pi@RaspberryPi3:~ $ sudo apt-get install python3-dev python3-numpy


[OpenCV 소스 코드 다운로드할 디렉토리 생성과 이동]

pi@RaspberryPi3:~ $ mkdir opencv && cd opencv


[OpenCV 3.2 소스 코드 다운로드 및 압축 해제]

pi@RaspberryPi3:~/opencv $ wget -O opencv-3.2.0.zip https://github.com/opencv/opencv/archive/3.2.0.zip
pi@RaspberryPi3:~/opencv $ unzip opencv-3.2.0.zip


[OpenCV 3.2 Extra 모듈 소스 코드 다운로드 및 압축 해제]

pi@RaspberryPi3:~/opencv $ wget -O opencv_contrib-3.2.0.zip https://github.com/opencv/opencv_contrib/archive/3.2.0.zip
pi@RaspberryPi3:~/opencv $ unzip opencv_contrib-3.2.0.zip


[빌드 작업을 위한 디렉토리 생성과 이동]

pi@RaspberryPi3:~/opencv $ mkdir build && cd build


[cmake 구성] 아래 명령어가 좀 긴데요, 대충 보면 예제 파일들을 생성하고, Python 2.x 말고 Python 3.x를 지원하도록 하는 등의 옵션을 지정합니다. Extra 모듈 소스 코드 위치를 지정하고, OpenCV 소스 코드 위치가 ../opencv-3.2.0/ 임을 명시합니다. 그리고 cmake가 동작하면서 나타나는 출력 메시지를 모두 cmake_messages.txt 파일에 기록합니다.

pi@RaspberryPi3:~/opencv/build/ $ cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_WITH_DEBUG_INFO=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.2.0/modules \
-DENABLE_NEON=ON \
-DWITH_LIBV4L=ON \
../opencv-3.2.0/ 2>&1 | tee cmake_messages.txt

참고로 cmake_message.txt 파일에 기록된 내용을 아래 [더보기]에 정리해두었습니다.


[빌드!!!] 이제 실제 빌드 작업을 진행합니다. 라즈베리파이3은 4개의 코어가 있지만, -j4 옵션을 주면 발열때문에 문제가 생길까봐 -j2 옵션으로 빌드를 진행합니다. 혹시라도 에러가 발생할까봐 컴파일 메시지는 build_messages.txt 파일에도 저장해둡니다. 빌드 작업은 2시간 넘게 걸렸던 것같고, 간간히 선풍기로 라즈베리파이 보드를 식히면서 진행했습니다.

pi@RaspberryPi3:~/opencv/build/ $ make -j2 2>&1 | tee build_messages.txt


[설치 및 설치 확인] 아래 명령어를 입력한 후 3.2.0 이 출력되면 정상적으로 설치가 된겁니다.

pi@RaspberryPi3:~/opencv/build/ $ sudo make install
pi@RaspberryPi3:~/opencv/build/ $ sudo ldconfig
pi@RaspberryPi3:~/opencv/build/ $ pkg-config --modversion opencv
3.2.0
pi@RaspberryPi3:~/opencv/build/ $ 


[Python 테스트] python3을 실행하여 OpenCV를 잘 불러오는지 확인해봅니다.

pi@RaspberryPi3:~/opencv/build/ $ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
3.2.0
>>> exit()
pi@RaspberryPi3:~/opencv/build/ $


잘 되네요~ :-)




Posted by kkokkal
: