[OpenCV] Source build
OpenCV를 사용하는데 여러 방법이 있겠지만 SBC 컴퓨터들에서 소스로 빌드해서 사용해야할 경우가 있다.
OpenCV 소스 빌드
여기서 OpenCV를 개발 도구와 라이브러리들과 함게 소스를 빌드해서 사용하는 방법을 살펴보겠습니다.
- Raspberry Pi 3: Raspbian Jessie
- Odroid C2: Armbian
- ROCK64: Armbian
빌드는 OpenCV 3.1.1 버전을 대상으로 수행했다.
OpenCV3.1 빌드로 설치
http://docs.opencv.org/3.1.0/df/d65/tutorial_table_of_content_introduction.html
OpenCV 3.1를 빌드하는데 필요한 패키지
- GCC 4.4.x or later
- CMake 2.8.7 or higher
- Git
- GTK+2.x or higher, including headers (libgtk2.0-dev)
- pkg-config
- Python 2.6 or later and Numpy 1.5 or later with developer packages ( python-dev, python-numpy)
- ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
- [optional] libtbb2 libtbb-dev
- [optional] libdc1394 2.x
- [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
그리고 VideoStreaming이 필요하면 gstramer 필요.
패키지 설치
기존 패키지로 설치되 opencv가 있으면 제거한다.
1 | $ sudo apt remove libopencv |
최신 소프트웨어 상태로 업데이트 합니다.
1 | $ sudo apt update |
먼저 컴파일러와 빌드 관련 패키지를 설치합니다.
1 | $ sudo apt install build-essential |
GTK 개발용 라이브러리는 GUI를 구성할 때 필요하다.
1 | $ sudo apt install libgtk-3-dev |
이미지 처리에 필요한 패키지를 설치한다.
1 | $ sudo apt install libgphoto2-dev libjpeg-dev libtiff-dev libtiff5-dev libjasper-dev libpng12-dev libpng-dev |
- libtbb2 libtbb-dev
필요하다면 비디오 입출력 관련한 패키지를 설치해야 한다. OpenCV에서 비디오 파일을 읽는데 필요하다.
1 | $ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev |
libdc1394-22-dev
필요하면 스트리밍 처리에 필요한 gstreamer를 설치한다.
1 | $ sudo apt install gstreamer-1.0 |
OpenCV 안에서 다양한 최적화 작업에 필요한 다음 패키지를 설치한다.
1 | $ sudo apt install libatlas-base-dev gfortran |
마지막으로 파이썬에서 사용한다면 꼭 numpy
를 설치해야 한다. numpy 는 pip로 설치해야 한다.
- OpenCV Python에서 이미지를 NumPy의 다차원배열로 표현해 사용하고 있다:
시스템에 Python2.7과 python3.4가 설치되어 있다면, 각 pip버전을 명시해서 각각 설치해야 하는 듯 하다. numpy가 제대로 인식이 안되면 Opencv용 python 모듈이 빌드가 안된다.
Raspbian jessie 2016-09-23 버전 이후에는 numpy가 기본으로 설치되어 있다.
1 | ~$ sudo pip2 install numpy |
- Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.
혹은 업그레이드 해준다.
1 | $ sudo pip2 install --upgrade numpy |
numpy 설치후 다음 같이 제대로 동작하는지 확인해 보자
1 | $:~ $ python2 |
파이썬에서 사용하려면 다음 같이 파이썬 관련 라이브러리가 필요
1 | $ sudo apt install python-dev python3-dev python-numpy python3-numpy |
개발환경을 apt 방식으로 구성했다면, numpy도 apt로 설치 할 수 있다 – 왠지 잘 안됐다.
$ sudo apt install python-numpy
마지막으로 파이썬에서
matplotlib
를 이용한다면 python3-gtk 패키지를 설치해 준다.
1 $sudo apt install python3-gtk
Opencv 다운로드 및 빌드 확경 구성
1 | $ cd ~ |
빌드를 설정하기 위해서 build폴더를 만든다.
파이썬 환경이 있는 cv 가상환경
build 를 준비
1 | ~$ cd opencv |
빌드를 수행
1 | ~$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
위 스크립은 OpenCV 3.1.0의 CMake 빌드 버그로, OpenCV 3.0.0 까지 -D INSTALL_C_EXAMPLES=ON으로 빌드했지만 3.1.0에서는 -D INSTALL_C_EXAMPLES=OFF로 해야한다.
또한 opencv_contrib 모듈을 함께 빌드한다면 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules를 함께 사용한다.
컴파일과 설치
그리고 컴파일 한다.
1 | ~(cv)$ make -j4 # RPi2 |
싱글로 make시 Raspberry Pi 2 에서 빌드시 약 3시간 소요.
-j 옵션을 이용시 45분 이상 절약.
빌드된 결과중에 python2, python3 관련해서 라이브러리가 제대로 빌드되었는지 라이브러리 폴더를 확인한다.
1 | $ ls lib/cv2.so |
이 두 라이브러리가 생성되 있으면 빌드가 제대로 된 것이다.
이제 로컬 시스템에 설치를 한다. 보통 Python2.7과 Python3.4가 함께 설치되 상태일 수 있는데 이 경우 시스템에 기본 Python2.7 환경을 기반으로 설치가 된다.
1 | (cv)$ sudo make install |
설치된 opencv 패키지 버전을 확인한다.
1 | $ pkg-config --modversion opencv |
cv2.so
Python2.7이 함께 설치되어 있는 경우 빌드시 Python3.x의 site-packages에 파일 cv2.cpython-34mu.so 로 설치되어 있다. 이 파일은 실제 파이썬 바인딩으로 실제 파이썬 환경에서 이 라이브러리가 필요하기 하다. Python3 가상환경에서 이 파일 심볼릭 링크를 cv 환경에 cv2.so라는 이름으로 연결해 준다.
파이썬은 관행적으로 opencv 라이브러리를 cv2.so 파일로 표현하고 있다. python3의 경우 라이브러리 이름을 cv2로 링크해 준다.
1 | $ cd /usr/local/lib/python3.4/dist-packages |
[OpenCV] Source build