[OpenCV] virtualenv 이용 설치

OpenCV 설치

OpenCV 를 파이썬 기본 패키지 관리자 pip 와 venv 가상환경을 이용해서 윈도우즈, 맥 및 리눅스에서 OpenCV 를 설치하는 과정을 살펴보겠다.

    1. 윈도우즈에서
    1. macOS에서
    1. Linux에서

1) 윈도우즈 pip 기반 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 pip 기반으로 설치를 해보자.

whl 파일로 설치

윈도우에서 opencv를 빌드된 버전을 설치하기 위해서 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 에 있는 .whl 파일을 다운로드 받느다.

1
> pip install c:\downloads\opencv_python‑3.3.1‑cp36‑cp36m‑win_amd64.whl

pip

OpenCV의 main module만 사용한다면 아래처럼 설치하면 됩니다.

1
> pip install opencv-python

만약 main module과 extra module을 같이 사용하고 싶다면 아래처럼 설치합니다.

1
> pip install opencv-contrib-python

2) virtualenv 가상환경에서 openCV 설치

Python 가상환경과 Opencv

파이썬 개발시 virtualenv 를 사용한다면 OpenCV 라이브러리를 연결해 줄 필요가 있다. virtualenv 가상환경 생성시 파이썬 라이브러리는 복사가 안된다 그래서 가상환경 생성후에 cv2.so 라이브러리를 링크해줄 필요가 있다.

가상환경에 cv2.so 연결하기

python2 가상환경 cv3python2 가 있고, 여기에 OpenCV 를 사용하려면 다음 같이 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python2/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so

역시 python3 가상환경 cv3python3 가 있다면 python3 라이브러리에 있는 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python3/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/dist-packages/cv2.cpython-34m.so cv2.so

또한 cv2.so를 사용하기 위해서 각 가상환경에 numpy를 설치해 준다. Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

1
2
3
4
5
$ workon cv3python2
(cv3python2) :~/ $ pip install numpy

$ workon cv3python3
(cv3python3) :~/ $ pip install numpy

마직막으로 파이썬을 실행하고 cv2를 테스트한다.

1
2
3
4
5
6
7
8
(cv3python3) ~/$ python
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
>>> cv2.__version__
'3.1.0'
>>>

OpenCV 테스트

https://cinema4dr12.tistory.com/1283

파이썬을 실행해 cv2 라이브러리를 사용해 보자.

1
2
3
4
5
6
7
8
$ python
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
>>> cv2.__version__
'3.1.0'
>>>

시스템에서 파이썬이 두 개 이상 설치되어 있으면 일반적을 Python2.7 버전이 기본 파아썬 이다.

1
2
3
4
5
6
7
8
$ 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
>>> cv2.__version__
'3.1.0-dev'
>>>

참조

[OpenCV] anaconda 이용 설치

OpenCV 설치

OpenCV 를 설치하기 위해서 소스 빌드, 패키지 설치 방법이 있다. 여기서 pip 기반 가상환경 그리고 Anaconda 를 사용한다는 가정에서 윈도우즈, 맥에서 OpenCV 를 설치하는 과정을 살펴보겠다.

    1. 윈도우즈에서
    1. macOS에서
    1. Linux에서

1) 윈도우즈에서 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 Anaconda 배포본을 사용하는 것이 가장 쉽다.

whl 파일로 설치

윈도우에서 opencv를 빌드된 버전을 설치하기 위해서 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 에 있는 .whl 파일을 다운로드 받느다.

1
> pip install c:\downloads\opencv_python‑3.3.1‑cp36‑cp36m‑win_amd64.whl

pip

OpenCV의 main module만 사용한다면 아래처럼 설치하면 됩니다.

1
> pip install opencv-python

만약 main module과 extra module을 같이 사용하고 싶다면 아래처럼 설치합니다.

1
> pip install opencv-contrib-python

conda 명령으로 설치하기

Anaconda 3가 설치되어 있다면 명령어 한 줄 입력만으로도 거의 최신 버전(글 작성시 버전 3.6.0)의 Python-OpenCV 라이브러리를 설치할 수 있다:

1
> conda install -c conda-forge opencv

conda-forge에 등록되어 있는 OpenCV 라이브러리에 대한 상세한 설명은 링크를 통해 확인할 수 있습니다. 필요한 경우, python virtualenv를 생성하여 개발환경 패키지를 관리할 수 있다.

