Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)
OpenCV는 강력한 라이브러리입니다.그것은 매우 크다.하지만 그것도 매우 유연하다.일반적으로 선택할 수 있는 의존항을 제공함으로써 바이너리 파일에 포함될 내용을 선택하지만, 때로는 그것을 필요한 방향으로 미루어야 한다.
이 안내서에서 가장 긴 cmake 줄을 사용해서 컴파일하는 방법을 보여 드리겠습니다. (그러기를 바랍니다.) 성공적으로 컴파일하는 데 필요한 것이 무엇인지 알 수 있도록 주석을 추가할 것입니다.
자, 시작합시다.
다운로드
OpenCV를 구축하려면 소스 코드OpenCV와 OpenCVcontrib 두 가지 항목이 필요합니다.
최신 버전의 zip/tar-ball을 다운로드할 수도 있고, 복제해서 필요한 버전 (일명 탭) 을 서명할 수도 있다.
이 자습서에서는 어떤 방법을 선택하든 두 항목을 같은 폴더에 나란히 배치하기만 하면 됩니다.
의존 관계
아래에 설명된 의존 항목을 모두 설치한 경우 다음을 수행할 수 있습니다.
-- OpenCV modules:
-- To be built: aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: alphamat cnn_3dobj hdf java julia matlab ovis python2 sfm ts viz
이것이 바로 네가 필요로 하는 것이다.
아래에 설명된 의존 항목을 모두 설치한 경우 다음을 수행할 수 있습니다.
-- OpenCV modules:
-- To be built: aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: world
-- Disabled by dependency: -
-- Unavailable: alphamat cnn_3dobj hdf java julia matlab ovis python2 sfm ts viz
이것이 바로 네가 필요로 하는 것이다.python3 + numpy
- 저는 보통 어떤venv/virtualenv 샌드위치 이외의 전 세계에서 설치합니다.전 세계에 OpenCV를 설치한 후, 필요할 때 venv 모래함에서 그것을 인용할 수 있습니다.다음과 같은 cmake 출력이 표시됩니다.python3-pyqt5.qtopengl
- Qt+OpenGL을 감지하기 위해 의존항을 도입하면 충분합니다.OpenGL이 왜 이렇게 중요한지 물어볼지도 몰라요.하드웨어 가속 프레임 속도.다음과 같은 cmake 출력이 표시됩니다.ffmpeg + gstreamer
- 다른 비디오 인코딩을 로드하는 경우:libfreetype-dev + libharfbuzz-dev
- truetype 글꼴을 지원하려면 CUDA + CuDNN
- 다음은 이 점에 대해 더욱 상세하게 설명해야 한다.CUDA+CuDNN
CUDA는 일반적으로 같은 디렉토리에 설치됩니다.이 목록은 보통
/usr/local/cuda-<version>
이다.하지만 이건 규칙이 아니야.POPS를 사용합니다/usr/lib/cuda-<version>
.여러 버전을 동시에 설치할 수도 있습니다.위에서 보듯이 CUDA-11.2는 자동으로 설치되어 있지만, CUDNN은 11.1 이전에만 사용할 수 있기 때문에, 나는 CUDA-11.1을 설치해서 CUDA와 CUDNN을 같은 트리 구조에 설치해야 한다.
cmake에서 CUDA와 CUDNN을 찾을 수 있도록 경로에
<your CUDA root>/bin
만 추가하면 됩니다.너는 이렇게 검사할 수 있다.
엄청 쉬워요. 그렇죠?🤣
그럼 건설합시다!
관련성 검사
컴파일을 하기 위해서는 Opencv 라이브러리 루트 폴더 ((build
에 cd opencv; mkdir build; cd build
폴더를 만들어야 합니다.
이제 숨을 깊이 들이마시고 내가 명령을 작성한 가장 큰 명령줄을 즐겨라.
cmake -D CMAKE_CXX_COMPILER=/usr/bin/g++ \
-D CUDA_HOST_COMPILER:FILEPATH=/usr/bin/gcc-9 \
-D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDNN_INCLUDE_DIR=/usr/lib/cuda-11.1/include \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=8.6 \
-D WITH_CUBLAS=1 \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_IPP=ON \
-D CMAKE_BUILD_TYPE=RELEASE \
-D WITH_CSTRIPES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local/ \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON_INCLUDE_DIR=$(python2 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
..
엔딩의 두 점을 놓치지 마라!
몇 가지 설명 가능한 구성:
cmake -D CMAKE_CXX_COMPILER=/usr/bin/g++ \
-D CUDA_HOST_COMPILER:FILEPATH=/usr/bin/gcc-9 \
-D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D CUDNN_INCLUDE_DIR=/usr/lib/cuda-11.1/include \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=8.6 \
-D WITH_CUBLAS=1 \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_IPP=ON \
-D CMAKE_BUILD_TYPE=RELEASE \
-D WITH_CSTRIPES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local/ \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON_INCLUDE_DIR=$(python2 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
..
CMAKE_CXX_COMPILER
- c++ 파일 컴파일CUDA_HOST_COMPILER:FILEPATH
- cuda 파일을 컴파일하기 - system76-cudnn
패키지를 설치하는 동안 gcc-9이 설치되어 있음을 알았습니다.알아요, 아주 확실해요.CUDA_NVCC_FLAGS
- 언젠가 필요하면 최종적으로 제거될 수 있음CUDNN_INCLUDE_DIR
- cuda 홈 폴더 확인CUDA_ARCH_BIN
- GPU 아키텍처.여기서 보기https://developer.nvidia.com/cuda-gpusOPENCV_EXTRA_MODULES_PATH
-opencv contrib 폴더모든 의존 관계가 정상적인지 확인하기 위해서, 이전 절의 시작 줄
Unavailable: ...
을 읽고, 당신과의 차이를 확인하십시오.cmake를 다시 실행해야 한다면
build
폴더를 떠나서 삭제하고 다시 만들고 다시 변경하고 cmake를 다시 실행하십시오.이것은 무미건조한 과정이지만 불행하게도 이곳에는 지름길이 없다.집성
이 단계가 가장 간단하다.모든 종속성이 충족되면 make 명령만 실행하면 됩니다.
make -j<number of processes>
나는 번역 시간을 단축하기 위해 - j 로고를 사용하는 것을 강력히 건의합니다.만약 컴파일링이 실행될 때 컴퓨터를 계속 사용하기를 원한다면, 나는 $(nproc)-2
을 사용하는 것을 권장한다.
참고로 -j60
+nvme를 사용하면 이곳의 컴파일 과정은 5m30초가 걸립니다.
문제가 발생하면 위로 스크롤하거나 검색error:
을 두려워하지 말고 무슨 일이 일어났는지 확인하세요.
설치하다.
만일 모든 것이 순조롭다면:
💯% 보배!
당신이 해야 할 일은:
sudo make install
이것은 유일하게 루트의 슈퍼 권한을 호출해야만 /usr/local
에 파일을 쓸 수 있는 것이다.
확인
당신의 성취를 테스트하려면:
$ python3
>>> import cv2
>>> print(cv2.getBuildInformation())
cmake와 같은 출력을 보셔야 합니다.
사용
OpenCV를 venv와 함께 사용하려면(venv에 대한 더 많은 정보를 읽을 수 있음) 다음 플래그를 사용하십시오.
python -mvenv --system-site-packages venv
이렇게 하면 시스템 전반적인 패키지와 같은 샌드박스가 포함된 venv
라는 하위 폴더가 생성됩니다.알고 있었어?
끝맺다
만약 네가 여기까지 계속 읽었다면, 축하한다. 너는 매우 확고한 사람이다🤣
도움이 필요하시면 메시지를 남겨 주세요!
행운을 빕니다.
Reference
이 문제에 관하여(Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/moniquelive/how-i-compile-opencv-on-linux-with-lots-of-bells-and-whistles-cudnn-cuda-opengl-qt-truetype-video-codecs-3hmo
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
make -j<number of processes>
만일 모든 것이 순조롭다면:
💯% 보배!
당신이 해야 할 일은:
sudo make install
이것은 유일하게 루트의 슈퍼 권한을 호출해야만 /usr/local
에 파일을 쓸 수 있는 것이다.확인
당신의 성취를 테스트하려면:
$ python3
>>> import cv2
>>> print(cv2.getBuildInformation())
cmake와 같은 출력을 보셔야 합니다.
사용
OpenCV를 venv와 함께 사용하려면(venv에 대한 더 많은 정보를 읽을 수 있음) 다음 플래그를 사용하십시오.
python -mvenv --system-site-packages venv
이렇게 하면 시스템 전반적인 패키지와 같은 샌드박스가 포함된 venv
라는 하위 폴더가 생성됩니다.알고 있었어?
끝맺다
만약 네가 여기까지 계속 읽었다면, 축하한다. 너는 매우 확고한 사람이다🤣
도움이 필요하시면 메시지를 남겨 주세요!
행운을 빕니다.
Reference
이 문제에 관하여(Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/moniquelive/how-i-compile-opencv-on-linux-with-lots-of-bells-and-whistles-cudnn-cuda-opengl-qt-truetype-video-codecs-3hmo
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ python3
>>> import cv2
>>> print(cv2.getBuildInformation())
OpenCV를 venv와 함께 사용하려면(venv에 대한 더 많은 정보를 읽을 수 있음) 다음 플래그를 사용하십시오.
python -mvenv --system-site-packages venv
이렇게 하면 시스템 전반적인 패키지와 같은 샌드박스가 포함된 venv
라는 하위 폴더가 생성됩니다.알고 있었어?끝맺다
만약 네가 여기까지 계속 읽었다면, 축하한다. 너는 매우 확고한 사람이다🤣
도움이 필요하시면 메시지를 남겨 주세요!
행운을 빕니다.
Reference
이 문제에 관하여(Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/moniquelive/how-i-compile-opencv-on-linux-with-lots-of-bells-and-whistles-cudnn-cuda-opengl-qt-truetype-video-codecs-3hmo
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/moniquelive/how-i-compile-opencv-on-linux-with-lots-of-bells-and-whistles-cudnn-cuda-opengl-qt-truetype-video-codecs-3hmo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)