출처: http://webnautes.tistory.com/1036
OpenCV's extra modules( opencv_contrib )을 포함하여 OpenCV 3.4.2 라이브러리를 Visual Studio 2017와 Python 3.7에서 사용하기 위해 컴파일한 과정을 다루고 있습니다.
윈도우즈용으로 미리 빌드된 OpenCV 라이브러리에는 extra 모듈(opencv_contrib)이 빠져있습니다.
SURF, SIFT(xfeatures2d) 등의 OpenCV 모듈을 사용하려면 https://github.com/opencv/opencv_contrib에 있는 소스 코드를 포함시켜서 다시 컴파일 해주어야 합니다.
빌드 환경은 다음과 같습니다.
Windows 10 Pro 64bit
Visual Studio Community 2017
Python 3.7
OpenCV 3.4.2
오류나 잘못된 점이 발견되면 알려주세요..
1. CMake 설정으로 Visual Studio 솔루션 생성 1.1. CMake 설치 1.2. OpenCV 소스코드 다운로드 1.3. Eigen 라이브러리 다운로드 1.4. 파이썬 설치 1.5. CMake로 OpenCV 빌드 옵션 설정 1.6. Visual Studio 솔루션 생성 및 빌드 2. 빌드된 OpenCV 라이브러리 테스트
3. 참고한 곳 |
2016. 9. 6 최초 작성
2018. 1. 29 OpenCV 3.4 반영
2018. 7. 10 OpenCV 3.4.2 반영
C++ / Python용 라이브러리 한번에 컴파일해서 사용하는 방법 추가
1. CMake 설정으로 Visual Studio 솔루션 생성
1.1. CMake 설치
1. https://cmake.org/download 에서 윈도우용 CMake를 다운로드 받아 설치합니다.
글 작성 시점에서 최근 릴리즈된 버전(Latest Release)은 3.11.4 입니다.
바이너리로 배포되는 x64 설치 파일을 다운로드 받습니다.
2. GUI 환경에서 진행하기 위해 Create CMake Desktop Icon을 체크하는 것 외에는 옵션 변경 없이 설치를 진행합니다.
1.2. OpenCV 소스코드 다운로드
임시 폴더(여기선 C:\opencv-source)를 만들고 아래 두 곳에서 소스 코드를 다운로드 받아 압축을 풀어 복사해줍니다.
https://github.com/opencv/opencv/releases
https://github.com/opencv/opencv_contrib/releases
현재 C:\opencv-source 폴더에 다음 2 개의 폴더가 존재합니다.
1.3. Eigen 라이브러리 다운로드
Eigen 라이브러리를 OpenCV에서는 선형대수, 매트릭스, 벡터 연산등을 빠르게 처리하는데 사용합니다.
http://eigen.tuxfamily.org 에서 stable 버전을 다운로드 받았습니다.
압축을 풀은 후, 폴더 이름을 간단하게 바꾸어서 C:\opencv-source에 복사해둡니다.
1.4. Python 3 및 numpy 설치
아래 포스팅을 참고하여 Python 3을 설치합니다.
Windows에 Python 설치하는 방법 http://webnautes.tistory.com/1202 |
명령 프롬프트에서 다음 명령으로 numpy를 설치합니다.
pip3 install numpy
C:\Users\webnautes>pip3 install numpy |
1.5. CMake로 OpenCV 빌드 옵션 설정
1. cmake-gui를 실행한 후..
2. cmake-gui를 사용하여 OpenCV 컴파일 설정을 해주려면 다음 2가지를 설정해줘야 합니다.
주의할 점은 아래처럼 윈도우에서 사용하는 \ 대신에 /로 바꾸어서 경로를 입력해야합니다.
Where is the source code |
앞에서 설명한대로 OpenCV 소스 위치와 빌드 결과물이 저장될 위치를 입력하고 Configure 버튼을 클릭합니다.
입력란 옆에 보이는 Browse 버튼을 클릭하여 선택해도 됩니다.
컴파일 된 결과물이 저장될 위치에 해당되는 폴더가 생성되어 있지 않는 경우에는 새로 생성할지 물어봅니다. Yes를 클릭합니다.
3. OpenCV 소스코드를 컴파일할 때, 사용할 컴파일러를 선택하고 Finish 버튼을 클릭합니다.
포스팅에서는 Visual Studio 15 2017 Win64를 선택하고 있습니다.
이후 과정에서 선택한 컴파일러를 위한 프로젝트를 생성하기 위해 필요한 작업입니다.
4. 바로 cmake가 실행되며 아래쪽에 진행결과를 보여줍니다.
에러 없이 완료되면 마지막 줄에 Configuring done이 출력됩니다.
옵션 변경 후 Configure 버튼을 클릭하면 cmake가 다시 실행되며 새로 추가된 옵션이 있을 경우 빨간색 배경 위에 표시해줍니다.
진행하다가 문제 생겼을 경우 컴파일된 결과물이 저장될 위치(C:/opencv-source/build)로 지정된 경로의 폴더 및 파일을 지워주세요.. 그리고 cmake-gui를 실행하여 메뉴에서 File > Delete cache를 선택한 후, 다시 2번부터 다시 진행하면 됩니다. |
하단에 있는 로그창에서 우분투처럼 실행결과를 확인할 수 있습니다.
5. Search 검색란에 python을 입력하면 Python 관련 옵션들만 보입니다.
캡처화면에는 Python 3.7 관련 경로가 입력되어 있습니다. 별문제 없는 한 cmake에서 configire 버튼 클릭 전에 설치해둔 python과 numpy 관련 경로들이 자동으로 감지됩니다.
6. 최소 cmake 실행 결과 cpu 관련 테스트를 통해 다음과 같이 최적화 옵션이 자동으로 입력됩니다.
( 최적화를 위한 글 https://github.com/opencv/opencv/wiki/CPU-optimizations-build-options )
성능 향상 관련 다음 옵션들이 디폴트로 선택되어 있습니다.
7. EIGEN_INCLUDE_PATH 옵션에 다운받아둔 EIGEN 경로를 입력합니다.
C:/opencv-source/eigen |
8. 라이브러리 빌드 시간 단축을 위해 BUILD_PREF_TESTS, BUILD__TESTS 체크 해제합니다.
9. Extra 모듈(opencv_contrib)의 위치를 설정해줍니다.
C:/opencv-source/opencv_contrib-3.4.2/modules |
10. OPENCV_ENABLE_NONFREE를 체크합니다.
컴파일시 C:\opencv-source\opencv_contrib-3.4.2\modules\xfeatures2d\include\opencv2\xfeatures2d.hpp 대신에 C:\opencv-source\opencv_contrib-3.4.2\modules\xfeatures2d\include\opencv2\xfeatures2d\nonfree.hpp를 사용하게 됩니다. |
11. 빌드 결과물 최종 설치 위치를 C:/opencv-3.4.2/build로 지정해줍니다.
기존에 사용중인 폴더가 아닌지 확인해보세요
INSTALL_C_EXAMPLES와 INSTALL_PYTHON_EXAMPLES옵션을 체크하여 예제 파일들도 위에 지정한 경로로 복사되도록 합니다.
12. 사용하지 않는 다음 옵션들을 체크 해제합니다.
NVidia 그래픽카드를 사용하지 않는 경우 CUDA관련 옵션을 제거합니다.
BUILD_DOCS, BUILD_JAVA, BUILD_PACKAGE, BUILD_opencv_ts
WITH_1394, WITH_CUDA, WITH_CUBLAS, WITH_CUFFT, WITH_NVCUVID, WITH_GSTREAMER,
WITH_LAPACK, WITH_MATLAB, WITH_VTK
13. 변경한 옵션들을 적용하기 위해서 Configure 버튼을 클릭해줍니다.
14. 새로 추가된 옵션들이 붉은색으로 표시됩니다. 여기에선 이 부분에 대한 추가 설정안하고 진행합니다.
앞에서 추가한 opencv_contrib 모듈 경로에 의해서 인식된 Extra 모듈을 빌드할지 여부를 결정하는 옵션들이 보입니다.
그외에 추가로 필요한 라이브러리들을 위한 옵션들이 보입니다.
15. BUILD_opencv_word 옵션을 체크합니다. OpenCV 바이너리 배포판처럼 World 모듈 파일 하나만 링크해도 되게 파일을 생성해줍니다.
16. 다시 변경한 옵션들을 적용하기 위해서 Configure 버튼을 클릭해줍니다.
17. 최종 설정 완료된 결과입니다.
python3 모듈도 빌드된 모듈에 포함되어 있습니다. 설치되어 있는 파이썬3 관련 경로들이 자동으로 감지됩니다. 최종 컴파일 결과물이 복사되는 경로입니다. |
1.6. Visual Studio 솔루션 생성 및 빌드
1. Generate 버튼을 클릭하면 Generating done 메시지가 출력되면서 Open Project 버튼이 활성화됩니다.
2. cmake-gui의 Open Project 버튼을 클릭하거나 C:\opencv-source\build에 생성되어 있는 OpenCV.sln을 더블클릭하여 컴파일 진행을 합니다.
OpenCV 솔루션에 35개의 프로젝트가 포함되어 있습니다.
앞에서 선택한 옵션따라 프로젝트 개수는 다를 수 있습니다.
3. 툴바에서 솔루션 구성을 Release로 변경합니다.
4. 솔루션 탐색기 CMakeTargets 하위 항목인, INSTALL 위에서 마우스 우클릭하고 메뉴에서 빌드를 선택합니다. 빌드 및 설치가 이어서 진행됩니다.
문제 없으면 다음과 같은 메시지가 보입니다.
5. 완료되면 툴바에서 솔루션 구성을 Debug로 변경하고 4번을 반복합니다.
실패가 하나 보이는데
다음처럼 디버그용 python 라이브러리 파일이 없어서 발생합니다.
C++ 디버그용 라이브러리를 사용하는데에는 문제 없지만 파이썬 디버그용 라이브러리를 생성되지 않은 상태입니다.
25>LINK : fatal error LNK1104: 'python37_d.lib' 파일을 열 수 없습니다. |
6. 빌드 완료 후, 확인된 빌드된 주요 OpenCV 라이브러리 파일들의 설치 위치입니다.
OpenCV 헤더파일(.hpp, .h) haarcascades, lbpcascades XML 파일 C:\opencv-3.4.2\build\etc OpenCV 예제 코드 C:\opencv-3.4.2\build\samples |
예제 코드는 복사가 안되는 경우에는 다음 위치에서 찾을 수 있습니다.
C:\opencv-source\opencv-3.4.2\samples
C:\opencv-source\opencv_contrib-3.4.2\module에 모듈별로 samples, tutorials 폴더 존재
2. 빌드된 OpenCV 라이브러리 테스트
2-1. C++용 OpenCV 라이브러리 테스트는 포스팅을 참고하여 진행하면 됩니다.
Visual Studio 2017에서 OpenCV 3.4.2를 사용하는 방법 |
2-2. Python용 OpenCV 라이브러리 테스트하기 전에 추가 작업이 필요합니다.
동적(Shared) 라이브러리로 컴파일 했기 때문에 파이썬 라이브러리인 cv2.pyd가 참조하는 DLL 파일을 Python 폴더로 복사해주어야 제대로 동작합니다.
2-3. 포스팅대로 진행했다면 C:\opencv-3.4.2\build\x64\vc15\bin 경로에 생성된 다음 세 개의 파일을 복사합니다.
opencv_ffmpeg342_64.dll
opencv_img_hash342.dll
opencv_world342.dll
2-4. 파이썬용 OpenCV 라이브러리인 cv2.pyd 파일이 복사되어 있는 위치에 복사해줍니다.
1.5장 17번에서 확인한 cmake 실행결과를 보면 위치를 알 수 있습니다.
포스팅 대로 따라했다면 다음 위치입니다. 경로에서 webnautes 부분은 로그인 사용자 이름입니다.
packages path: C:/Users/webnautes/AppData/Local/Programs/Python/Python37/Lib/site-packages |
2-5. 명령 프롬프트에서 다음 명령으로 Python용 얼굴 인식 코드를 동작시켜 봅니다.
카메라 영상에서 검출된 얼굴에 초록색 사각형, 얼굴 영역에서 검출된 눈 위치에 파란색 사각형을 볼 수 있습니다.
python c:\opencv-3.4.2\build\samples\python\facedetect.py --cascade c:\opencv-3.4.2\build\etc\haarcascades\haarcascade_frontalface_alt.xml --nested-cascade c:\opencv-3.4.2\build\etc\haarcascades\haarcascade_eye_tree_eyeglasses.xml |
3. 참고한 곳
[1] https://docs.opencv.org/3.4.2/d3/d52/tutorial_windows_install.html
[3] https://github.com/kyamagu/mexopencv/wiki/Installation-%28Windows%2C-MATLAB%2C-OpenCV-3%29
[4] http://jamesbowley.co.uk/build-opencv-v3-2-with-cuda-8-0-and-intel-mkltbb/
적지 못한 참고 사이트들도 있습니다.
'언어 > OpenCV' 카테고리의 다른 글
opencv dll 2.4.13 (0) | 2020.12.06 |
---|---|
Compile OpenCV 3 for Windows 10 IoT Core ARM (Raspberry Pi) (0) | 2018.09.11 |
lazarus MiOpenCV (0) | 2018.09.06 |
OpenCV에서 네트워크 카메라(IP Camera) 읽기 (0) | 2018.09.06 |
Visual Studio 2017에서 OpenCV 3.4.2를 사용하는 방법 (0) | 2018.08.29 |