今回はVisual Studio C++でのOpenCVおよびtorchのC++版Libtorchの始め方を紹介する
Visual Studioのインストール
-
Visual Studio のインストーラーをダウンロードする
https://visualstudio.microsoft.com/ja/downloads/ -
ダウンロードした次のいずれかのエディションのインストーラーをダブルクリックする
- Visual Studio Community の場合は vs_community.exe (無料)
- Visual Studio Professional の場合は vs_professional.exe (有料)
無料試用版の利用は下記リンクの下部からダウンロード
https://visualstudio.microsoft.com/ja/vs/professional/ - Visual Studio Enterprise の場合は vs_enterprise.exe (有料)
それぞれの違いは下記公式リンク参照
https://visualstudio.microsoft.com/ja/vs/compare/
また、特定用途専用のVersion Visual Studio Expressもある。
-
諸々オプションの設定をして、Installを押す
OPenCVをダウンロードして展開する
-
以下のサイトからWindowsを選択して、OpenCVのソースコードのインストーラーをダウンロードする
-
ダウンロードしたファイルをクリックして、C:/を選択し、C:/にファイルを展開する
C++用torchライブラリをダウンロードして展開する
C++用torchライブラリであるLibtorchをダウンロードして展開する
- 下記リンクからLibtorchをCPU版かGPU版のDebug/release用それぞれダウンロードする
https://pytorch.org/ - ダウンロードしたzipを任意のフォルダに展開する
NVIDIAのインストールする※GPU使用の場合
- CUDA Toolkitのインストーラーをダウンロードする
https://developer.nvidia.com/cuda-downloads - インストーラーを実行して、インストールする
- cuDNNをインストールする
https://developer.nvidia.com/rdp/cudnn-archive
Visual Studioの設定・ビルド
- Visual Studio を起動し、新しいプロジェクトを作成する
- プロジェクト->モジュールの追加から.cppファイルを追加する
- プロジェクト->プロパティを押して、現在表示しているプロジェクトの設定ページを表示する
- 左上の構成からデバックかリリースを選択する
デバック環境とリリース環境を分けて設定できる - C/C++->全般を押して、追加のインクルードディレクトリをクリックして、編集を押す
- 空いているところをクリックして、追加したいヘッダーのパスをコピペして、OKを押す
C:\Program Files (x86)\OpenCV\opencv\build\include
- リンカー->全般を押して、追加のライブラリディレクトリをクリックして、編集を押す
- 空いているところをクリックして、追加したいライブラリのパスをコピペして、OKを押す
C:\Program Files (x86)\OpenCV\opencv\build\x64\vc16\lib
- 構成プロパティ->デバッグを押して、環境に下記の動的リンクライブラリのパスをコピペして、OKを押す。もしくはPCのシステムの環境変数に下記を追加
C:\Program Files (x86)\OpenCV\opencv\build\x64\vc16\bin
- 下記のOpenCVのコードを編集画面にコピペする
- 緑色の三角ボタンを押して、デバックモードでビルドする
- モードをDebugからreleaseに変更して、ビルド->ソリューションのビルド押して、リリース用exeファイルを作成する
OpenCVのC++コード
引数に入力動画を渡して、ただoutput.mp4という名前で保存するだけのプログラム。
#if _DEBUG
#pragma comment(lib, "opencv_world470d.lib")
#else
#pragma comment(lib, "opencv_world470")
#endif
#include <iostream>
#include <thread>
#include <memory>
using namespace std;
#include <opencv2/opencv.hpp>
using namespace cv;
#include "opencv2/highgui/highgui.hpp" //動画を表示する際に必要
constexpr int TIME_TO_SLEEP = 10000;
int main(int argc, const char* argv[])
{
Mat img(Size(640, 360), CV_8UC3);
Mat gray_img(Size(640, 360), CV_8UC1);
Mat gaussian_img(Size(640, 360), CV_8UC1);
Mat bin_img(Size(640, 360), CV_8UC1);
Mat canny_img(Size(640, 360), CV_8UC1);
if (argc != 2)
{
cout << "" << endl;
cout << " Error" << endl;
cout << "" << endl;
cout << " How to use : cout.exe sample.mp4" << endl;
cout << "" << endl;
cout << " argv:" << endl;
cout << " cout.exe : this program name" << endl;
cout << " sample.mp4 : input movie file path" << endl;
std::this_thread::sleep_for(std::chrono::milliseconds(TIME_TO_SLEEP));
return 0;
}
std::string VideoFile = argv[argc - 1];
VideoCapture cap;
cap.open(VideoFile);
if (!cap.isOpened())
{
std::cerr << "cannot open this movie file!" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(TIME_TO_SLEEP));
return -1;
}
int fourcc, width, height;
double fps;
width = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH); // フレーム横幅を取得
height = (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT); // フレーム縦幅を取得
fps = cap.get(cv::CAP_PROP_FPS); // フレームレートを取得
double max_frame = cap.get(CAP_PROP_FRAME_COUNT);
fourcc = cv::VideoWriter::fourcc('m', 'p', '4', 'v'); // AVI形式を指定
VideoWriter Videowriter("output.mp4", fourcc, fps * 2, cv::Size(width, height), true);
cv::Mat frame;
for (int i = 0; i < int(max_frame); i++)
{
cap >> frame;
if (frame.empty() == true) {
continue;
}
int n = (int)cap.get(cv::CAP_PROP_POS_FRAMES);
cout << n << endl;
cv::imshow("再生中", frame);
Videowriter << frame;
cv::waitKey(1);
}
std::this_thread::sleep_for(std::chrono::milliseconds(TIME_TO_SLEEP));
return 0;
}
実行
生成された.exeに入力動画をドラッグ&ドロップをクリックする
もしくは、以下のように実行する
output.exe input.mp4
Visual Studioの拡張機能でC++版Torchをビルドする
Visual Studio 拡張機能のlibtorchはversion 2019と2022のみ対応している。
- 適当なプロジェクトを開き、上部の拡張機能->拡張機能の管理を押す
- libtorchを検索して、libtorchの拡張機能をインストールする
- インストールするため、一旦すべて閉じる
- 新しいプロジェクトの作成を押す
- TorchProjectを選択する
- 作成を押して、先ほどダウンロードしたlibtorchのパスを追加する
- 作成を押す
- プロジェクト->プロパティを押して、構成プロパティ -> 全般のWindowsSDKバージョンを「10.0 (最新のインストールされているバージョン)」に変更する。
- サンプルが表示された状態で出てくるので、ビルドする。
- 実行すると以下のように表示される
CUDA is not available! Training on CPU
0.0290 0.8719 0.2656
0.1600 0.4686 0.1587
[ CPUFloatType{2,3} ]
GPU利用版
- 下記サイトに従い、NVIDIA Driver, CUDA ToolKit, cuDNN(コピペ)をインストールする
https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
- Windows SDK バージョン 10.*****がないといわれるので、下記を実行し、Windows SDKをインストールする。
"C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"
まとめ
今回は、Visual Studio C++でOpenCVおよびC++用torchライブラリLibtorchの始め方を紹介した。
参考文献