OpenCV 3.3의 가장 큰 변화는 Deep Learning in OpenCV 라고 할 수 있겠습니다. 해당 링크에서 Deep Learning 관련 추가된 사항을 확인할 수 있습니다. 이외에 자세한 변경 로그는 OpenCV Change Logs Version:3.3을 참고하시면 되겠습니다.

여담으로 최신 버전 OpenCV 3.3.1 버전 이후에는 JavaScript Interface가 추가되어 인터랙티브 웹-기반 OpenCV 어플리케이션 구현이 공식적으로 가능해졌다고 한다.


OpenCV 테스트

https://cinema4dr12.tistory.com/1283

파이썬을 실행해 cv2 라이브러리를 사용해 보자.

1
2
3
4
5
6
7
8
$ python
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
>>> cv2.__version__
'3.1.0'
>>>

시스템에서 파이썬이 두 개 이상 설치되어 있으면 일반적을 Python2.7 버전이 기본 파아썬 이다.

1
2
3
4
5
6
7
8
$ 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
>>> cv2.__version__
'3.1.0-dev'
>>>

Python 가상환경과 Opencv

파이썬 개발시 virtualenv 를 사용한다면 OpenCV 라이브러리를 연결해 줄 필요가 있다. virtualenv 가상환경 생성시 파이썬 라이브러리는 복사가 안된다 그래서 가상환경 생성후에 cv2.so 라이브러리를 링크해줄 필요가 있다.

가상환경에 cv2.so 연결하기

python2 가상환경 cv3python2 가 있고, 여기에 OpenCV 를 사용하려면 다음 같이 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python2/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so

역시 python3 가상환경 cv3python3 가 있다면 python3 라이브러리에 있는 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python3/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/dist-packages/cv2.cpython-34m.so cv2.so

또한 cv2.so를 사용하기 위해서 각 가상환경에 numpy를 설치해 준다. Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

1
2
3
4
5
$ workon cv3python2
(cv3python2) :~/ $ pip install numpy

$ workon cv3python3
(cv3python3) :~/ $ pip install numpy

마직막으로 파이썬을 실행하고 cv2를 테스트한다.

1
2
3
4
5
6
7
8
(cv3python3) ~/$ python
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
>>> cv2.__version__
'3.1.0'
>>>

Gstreamer

1
$ sudo apt install python3-gst-1.0

참조

[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
2
$ sudo apt remove libopencv
$ sudo apt remove opencv

최신 소프트웨어 상태로 업데이트 합니다.

1
2
$ sudo apt update
$ sudo apt upgrade

먼저 컴파일러와 빌드 관련 패키지를 설치합니다.

1
2
$ sudo apt install build-essential
$ sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

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
2
~$ sudo pip2 install numpy
~$ sudo pip3 install numpy
  • Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

혹은 업그레이드 해준다.

1
2
$ sudo pip2 install --upgrade numpy
$ sudo pip3 install --upgrade numpy

numpy 설치후 다음 같이 제대로 동작하는지 확인해 보자

1
2
3
4
5
6
7
8
9
10
11
$:~ $ python2
...

$:~ $ 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 numpy as np
>>> np.__version__
'1.10.4'
>>>

파이썬에서 사용하려면 다음 같이 파이썬 관련 라이브러리가 필요

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
2
3
4
$ cd ~
$ git clone https://github.com/Itseez/opencv.git
$ cd opencv
$ git checkout 3.1.0

빌드를 설정하기 위해서 build폴더를 만든다.

파이썬 환경이 있는 cv 가상환경

build 를 준비

1
2
3
~$ cd opencv
~$ mkdir build
~$ cd build

빌드를 수행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
~$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..

...
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.9)
--
-- Python 3:
-- Interpreter: /usr/bin/python3.4 (ver 3.4.2)
--
-- Python (for build): /usr/bin/python2.7


위 스크립은 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
2
3
4
5
6
7
8
~(cv)$ make -j4       # RPi2

...
[100%] Built target example_ocl_tvl1_optical_flow

real 173m22.432s
user 165m58.970s
sys 5m7.060s

싱글로 make시 Raspberry Pi 2 에서 빌드시 약 3시간 소요.
-j 옵션을 이용시 45분 이상 절약.

빌드된 결과중에 python2, python3 관련해서 라이브러리가 제대로 빌드되었는지 라이브러리 폴더를 확인한다.

1
2
$ ls lib/cv2.so
$ ls lib/python3/cv2.cpython-34m.so

이 두 라이브러리가 생성되 있으면 빌드가 제대로 된 것이다.

이제 로컬 시스템에 설치를 한다. 보통 Python2.7과 Python3.4가 함께 설치되 상태일 수 있는데 이 경우 시스템에 기본 Python2.7 환경을 기반으로 설치가 된다.

