Linux에서 OpenCV를 어떻게 컴파일했는지(CudnN, CUDA, OpenGL, Qt, TrueType, 비디오 코딩기)

11173 단어 cudaopencvpython
Emportuguês.
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
이것이 바로 네가 필요로 하는 것이다.
  • 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 라이브러리 루트 폴더 ((buildcd 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_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-gpus
  • OPENCV_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라는 하위 폴더가 생성됩니다.알고 있었어?

    끝맺다


    만약 네가 여기까지 계속 읽었다면, 축하한다. 너는 매우 확고한 사람이다🤣
    도움이 필요하시면 메시지를 남겨 주세요!
    행운을 빕니다.

    좋은 웹페이지 즐겨찾기