20241212追記
長々とだらだらと書きましたが公式のチュートリアルが丁寧でした。
公式をちゃんと見ないとだめですね。反省
OpenCV4.10をビルドしてVisualStudio2022 C++で使えるようにする!
大事なことなので2回書きました
前回書いたこちらの続きになります。
ONNX RUNTIME、OPENCVをビルドしたのは、C++で利用できるようするためです。
C++は私にとって未踏の地なので、自分で理由をつけて逃れていましたが、できる/できない の判断を先延ばしにしているだけなので、イヤイヤながら 着手し始めてみました。
まずは単純にOpenCVを使ったプログラムが動けばいい、と思ったのですが、素人の私に思っていたより大変だったので、まとめておくものです。
環境
Windows11
ONNX RUNTIME 1.21.0
CUDA 12.4
cuDNN 9.1
OPENCV 4.10
VisualStudio 2022 Version 17.12.3 (なんかちょびっと上がってました
CMAKE 3.31.1
参考にした記事
大まかな流れ的には下の記事を参考にさせて頂きました!
CMake GuiでConfigure,Generateする!
OpenCV、opencv_contribをGit cloneなどで落としてきた後、Cmake GUIでConfigure、Generateします。
Cmake GUIの画面で、使いたい機能をちゃんと設定することがほんと大切です。
CUDA、ONNXを利用したい私は次のように設定しました。
-
WITH_CUDA
: -
OPENCV_DNN_CUDA
: -
CUDA_ARCH_BIN
:7.5;8.0;8.6;8.9;9.0
-
CUDA_ARCH_PTX
:7.5;8.0;8.6;8.9;9.0
-
CUDA_TOOLKIT_ROOT_DIR
:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.4
-
WITH_CUDNN
: -
WITH_ONNX
: -
ONNXRT_ROOT_DIR
:C:/Program Files/onnxruntime
-
BUILD_opencv_world
:
これくらい設定すると、Configureを押すと、あとはCMAKEがいい感じで設定してくれたりします。
変わった赤のところを確認し、もし違ってそうなら書き直す、くらいの感じで大丈夫です。
CUDA_ARCH_BIN、CUDA_ARCH_PTXは、私が対象とする世代カードを設定しています。デフォルトだと全部対象だったと思います。
使う予定もツールキットも持ってないけど「俺欲しいからいれちゃおうー♪」と入れると、正しくビルドできずに動かなくなったりするので気を付けよう!
(OpenVINOにチェックを入れて、ぱっと見は良さそうだったけど結局なんか動かなくてビルドしなおした回数1)
BUILD_opencv_world: ←これ大事なので忘れないように!
(チェックを入れてなくて結局動かなくてビルドしなおした回数1)
設定が良さそうならGenerateをポチ!
Generateが終わると、Open Projectが押せるので、押す。とVisualStudio2022が起動する。
VisualStudio2022でビルドする!
次の順番でビルドを行います。
- ビルド>ビルド>0 ALL_BUILD (1~1.5時間くらい?)
- ビルド>ビルド>2 INSTALL (まぁ早い)
(1 CLEAN_CUDA_DEPENDSはよくわからなかったので、とりあえずやってません・・・
→やってみました。1 自体は数秒で終わります。対象外のCUDA関係が削除されるのかな?その後2を実行するとcuda周りのビルドが行われます。0→2でも使用上問題なさそうですが、元の設定どおりにするには、0,1,2と順に実行するのがいいのかもしれませんね。)
INSTALLを行うと、installというフォルダに必要なファイルがまとめられます。
環境変数を設定する!
具体的なパスはご自身の環境にあわせて設定してください。
システム > システム詳細設定 > 環境変数 > システム環境変数のPathに追加します。
D:\opencv\install
D:\opencv\install\x64\vc17\bin
D:\opencv\install\x64\vc17\lib
D:\opencv\install\bin
D:\opencv\install\include
システム > システム詳細設定 > 環境変数 > システム環境変数にOPENCV_ROOTという項目を追加します。
-
OPENCV_ROOT
D:\opencv
環境変数設定後は、一度再起動をするようにしてください。
VisualStudioで新しい空のプロジェクトを作成する!
VisualStudioのプロジェクトでOpenCVが使えるように設定をする!
構成:Release
- プロジェクト > プロパティ > VC++ディレクトリ > 外部インクルードディレクトリ
D:\opencv\install\include;
- プロジェクト > プロパティ > VC++ディレクトリ > ライブラリディレクトリ
D:\opencv\install\x64\vc17\lib;
- プロジェクト > プロパティ > デバッグ > 環境
D:\opencv\install\x64\vc17\bin;
- プロジェクト > プロパティ > リンカー > 追加の依存ファイル
opencv_world4100.lib;
VisualStudioでOPENCVのサンプルコードを追加して実行、確認する!
ソリューションエクスプローラーで右クリック > 追加 > 新しい項目 > C++ファイル(.cpp)
して、次のコードをこぴぺ。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = Mat::zeros(100, 100, CV_8UC3);
imshow("", image);
waitKey(0);
}
構成:Releaseで、緑のをぽち!
黒く塗りつぶした画像のウィンドウが出たらOK!やったね!
その他、わたしがハマったポイント
- C#やVBのようなフォームありの共通言語ランタイム設定 CLRを有効にすると、cv::mutexがないみたいなエラーがでます。CLRは諦めましょう。
https://forum.opencv.org/t/compile-error-when-enable-clr-support-on-windows/18241
感想
まだONNXまでたどり着いていない・・・!
あとUIが不安でしかない。