1
2
3
4
5
6
7
8
9
10
(cv)$ sudo make install
...
-- Installing: /usr/local/include/opencv2/contrib/detection_based_tracker.hpp
-- Installing: /usr/local/lib/python2.7/dist-packages/cv2.so
-- Set runtime path of "/usr/local/lib/python2.7/dist-packages/cv2.so" to "/usr/local/lib"
-- Installing: /usr/local/lib/python2.7/dist-packages/cv.py
-- Installing: /usr/local/lib/libopencv_stitching.so.2.4.11
...

(cv)$ sudo ldconfig

설치된 opencv 패키지 버전을 확인한다.

1
2
$ pkg-config --modversion opencv
3.1.0

cv2.so

Python2.7이 함께 설치되어 있는 경우 빌드시 Python3.x의 site-packages에 파일 cv2.cpython-34mu.so 로 설치되어 있다. 이 파일은 실제 파이썬 바인딩으로 실제 파이썬 환경에서 이 라이브러리가 필요하기 하다. Python3 가상환경에서 이 파일 심볼릭 링크를 cv 환경에 cv2.so라는 이름으로 연결해 준다.

파이썬은 관행적으로 opencv 라이브러리를 cv2.so 파일로 표현하고 있다. python3의 경우 라이브러리 이름을 cv2로 링크해 준다.

1
2
3
4
$ cd /usr/local/lib/python3.4/dist-packages
$ ls
cv2.cpython-34m.so numpy numpy-1.11.2.egg-info
$ sudo ln -s cv2.cpython-34m.so cv2.so

Ubuntu/Debian ARM Cross compile 환경

이 글은 우분투, 리눅스 박스에서 GNU ARM Cross compiler 를 설치하고 관리하는 방법을 다루고 있다.

2018-05-17: sidebar.nav/linux 사용
{: .right-history}

ARM Cross compiler 설치

우분투/데비안 리눅스에서 제공하는 ARM Toolchain 환경은 Linaro 툴체인을 바탕으로 만들어져 있어서 두가지 버전으로 제공된다. Hard Float을 지원하는 버전과 그렇지 않은 버전이다.[^1]

자세히 보기

update-alternatives 명령 사용

이 글은 우분투, 리눅스 박스에서 여러버전의 도구를 관리할 수 있는 update-alternatives 를 다루고 있다.

update-alternative

update-alternative 유틸리티로 리눅스 기본 제공 개발 환경의 gcc, cross compiler용 gcc 등 여러 버전의 gcc를 사용할 수 있게 구성할 수 있다.
이들 버전의 환경을 교체해서 사용하기를 원한다. update-alternative 도구를 사용할 수 있다.

update-alternative 사용

여러 버전의 gcc를 update-alternative를 사용해서 선택적으로 사용할 수 있다. gcc 로 등록된 현재 버전 목록을 질의 한다.

1
$ update-alternatives --query gcc

등록

여기서 사용하는 여러 gcc 버전들을 설치한 후에 다음과 같은 명령어로 등록을 할 수 있다.

1
update-alternatives --install <link> <name> <path> <priority>
  • 실행파일 이름으로 /etc/alternatives/ 을 가리킨다. (예: /usr/bin/pager)
  • 해당 링크 그룹의 대표 이름으로, 여러 가지 버전의 패키지들을 대표하는 이름으로 보면 될 것 같다.(예: pager)
  • alternatives 로 실제 연결할 실행파일 이름으로, 시스템에 설치한 패키지의 실행파일 이름이다.(예: /usr/bin/less)
  • automatic 모드에서 어떤 것을 자동으로 선택해서 사용할지 결정할 때 사용되는 우선순위로, 높은 수가 더 높은 우선순위이다.

gcc 등록

Ubuntu 14.04 최신 버전에 gcc4.7, 4.8 를 사용하려고 설치했다고 가정한다.

1
2
3
sudo apt-get update
sudo apt-get install gcc-4.7 g++-4.7
sudo apt-get install gcc-4.8 g++-4.8

그리고 gcc 그룹에 4.8를 우선도가 높게 50으로 준다.

1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

여기서 gcc를 master로 g++을 slave로 준비했다. --slave 옵션은 --install 로 지정한 master에 종속해서 여러개의 슬레이브를 마스터에 추가할 수 있고, 마스터의 링크가 바뀌면 슬레이브도 함께 바뀐다.

두번째 버전은 gcc-4.7 버전을 우선도가 40 정도로 하자.

1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 50 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7