OpenCV 3.3.0 빌드해서 설치하기
pip install opencv-python로 OpenCV를 설치할 경우 비공식 패키지이기 때문에 configuration도 힘들고 OpenCV의 모든 기능을 사용하려면 당연히 직접 빌드해야 한다.
직접 git에서 pull을 받아 빌드를 해보도록 하자.
https://www.pyimagesearch.com/2015/06/15/install-opencv-3-0-and-python-2-7-on-osx/ 이 블로그 참고하면 쉽다.
git clone https://github.com/Itseez/opencv
git clone https://github.com/Itseez/opencv_contrib
둘다 git checkout 3.3.0해서 3.3.0으로 버전 통일
mkdir opencv/build && cd opencv/build
- cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX={{site-packages}} \
-D PYTHON2_LIBRARY={{python/bin}} \
-D PYTHON2_INCLUDE_DIR={{include/python}} \
-D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules .. \
-D WITH_FFMPEG=ON
- 나는 FFMPEG의 비디오 코덱을 사용할 것이기 때문에 마지막줄을 추가했다.
- cmake가 안되면 brew install cmake로 설치하고, brew도 없으면.. 알아서 설치하고, {{ }} 사이에 있는 것들을 확인하는 방법은 Python을 실행해서
- >> from sysconfig import get_paths
>> from pprint import pprint
>> info = get_paths()
>> pprint(info)
해서 나오는 것들을 보고 집어넣는다.
- make (-j4)
make install
ldconfig
- 하지만 이렇게 해도 절대 되지 않지. OpenCV는 개 똥같으니깐.
3.3.0버전에서 CUDA 9.0과 충돌이 나기 시작한다. CUDA의 nppi 라이브러리가 사방 팔방 흩어졌기 때문이다 - 이 이슈에 관한 글은 https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound 여기서 확인
- 고쳐보자
opencv/cmake/FindCUDA.cmake를 보자. 3.3.0버전 기준으로 809번째줄에 find_cuda_helper_libs(nppi)가 문제
- find_cuda_helper_libs(nppial)
find_cuda_helper_libs(nppicc)
find_cuda_helper_libs(nppicom)
find_cuda_helper_libs(nppidei)
find_cuda_helper_libs(nppif)
find_cuda_helper_libs(nppig)
find_cuda_helper_libs(nppim)
find_cuda_helper_libs(nppist)
find_cuda_helper_libs(nppisu)
find_cuda_helper_libs(nppitc) - 이렇게 바꾸자
- 805번째 줄의
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}") 를
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
- 524번째 줄의 unset(CUDA_nppi_LIBRARY CACHE) 를
unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE) 로 바꾸고 OpenCVDetectCUDA.cmake에서 65번째부터 시작하는 if문에서 Fermi(2.0)을 지우고 Kepler를 if로 처리
105번째 줄 set(__cuda_arch_bin "2.0 3.0 3.5 3.7 5.0 5.2 6.0 6.1") 에서도 2.0을 지우자
\modules\cudev\include\opencv2\cudev\common.hpp 에 헤더를 추가해야됨
#include <cuda_fp16.h>
이 라인을 적당한 곳에 끼워넣자
make
opencv_cudaarithm에서 뭔가 문제가 생겼다
opencv 랑 opencv_contrib 폴더를 다 지우자.
다시 설치해서 3.4.0말고 master브랜치에서 다시..시도....
CUDA관련 설정이 이미 돼있다.
-D BUILD_opencv_freetype=OFF 이 설정을 추가해서 cmake하면 성공
3.4.0버전도 뭔가 이상하다
3.1.0을 해보자.......
도커를 쓰자!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!