Programming/IoT_Embedded

라즈베리파이 OpenCV 설치(빌드 없이 설치파일로)

이세우 2017. 11. 17. 16:05

  • Update : 2018.02.02 , OpenCV 3.4.0
  • Update : 2020.01.07
라즈비안 버스터 버전에서 종속 라이브러리가 달라져서 설치가 되지 않는것으로 보입니다.

버스터 버전에서부터는 제가 제공하는 설치 파일 말고 piwheel.org에서 제공하는 버전을 사용하시는게 좀 더 편하실것 같습니다.

sudo pip3 install opencv-contrib-python 으로 설치하시고 아래 명령어로 종속 라이브러리를 추가 설치해 주시면 될겁니다.

sudo apt install  libqt4-test libhdf5-dev libatlas-base-dev libjasper-dev  libqtgui4



라즈베리파이에 OpenCV를 설치하는 방법을 알아 봅니다.
OpenCV는 인텔에서 시작해서 현재는 오픈소스로 운영되는 가장 유력한 컴퓨터 비전 라이브러입니다.
라즈파이 카메라나 USB 타입의 웹캠을 연결해서 OpenCV 프로그래밍을 하면 얼굴 인식해서 문을 열어 주거나, 자동차 번호판을 인식해서 주차장 문을 열어 주는 등의 메이커 활동에 활용할 수 있습니다.

OpenCV는 원래 C++ 언어로 만들어졌지만, 공식적으로 python, Java, Android, iOS로 바인딩되어 있어서다양한 언어로 사용할 수 있습니다.

OpenCV를 라즈베리파이에 설치하려면 apt를 이용해서 opencv-python 패키지를 설치하면 되는데, 이것은 python 2.7만 지원하고 OpenCV 버전도 2.4 입니다.
그래서 python3도 사용할 수 있고 최신 버전인 OpenCV 3을 사용하려면 소스코드를 받아서 직접 빌드해야 합니다.
그런데, 빌드 과정이 복잡하고 시간도 2시간 정도 소요됩니다. 운이 좋을때 2시간이라는 것이지 빌드 도중에 멈추거나 문제가 발생하면 한 나절은 그냥 날리게 됩니다.
그래서 제가 미리 빌드해서 데비안 패키지 파일(*.deb) 형태로 만들어 놓았고 이것으로 설치하면 금방 설치가 가능합니다.

자 그럼 opencv-python 패키지를 설치하는 방법과 제가 빌드해서 제공하는 데비안 패키지 파일로 설치하는 방법을 하나씩 소개할께요.

python은 추가 패키지 설치를 위해서 pip라는 패키지 관리자를 제공하는 데요, 당연히 라즈베리파이에서도 사용할 수 있습니다.
인텔 칩을 사용하는 일반 노트북이나 데스크탑 윈도우즈나 맥에서는 pip를 이용해서 opencv-python 패키지를 설치하면 되는데, 라즈베리파이가 사용하는 ARM 아키텍쳐는 pip 저장소에 빌드된게 없어서 설치가 되지 않습니다.
다행히도 apt 저장소에 python 2.7을 지원하는 패키지가 있으니 가장 손쉽게 사용할 수 있는 방법은 이것을 이용하는 것입니다.

sudo apt update
sudo apt install python-opencv
python
>>> import cv2
>>> cv2.__version__
‘2.4.9.1'

문제는 python3에서는 안돌아가고, opencv 버전이 2.4로 낮다는 겁니다.

이제 python 3도 지원하는 opencv 3.3 버전을 깔아 볼까요?
제가 미리 빌드해놓은 데비안 패키지 파일은 아래의 Github 사이트에서 받을 수 있습니다.


빌드 환경은 아래와 같습니다.
  • OpenCV 3.4.0 +  Contrib 
  • Raspberry-Pi 3 Model B+
  • Rasbian Stetch(Debian 9)

우선 OpenCV 버전은 3.3.0입니다. 2.4 버전도 시간이 될때 올려 놓을 생각입니다.
OpenCV3 부터는 정식 릴리즈와 extra module이 분리되었는데요, 미 성숙한 라이브러리나 특허 등으로 정식 릴리즈에 포함할 수 없는 라이브러리는 OpenCV Contrib 라는 repository로 아예 분리 시켰습니다.
SIFT, SURF 같은 API를 사용하려면 contrib 패키지를 꼭 함께 설치해야 합니다. 여기서 설치할 패키지는 모두를 포함하고 있습니다.

빌드한 환경은 Raspberry-Pi 3 Model B+ 하드웨어이고 운영체제는 Rasiban Stretch 입니다. 2017년 8월 이전에는 Rasbian jessie 가 사용되었지만, 8월 부터 데비안 버전이 올라가면서 Stretch로 바뀌었습니다. 이 번 빌드에 사용한 라즈비안도 Stretch 입니다. 시간이 되는대로 Jessie 용 파일도 올려 놓을 계획입니다.

설치에 앞서 종속 패키지를 설치합니다.

sudo apt install -y libxine2  libqtgui4 libjasper1 libqt4-test libqt4-opengl


이제 설치를 위해서 다운로드 받겠습니다.



다운로드 받은 디렉토리 경로로 이동합니다.

cd opencv-for-rpi
cd stetch
cd 3.3.0


5개의 *.deb 파일이 존재하는 것을 볼 수 있습니다.

설치를 시작합니다.

sudo dpkg -i OpenCV*.deb  #2018.02.02 아래의 명령어로 설치하면 필요한 종속 라이브러리를 설치 중에 함께 설합니다.
sudo apt install -y ./OpenCV*.deb

설치가 잘 되었는지 확인합니다.

pkg-config —modversion opencv


pic.jpg 라는 그림 파일이 있다는 전제하에 아래와 같은 코드를 작성해서 정상적으로 동작한다면 설치는 잘 된 겁니다.

먼저 파이썬 파일입니다. test.py로 저장해보세요.
import numpy as np
import cv2

img_file = “./pic.jpg"
img = cv2.imread(img_file)

cv2.imshow(‘IMG', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


다음은 C++ 파일 입니다. 
#include <opencv2/opencv.hpp>

using namespace cv;

int main( int argc, char** argv ){
  Mat image;
  String file_name = “./pic1.jpg";
  image = imread( file_name, CV_WINDOW_AUTOSIZE );

  namedWindow( "IMG", WINDOW_AUTOSIZE );
  imshow( "IMG", image );
  waitKey(0);
  return 0;
}

위의 파일을 test.cpp로 저장했다면 아래와 같은 명령으로 컴파일 할 수 있습니다.

g++ -o test test.cpp $(pkg-config --libs --cflags opencv)


각각 python , python3, 그리고 ./test 로 실행해 보시면 그림 파일이 뜰겁니다.
python test.py
python3 test.py
./test

만약 ssh로 연결하셨다면 결과 화면이 안 뜰텐데, 아래 X-window 띄우기 포스트를 참고하세요.

끝.