くまくまの業務日誌

Markdown記法で徒然に書いてみましょう。

OpenCV sample を、Visual Studio community 2019でビルド

本日、もう一つの作業も行いました。

OpenCVは仕事で使っているのですが、使っているのは本当に、imshow()だけ、という「それは使っているうちに入らないのでは?」という状況でしたので、これから本気出して、まじめにサンプルを解析していこうと思い、まずは環境を整えることにしました。

まずはGitHubのここからサンプルを取得しました。samples/cppフォルダから始めようと思います。ただ、私の手になじんでいるのは、Visual Studioなので、まずはソリューションとプロジェクトを作らねばなりません。そして、このcppフォルダにあるサンプルソースは、1つのファイルで完結するように作られており、それぞれにmain()が存在します。つまり、作るプロジェクトは・・・軽く50以上。

50個以上のプロジェクトを作成し、環境を整えてファイルを設定していく作業を想像すると萎えます。なんとか自動でできないだろうかと考えましたが、そもそもプロジェクトファイルである、vcxprojファイルを2つ作って比較すると、違うのはソースファイル名とGUIDだけです。流石にGUIDを手で作るのは気が引ける作業ですので、ここはせっかく勉強したPowerShellを使って、プロジェクトファイルの自動生成を行うようにしました。

ファイルはここにあります。

ちなみにですが、cppフォルダにはOpenCVだけではコンパイルできないサンプルが、4つあります。これらはライブラリを追加しなければならないので、学習としては次の段階の時にやろうと思います。

それと、OpenCVWindows版DLLはGitHubの格納限界の100MBを優に超えてしまいます。GitのLFSを使用することで回避できると多くの方がWebで説明してくれていますが、私にはこの限界を突破する事ができませんでした。ここで、意気消沈。しかし、ふと思い出したのが、「NuGetで取ってくる仕組みにしてしまえば、ライブラリを格納する必要がない」という回避策。最新版のOpenCVではないですが、これで作業続行する事にします。

そして、今回妥協したのが、DLLなどの外部ライブラリは通常、「ビルド後の作業」でCOPYコマンドでターゲットにコピーする仕組みを入れるのですが、ソースが小さいのでコンパイル時間が短いため、ことごとく、作業が重複してエラーになってしまいます。今回はこういう点で時間を食うのもだんだん疲れてきたので、x64フォルダの配下にDLLとPDBを直接配置する事にしました。

と、文章を書いて矛盾に気が付きました。(^^;)
100MB超えてるPDBファイルがGitHubに格納されている・・・。 夕方には全然矛盾に気が付きませんでしたが、こうやって反省ノートを書いていると、気が付くこともあります。後でなぜうまくいっているのか?について検証します。

後は、ビルド時に出るエラーで「その関数は古い」とコンパイラに怒られるコードに対して、抑制する定義「_CRT_SECURE_NO_WARNINGS」を追加して、ターゲットすべてがコンパイルできることを確認しました。後は実行できるかでしょうか。

そして、本日の反省は、「また、masterブランチから作業してしまった」です。ブランチ切ってそっちで作業を行って、ある程度落ち着いたらmasterにマージするようにしないと、masterのログがぐちゃぐちゃになります。てか、もうなりました。近日中にmasterを再作成する予定です。

さて、今回の作業のGitHub保管リポジトリは以下となります。既に50個以上のプロジェクトが実装されている状態ですが、私同様、Visual Studioは準備できるけど、なんか手っ取り早く動作確認できるものない?をご要望でしたら、以下を検討してみて頂ければ幸いであります。

github.com