やること
OpenCV with CUDA をビルドする
※OpenCVとOpenCV contribをダウンロードし、一緒にビルドしてあげる必要があるそう。
環境
VisualStudio 2017
CUDA 11.3
Windows10
※OpenCVは、C++で使用することを想定している。
各手順
-
CMake GUIインストール
以下に従い、最新版をインストール
CMake【インストール編】
cmake のインストール(Windows 上) -
1回目のconfigure実行までは以下を参考にして行う。
OpenCV + OpenCV Contribをビルド 【Windows編】 -
以下を参考に、Pythonのインストール。Python インストール後、要再起動
https://www.kkaneko.jp/tools/win/windows_opencv.html
上記参考サイトでは、pipで以下のコマンドをたたいていたが、
pip install -U pip setuptools
pip install -U numpy pylint flake8
pip install h5py
pip uninstall python-opencv
追加で、pip install h5py も行う。 -
2回目のconfigure実行時は、以下を参考にして行う。
OpenCV 4.1.0をCUDA対応でビルド
・しかし、参考ページとは異なり、WITH_TBBはONにしていない。また、私の場合、以下の赤字の項目に加えて、WITH_CUDA, WITH_OPENGLをON、OPENCV_EXTRA_MODULE_PATHに、opencv_contribフォルダ内のmodulesフォルダへのパスを設定した。
・CUDA_ARCH_BIN, CUDA_ARCH_PTXはGPUのcopute capabilityを設定する。
・CUDA_GENERATIONは各自のGPUの世代を設定する。
-
2回目のconfigure実行後、generateを行い、opencvをビルドする。
詳細は、以下を参照
OpenCV + OpenCV Contribをビルド 【Windows編】
※以上、ビルドが完了すると、opencvのビルド用フォルダ内に、installフォルダがあることが確認できる。このinstallフォルダ内のincludeフォルダ内にヘッダ、x64→vc15フォルダ内に、bin, libが入っている。
参考までに、ビルド結果、1つ失敗したが問題なかった。
注意点
色んな情報を参考にし、ビルドを試みたが、かなりはまったため、注意点も記載する。
・環境変数でPROXYの設定を行い、再起動しておくこと(PROXY環境下の場合)
→これを行わないと、configureとかのログで、proxyで、アクセスに失敗したといったログが表示されていた。
・OpenCV関連をCドライブ以下に配置した場合は、一応CMAKE guiを管理者権限で実行すること
→ 管理者権限でない場合、データの書き込みがうまくいかず、configure等でエラーが発生する場合があるらしい。
CMakeを用いたOpenCVビルド
・使用しているCUDAに合わせたOpenCVをインストールすること。
→ 最初は、OpenCV4.5.1を使おうとしたが、configureが通らなかった。
※以下に、OpenCV-CUDAの対応関係が記載されているが、CUDA11.3にマッチしたOpenCVの記載はなかった、、、とりあえず、使っているCUDAにあったOpenCVをインストールする必要があるのはわかった。
OpenCVをCUDA付きでビルドする際にサポートされる範囲
→ 私の場合、以下の記事を参考にし、OpenCVは4.5.2を使用した。
OpenCV 4.5.2 + CUDA11.3 + RTX3070 チューニングビルド
・1回目のconfigure押下後に、表示される画面で、赤線部がx64になっていることを確認すること
→ 参考記事では、デフォがx64になっていたが、私の環境では、なぜかデフォがWin32だった、、、その場合、generateでエラーが起き、ビルドもできない。
・私の環境では、「VS studioのプロジェクトのプロパティ->デバッグ->環境」に、以下、h5pyへのpathを追加しなければ、opencv with cudaを用いたVisualStudioでの処理実行時に、「hdf5.dll, zlib.dlが存在しない」とエラーが出てきてしまった。
「VS studioのプロジェクトのプロパティ->デバッグ->環境」に、以下、h5pyへのpathを追加しなければ、先ほどと同様に、処理実行時に、「hdf5.dll, zlib.dlが存在しない」とエラーが出てきてしまった。
「C:\Program Files\Python39\Lib\site-packages\h5py」
・また、以下のように、cudaの中に備わっている画像処理ライブラリ(NPP)を使えるようにしなければ、プログラム実行時に、
npp系のdllがないとエラーが出る。
a.「VS studioのプロジェクトのプロパティ->デバッグ->環境」に、以下のようなcudaのbinディレクトリへのpathの追加
「$(CUDA_PATH)\bin」
b.「VS studioのプロジェクトのプロパティ->C/C++->全般->追加のインクルードディレクトリ」に、以下のようなcudaのincludeディレクトリへのpathの追加
「$(CUDA_PATH)\include」
c.「VS studioのプロジェクトのプロパティ->リンカー->全般->追加のライブラリディレクトリ」に、以下のようなcudaのlibディレクトリへのpathの追加
「$(CUDA_PATH)\lib」
「$(CUDA_PATH)\lib\x64」
d.「VS studioのプロジェクトのプロパティ->リンカー->入力->追加の依存ファイル」に、以下のようなcudaの中に備わっている画像処理ライブラリ名の追加
「nppc.lib
nppial.lib
nppicc.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib」