카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/24

우분투 18.04 OpenCV 4.0 가상 개발 환경 구성.

0. 기존 버전 제거.
pkg-config --modversion opencv
설치 버전 정보 출력

기존 패키지 삭제.
sudo apt-get remove --purge  libopencv* python-opencv
sudo apt-get autoremove

삭제 확인
pkg-config --modversion opencv

동적 라이브러리 삭제(--purge) 옵션만 사용할 경우
sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \;

sudo apt-get update
sudo apt-get upgrade

0. 저장소 지원하는 패키지 설치 할 경우.
OpenCV 설치
sudo apt update
sudo apt install python3-opencv

설치 확인.
python3 -c "\
import cv2
print(cv2.__version__)"
이 방법은 자동 설치는 쉬우나 개발에 유연성이 없으므로 소소코드 버전으로 설치한다.

기존 패키지 삭제.
sudo apt-get purge  libopencv* python-opencv
sudo apt-get autoremove

파일썬 버전 확인
python3 --version
Python 3.6.5

파일썬 간단하게 테스트
python3
>> print("OpenCV!")
OpenCV!
>> quit()

1. 개발 도구 설치
sudo apt install build-essential cmake git pkg-config libgtk-3-dev

OpenCV 비디오 스트림 처리, 개별 프레임 접근 하기 위해 다음 라이브러리 설치
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libxine2-dev

실시간 비디오 캡처 API
sudo apt-get install v4l-utils

GStreamer는 비디오 스트리밍을 위한 라이브러리 설치
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

OpenCV는 JPEG, PNG, TIFF등 디스크에 있는 이미지 파일을 로드 할 수 있다.
디스크에 있는 이미지 파일을 로드 하려면 이미지 I/O 패키지가 필요함
sudo apt install libjpeg-dev libpng-dev libtiff-dev gfortran openexr

로드 된 후 모니터 화면에 보여주기 위해서는 highgui 모듈, GUI에 의존하는 GTK 개발 라이브러리 필요.
sudo apt install libgtk-3-dev

만약 다른 GUI 일 경우 선택 가능
libgtk2.0-dev
libqt4-dev
libqt5-dev

OpenGL 지원 라이브러리 설치
sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev

OpenCV 기본 개발 라이브러리 및 이미지 다차원 처리 패키지 등
sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev libatlas-base-dev libeigen3-dev
sudo apt install libatlas-base-dev gfortran

python2-7 OpenCv-Python 바인딩 필요 라이브러리 추가.
sudo apt-get install python2.7-dev python-numpy

2. 소스코드 복사
mkdir ~/opencv_build && cd ~/opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

3. Python 환경 설정
파이썬 패키기 관린 pip 설치
cd ~
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

가상 개발 환경 구성
https://virtualenv.pypa.io/en/latest/ 및 https://virtualenvwrapper.readthedocs.io/en/latest/ 를 설치한다.
이 두개의 패키지는 별도의 파이썬 버전과 개발 환경을 생성할 수 있게 한다.
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/get-pip.py ~/.cache/pip

사용자 환경 설정.
vi /home/username/.bashrc
# virtualenv 및 virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
:wq
로그아웃 또는 재부팅, 아니면 source /home/username/.bashrc

가상 cv 환경 구축
mkvirtualenv cv -p python3

cv 가상 환경 확인
workon cv
(cv) username:~$

OpenCV 이미지 다차원 처리 NumPy 배열로 표현하며 최종 단계 숫자로 처리함.
pip install numpy -> 이 부분은 apt-get는 일반 환경이며 여기서는 가상 환경에서의 라이브러리.

4. CMake로 OpenCV 설정
workon cv
cd ~/opencv_build/opencv
git checkout 4.0.0

cd ~/opencv_build/opencv_contrib
git checkout 4.0.0

컴파일 구성
mkdir build
cd build

