Windows Visual StudioでRaspberry pi OpenCVのビルド環境を構築する
Windows Visual StudioでRaspberry pi OpenCVのビルド環境を構築します。
厳密にはクロスコンパイルではなく、Visual StudioがRaspberry Piにログインしてビルドを行います。
前提条件
Raspberry PiにOpenCVのインストールが終了していて、ビルドが通ること。
Raspberry PiにOpenCVのインストールフォルダは/usr/include
Visual Stdioは2019で動作確認
言語はC++です。
Raspberry pi側にSambaを設定する
Raspberry pi側のincludeファイルのフォルダを共有して、Visual Studio側のinclude参照先にすることにより、Intellisence等を有効します。
Raspberry pi側の端末でSambaをインストールします。
$ sudo apt-get install -y samba
共有フォルダを追加するために /etc/samba/smb.conf の末尾に下記の記述を追加します。
[usr]
path = /usr
writable = no
guest ok = yes
guest only = yes
Sambaのサービスを再起動します。
$ sudo service smbd restart
Windows側でエクスプローラからRaspberry piのIPアドレス(\192.168.1.40等)を入力して共有フォルダが出来れいれば成功です。
Windowsの共有フォルダを設定する
Visual Studioにネットワーク先のフォルダ(\\192.168.1.40\include等)を参照させると、Intellisenceは通るが、build時になぜか、「MSB4018 “MakeClCommandLine” タスクが予期せずに失敗しました。」というエラーを吐くので、対策として、共有フォルダをネットーワークドライブに割り当てておきます。
エクスプローラ→ネットワークを右クリック→ネットワークドライブの割り当てでRaspberry側の共有フォルダをネットワークドライブに割り当てておきます。
ここではXドライブに割り当てたものとして、以後説明をしていきます。
Visual Studioのプロジェクトを作成してRaspberry Piと接続する
「Raspberry Piの点滅」というプロジェクトテンプレートで作成します。
プロジェクトテンプレートの検索をRaspberryで検索するとヒットすると思います。
プロジェクトを生成すると案内文のようなガイドがでますので、これを読んでRaspberry Piとの接続設定を行います。
案内文は2回目に開くとなぜか消えていて再度開く方法がわからないので、注意してください。
一度何も手を加えていない状態でビルドして、エラーがなければ、接続や設定は成功しているでしょう。
OpenCVが使えるようにVisual Studioの設定を行う
「ツールバー→プロジェクト→【プロジェクト名】プロパティ」を開きます。
【プロジェクト名】は現在のプロジェクトの名称が入ります。
インクルードディレクトリの設定
「構成プロパティ→VC++ディレクトリ」の「インクルードディレクトリ」に共有ファイルで設定したOpenCVのインクルードディレクトリを設定します。
ここに\192.168.1.40から始まるアドレスを入れると、コンパイル時にエラーになってしまうので、前項の通りネットワークドライブに割り当てた場所を設定します。
ここでは、「X:\include\opencv4」を設定しておきます。
インクルードディレクトリにOpenCVのインクルード場所を設定することにより、ビューワ上でのエラーを解消し、Intellisenceが使用可能になります。
追加のインクルードディレクトリの設定
「構成プロパティ→C/C++→全般」の「追加のインクルードディレクトリ」にRaspberry Pi上でのOpenCVのインクルードディレクトリを設定します。
ここでは、「/usr/include/opencv4」を設定しておきます。
追加のインクルードディレクトリはVisual StudioがRaspberry Pi内でビルドするときのg++コマンドライン-Iに相当するようです。
ライブラリの依存ファイルの設定
「構成プロパティ→リンカー→入力」の「ライブラリの依存ファイル」にOpenCVのライブラリファイルを記載します。
ここでは一通り
opencv_dnn
opencv_gapi
opencv_highgui
opencv_ml
opencv_objdetect
opencv_photo
opencv_stitching
opencv_video
opencv_calib3d
opencv_features2d
opencv_flann
opencv_videoio
opencv_imgcodecs
opencv_imgproc
opencv_core
を設定します。ライブラリファイルは状況に応じて書き換えてください。
ライブラリの依存ファイルはVisual StudioがRaspberry Pi内でビルドするときのg++コマンドライン-l(小文字L)に相当するようです。
ビルドしてみる
Visual Stduio上でmain関数を適当にOpenCV用のコードを書きかえてビルドしてみます。
#include <iostream>
#include <opencv2/opencv.hpp>
int main(void)
{
cv::Mat m = cv::imread("sample.png", 1);
cv::namedWindow("sample", cv::WINDOW_AUTOSIZE);
cv::imshow("sample", m);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
「ツールバー→ビルド→ソリューションのビルド」を実行してエラーがなければRaspberry Pi上にビルド結果が保存されます。
ビルドしたプロジェクトはデフォルトでRaspberry Pi上の/home/pi/projects/【プロジェクト名】にあります。
さらに実行ファイルは/home/pi/projects/【プロジェクト名】/bin/ARM/Debugにありますので、sample.pngを同ディレクトリに配置して、画像が表示されれば成功です。
作成:松林雄一