안녕하세요 키노코더입니다.


라즈베리파이(Raspberry PI)를 이용하여 간단한 프로젝트를 구성하는 분들이 많을 텐데요.

라즈베리파이의 성능이 올라감에 따라 영상처리에 대한 수요도 늘어나는 것 같습니다.

이미 해외의 라즈베리파이 애용자들은 Pi Camera나 Web Camera를 이용하여 여러 어플리케이션들을 만들고 있습니다.


오늘은 대표적인 영상처리 Open Source인 OpenCV를 라즈베리파이 3에 설치하여 Python에서 사용하는 방법을 알아보겠습니다.


과정 요약

  • 라즈베리파이의 Swap 영역 확장하기
  • 필요 패키지 설치하기 (python 포함)
  • OpenCV 빌드 및 설치하기
  • Python에서 OpenCV 확인하기

라즈베리파이(Raspberry PI)의 Swap 영역 확장하기

라즈베리파이 설치 시 기본으로 설치를 하셨다면 Swap 영역은 100MB로 할당되어 있습니다. swap 영역은 가상메모리 역할을 해주기 때문에 라즈베리파이에서 메모리를 많이 필요로하는 작업을 한다면 충분히 확보되어야만 메모리 부족으로 인한 에러를 피할 수 있습니다.
top

Swap 영역을 확장하기 이전에 top 명령을 통해 swap 영역의 크기를 확인합니다.



저는 미리 1GB로 늘렸기 때문에 1,048,572 KB로 표기되었습니다. OpenCV를 빌드할 때 1GB 이상의 메모리가 필요하므로 라즈베리파이의 RAM 1GB만으로는 부족하기에 Swap으로 1GB를 할당하였습니다.

sudo nano /etc/dphys-swapfile

편집화면에서 CONF_SWAPSIZE를 늘려줍니다 (CONF_SWAPSIZE=100 => CONF_SWAPSIZE=1024)

저장 후 swapfile을 정지 후 재시작합니다.

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

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

위와 같이 수행 후 top 명령을 통해 swap을 확인하면 다시 늘어난 것을 확인할 수 있습니다.

필요 패키지 설치하기

라즈베리파이에서 OpenCV를 사용하기 위해서는 직접 Source Code를 빌드하여야 합니다. Windows 버전은 installer를 제공하지만 리눅스와 Mac용으로는 직접 빌드할 수 있도록 cmake를 지원합니다. 라즈베리파이를 설치 시 기본적인 빌드환경은 세팅되어 있지만, OpenCV를 이용하기 위한 패키지들은 설치되지 않는 것들도 많기 때문에 OpenCV 설치 전에 필요한 패키지들을 설치해 주어야 합니다.

설치 전 ''sudo apt-get update' 'sudo apt-get upgrade' 명령으로 라즈베리파이에 설치된 기본 패키지들도 업데이트 합니다.

아래는 opencv를 빌드하고, 사용할 때 필요한 패키지 목록입니다.
build-essential
cmake
pkg-config
libjpeg-dev
libtiff5-dev
libjasper-dev
libpng12-dev
libavcodec-dev
libavformat-dev
libswscale-dev
libv4l-dev
libxvidcore-dev
libx264-dev
libgtk2.0-dev
libatlas-base-dev
gfortran
python2.7-dev
python3-dev
설치는 'sudo apt-get install {패키지명}'명령으로 설치합니다.

OpenCV 빌드 및 설치하기

OpenCV Download
위의 링크에서 OpenCV를 다운로드 받아 home directory 어딘가에 압축을 해제합니다. 터미널 상에서 압축을 해제하기 위해서는 unzip 패키지를 설치하여 압축을 해제하면 됩니다.
sudo apt-get install unzip
unzip opencv-2.4.13zip -d opencv
unzip의 '-d' 옵션은 압축을 해제할 디렉토리입니다. 본 포스팅에서는 OpenCV 2.4.13을 다운로드 받아 압축을 해제하였습니다.
다음은 Makefile 생성을 위해 cmake를 실행하는 것입니다. opencv를 압축해제한 폴더로 이동 후 다음과 같이 명령을 실행합니다.
cmake .
그렇다면 cmake가 시스템에 설치된 패키지들을 확인하여 빌드를 위한 Makefile을 자동으로 생성합니다. 작업이 끝나면 마지막으로 make 명령을 통해 빌드를 수행합니다.
make -j4

위의 명령 '-j' 옵션은 사용할 빌드 시 동시에 처리할 job의 갯수를 말합니다. 의존성이 없는 빌드들을 동시에 수행함으로써 빌드 시간을 단축할 수 있습니다. 이상적으로는 CPU의 코어 갯수 또는 코어 갯수 + 1이 동시에 처리할 수 있는 job의 갯수라고 합니다. 하지만, 일반적으로 j1과 j2 사이에는 비약적인 성능 향상이 있는 반면, 그 이상에서는 차이가 크지 않습니다. 그럼에도 OpenCV와 같이 빌드시간이 긴 소스일 수록 전체적인 빌드시간 단축에는 용이한 것 같습니다.


빌드 중인 OpenCV



OpenCV의 빌드는 제 MacBook Pro에서도 10분 이상 걸렸던 것 같네요. 하물며 라즈베리파이에서는 더 오래걸리겠죠? 대략 1시간 이상 걸리는 작업이기 때문에 다른 작업을 하시면서 기다리는 것이 좋습니다.


빌드가 완료되면 이제 설치만 남았습니다.

sudo make install

make 명령을 통해 install을 수행합니다. 설치는 빌드만큼 오래걸리지 않습니다. 

Python에서 OpenCV 확인하기

설치가 완료되었으니, python에서 확인해봅시다. 저는 python2.7을 실행시켜서 opencv가 제대로 import되는지 확인했습니다.



opencv는 cv2 패키지로 설치되며, __version__을 통해 버전을 확인할 수 있습니다. 제가 설치한 2.4.13 버전이 정상적으로 설치 되었군요.

마치며

라즈베리파이에 OpenCV를 설치하고 Python에서 이를 확인하였습니다. 사실 이러한 일련의 과정은 라즈베리파이라고해서 특별할 것은 없습니다. 라즈베리파이 역시 리눅스를 기반으로 하고 있기때문에, 리눅스에서 설치하는 과정과 상당부분 일치합니다. (초반의 swap 사이즈 조절을 제외하고..)
그렇기 때문에 혹시나 설치에 어려움을 겪는 분들은 라즈베리파이 키워드에 집중하기 보다는 리눅스에서 어떻게 OpenCV를 사용하는지 찾아보시는 것이 문제 해결에 더 도움이 될 수 있습니다.

참고 자료

상당 부분의 내용을 위의 해외 작성글에서 참고하였습니다. 설치 과정 중 Trouble shooting에 관하여 다루고 있으니 설치가 잘 되지 않는 분들은 한번 참고하면 좋을 것 같습니다.

블로그 이미지

키노코더

각종 이야기를 다루는 키노코더의 블로그입니다

,