a) 가상환경 
cmake -D CMAKE_BUILD_TYPE=RELEASE \
 -D CMAKE_INSTALL_PREFIX=/usr/local \
 -D INSTALL_PYTHON_EXAMPLES=ON \
 -D INSTALL_C_EXAMPLES=OFF \
 -D OPENCV_ENABLE_NONFREE=ON \
 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
 -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
 -D BUILD_EXAMPLES=ON ..

b) 일반 환경 구성 라이브러리 경로 설정 없음
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
-D WITH_V4L=ON  \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \

c) 일반 환경구성 라이브러리 경루 추가
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
-D WITH_V4L=ON  \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON2_PACKAGES_PATH=/usr/lib/python2.7/dist-packages \
-D PYTHON2_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/  \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
-D BUILD_EXAMPLES=ON ..

경로 패스 지정의 경우: CMAKE 출력 파일의 패스 정보 출력 부분이 없다면 추가 해준다.

OpenCV 4.0.0에서 pkg-config 지원하지 않음.
OPENCV_GENERATE_PKGCONFIG=ON 옵션 추가해, pkg-config의 사용.
https://github.com/opencv/opencv/issues/13154

현재 cv 이름의 가상 환경을 만든 후 일반 환경 구성으로 컴파일해 적용 테스트 중.

4. OpenCV 컴파일 및 설치
cat /proc/cpuinfo | grep processor | wc -l
time make -j4

Makefile:162: recipe for target 'all' failed
make clean
make
sudo make install

동적 라이브러리 설정 확인
cat /etc/ld.so.conf.d/*
/usr/local/lib ---> 존재 여부 확인

없을 경우 /usr/local/lib 동적 라이브러리 추가
sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'

적용.
sudo ldconfig

5. 확인
pkg-config --modversion opencv

6.심볼 링크 
가상 개발 환경
ls /usr/local/python/cv2/python-3.6/
cv2.cpython-36m-x86_64-linux-gnu.so

일반 개발 환경.
ls /usr/lib/lib/python3/dist-packages/
cv2.cpython-36m-x86_64-linux-gnu.so

이름 변경.
가상 개발 환경
cd /usr/local/python/cv2/python-3.6
sudo mv cv2.cpython-36m-x86_64-linux-gnu.so cv2.so

일반 개발 환경
cd /usr/lib/python3/dist-packages
이름 변경 없이 사용.

심볼 링크
가상 개발 환경
cd ~/.virtualenvs/cv/lib/python3.6/site-packages/ 
ln -s /usr/local/python/cv2/python-3.6/cv2.so cv2.so

일반 개발 환경
cd /usr/lib/python3/dist-packages
이름 변경 없이 사용

특정 버전의 개발 환경.
cv2.so 파일 이름을 변경해 관리한다.
cv2.so의 이름을 변경하는 대신, cv2.opencv3.4.4.so 사용.
심볼릭 링크에서 버전별로 적절하게 사용한다.

참고:
apt-get remove --purge 삭제시 cv2.so 파일 삭제 됨.
즉, 가상 환경에서는 문제 없시 동작, 만약 일반 환경에서도 동작 하기 위해서는 cv2.so 파일을 복사한다.
sudo cp /usr/local/python/cv2/python-2.7/cv2.so /usr/local/lib/python2.7/disk-packages/
sudo cp /usr/local/python/cv2/python-2.7/cv2.so /usr/lib/python2.7/disk-packages/

sudo cp /usr/local/python/cv2/python-Version/cv2.cpython-36m-x86_64-linux-gnu.so /usr/lib/pythonVersionVersionVersion/disk-packages/
sudo cp /usr/local/python/cv2/python3/cv2.cpython-36m-x86_64-linux-gnu.so /usr/local/lib/pythonVersionVersion3.6/disk-packages/

6 단계 : OpenCV 테스트
cd /home/username/
workon cv
python
>>> import cv2
>>> cv2.__version__
'4.0.0'

댓글 없음:

댓글 쓰기