VisualStudio2019 + OpenCV4.5.5 + CUDA10.1 + VideoCodecSDK10.0 の環境構築

# VisualStudio2019 + OpenCV4.5.5 + CUDA10.1 + VideoCodecSDK10.0 の環境構築

## 環境構築

### 参考

- <https://qiita.com/Susumu0417/items/c0823f6649d2dddc1679>
- <https://nln.jp/wp/archives/5974>
- <https://takap-tech.com/entry/2021/06/03/215015>

### ダウンロード・インストール

- OpenCV 4.5.5
  - <https://opencv.org/releases/page/2/>
    - Windows
        - opencv-4.5.5-vc14_vc15.exe
            - 解凍
                - E:/Program/OpenCV/opencv
- opencv_contrib 4.5.5
  - <https://github.com/opencv/opencv_contrib>
      - Tag
          - 4.5.5
      - Code
          - Download ZIP
              - opencv_contrib-4.5.5.zip
                  - 解凍
                      - E:/Program/OpenCV/opencv_contrib-4.5.5
- CUDA Toolkit 10.1 Update 2 Download
  - <https://developer.nvidia.com/cuda-toolkit-archive>
      - <https://developer.nvidia.com/cuda-10.1-download-archive-update2>
          - Windows
          - x86_64
          - 10
          - exe[local]
              - cuda_10.1.243_426.00_win10.exe
- NVIDIA VIDEO CODEC SDK 10.0
  - <https://developer.nvidia.com/video-codec-sdk-archive>
      - <https://developer.nvidia.com/designworks/video_codec_sdk/downloads/v10>
          - Video_Codec_SDK_10.0.26.zip
              - 解凍
                  - E:/Program/OpenCV/Video_Codec_SDK_10.0.26
              - C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1 にコピーする
                  - Video_Codec_SDK_10.0.26/Interface/ から v10.1/include/ へ
                  - Video_Codec_SDK_10.0.26/Lib/ から v10.1/lib/ へ
- CMake Latest Release (3.22.1)
  - <https://cmake.org/download/>
      - cmake-3.22.1-windows-x86_64.msi
          - Add CMake to the system PATH for all users
              - 環境変数
                  - PATH
                  - C:/Program Files/CMake/bin
- Visual Studio Community 2019

### OpenCV モジュール生成

- CMakeでOpenCVをビルドするソリューションファイルを生成する
  - cmake-gui 起動
      1. ソースコード
          - E:/Program/OpenCV/opencv/sources
      1. ビルドバイナリ
          - E:/Program/OpenCV/build
      1. Configure
          - Visual Studio 16 2019
          - x64
          - Use default native compilers
          - Finish
      1. Check
          - BUILD_EXAMPLES : ON
          - BUILD_PERF_TESTS : OFF
          - BUILD_TESTS : OFF
          - INSTALL_CREATE_DISTRIB : ON
          - OPENCV_ENABLE_NONFREE : ON
          - OPENCV_EXTRA_MODULES_PATH : E:/Program/OpenCV/opencv_contrib-4.5.5/modules
          - WITH_CUDA : ON
          - WITH_OPENGL : ON
      1. Configure
      1. Check
          - CUDA_ARCH_BIN : 6.1
              - <https://developer.nvidia.com/cuda-gpus>
                  - Geforce GTX 1070 Ti
          - CUDA_ARCH_PTX : 6.1
          - CUDA_TOOLKIT_ROOT_DIR : C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1
      1. Configure
      1. Check
          - WITH_NVCUVID : ON
      1. Configure
      1. Generate
- OpenCVをビルドする
    1. set PATH=C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin;%PATH%
    1. cd /d E:/Program/OpenCV/build
    1. Debug
        1. MSBuild OpenCV.sln /t:build /p:Configuration=Debug;Platform="x64"
            - エラー
              - E:/Program/OpenCV/opencv_contrib-4.5.5/modules/cudacodec/src/video_decoder.cpp(81,29): error C2065: 'cudaVideoCodec_AV1': 定義されていない識別子です。 [E:/Program/OpenCV/build455/modules/cudacodec/opencv_cudacodec.vcxproj]
              - E:/Program/OpenCV/opencv_contrib-4.5.5/modules/cudacodec/src/video_parser.cpp(132,30): error C2065: 'cudaVideoCodec_AV1': 定義されていない識別子です。 [E:/Program/OpenCV/build455/modules/cudacodec/opencv_cudacodec.vcxproj]
              - E:/Program/OpenCV/opencv_contrib-4.5.5/modules/cudacodec/src/video_parser.cpp(135,33): error C2039: 'av1': 'CUVIDEOFORMATEX' のメンバーではありません [E:/Program/OpenCV/build455/modules/cudacodec/opencv_cudacodec.vcxproj]
              - E:/Program/OpenCV/opencv_contrib-4.5.5/modules/cudacodec/src/video_parser.cpp(136,33): error C2039: 'av1': 'CUVIDEOFORMATEX' のメンバーではありません [E:/Program/OpenCV/build455/modules/cudacodec/opencv_cudacodec.vcxproj]
            - cudaVideoCodec_enum.cudaVideoCodec_AV1 が存在しない
              - C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/include/cuviddec.h
              - Video_Codec_SDK_11.1.5 には含まれている
              - 4.5.1から追加されている
                  - <https://github.com/opencv/opencv_contrib/blob/4.5.1/modules/cudacodec/src/video_decoder.cpp#L80-L82>

### TODO

- OpenCV4.5.0で再構築