Windows 10 OpenCV4.5 + Contribution モジュール + GStreamerでYolov3 Darknetサンプルコードを実行する

# Windows 10でOpenCV Darknet Yolov3を使うサンプルコード
参考になる[記事がこちら](https://funvision.blogspot.com/2020/04/simple-opencv-tutorial-for-yolo-darknet.html )にあったので準備していたら、最新の環境 OpenCV 4.5 + GStreamer 1.0 1.19.3での構築で若干違っていたので記事にしておきます。

# 目的
Yolov3をCUDAなしの環境 Inten Core i5ノートPCで試すためサンプルコードを調べていて、良い記事がありました。

# 準備
* [OpenCV 4.5.5] (https://opencv.org/opencv-4-5-5/ ) ソース
* [opencv_contrib] (https://github.com/opencv/opencv_contrib ) ソース
* CMake3.18.2
* Visual Studio 2019
* GStreamer 1.0  MSVC 64-bit (VS 2019, Release CRT)
  [1.18.5 runtime installer] (https://gstreamer.freedesktop.org/data/pkg/windows/1.19.3/msvc/gstreamer-1.0-msvc-x86_64-1.19.3.msi ) , 
  [1.18.5 development installer](https://gstreamer.freedesktop.org/data/pkg/windows/1.19.3/msvc/gstreamer-1.0-devel-msvc-x86_64-1.19.3.msi )

私の場合、VisualStudoi 2019とCMake guiはすでにインストールしてあったので実際は以下のファイルをダウンロードしました。
>![dn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/12f6a50b-d3c0-53a2-5523-0e47d52fb114.png)

上記ファイルをダウンロードしたら、Visual Studio 2019、CMake、GSStreamer(ランタイム、開発環境共に)インストールします。

## GStreamerのパスを環境変数に追加
*これが必要かどうかは、不明です。記事の手順に沿って設定しました。
![env.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/05ef1f9a-6091-0d95-29db-a7f28b38d729.png)

##O penCVソースの展開
Opencv-4.5.5.zip を展開しD:\OpenCV-4.5.5フォルダーに移動、さらに展開した opencv_contrib-4.x.zipもD:\OpenCV-4.5.5フォルダーに移動しました。
![opencv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/5e8d466e-23be-ddfa-3c36-1c0b85a6252f.png)
  
** ここで一旦、PCを再起動します。 **

## CMakeでOpenCVをGStreamer付でコンパイル
CMakeでソースとビルドパスを設定します。コンパイルはx64です。
![cmake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/78e8c900-4700-9007-9ee2-ad31fb3d2268.png)

### WITH_GSTREAMERをチェック
![cmake1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/b450e1cb-1a4b-0b80-599b-2d02c500602d.png)
###GSTREAMERパスの設定確認
![cmake2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/be86023b-657e-f2b9-5598-5d3f5a1523af.png)

### OENCV_EXTRA_MODULES_PATHパスの設定
![cmake3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/edc9e9d6-f321-d5b5-7b40-09fd57cfb984.png)

### [Generate]ボタンを押して、shファイルを生成
エラーがないこと、GStreamerが組み込まれていることを確認します。
![cmake4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/4527d061-8264-2556-6b32-17d3d9b6a010.png)

# VisualStudio でビルド
プロジェクトを *x64* に変更し、ビルドを実行します。
![vc1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/2be9d3bf-1537-9efb-6fad-a16fa223f9d8.png)

## エラーへの対応
2つのエラーが発生しました。１つは、objに関するもの、1つはlnk

```ruby:qiita.rb
1>   ライブラリ D:/opencv-4.5.5/build/lib/Release/opencv_videoio455.lib とオブジェクト D:/opencv-4.5.5/build/lib/Release/opencv_videoio455.exp を作成中
1>cap_gstreamer.obj : error LNK2019: 未解決の外部シンボル __imp_gst_audio_info_from_caps が関数 "public: bool __cdecl cv::GStreamerCapture::grabAudioFrame(void)" (?grabAudioFrame@GStreamerCapture@cv@@QEAA_NXZ) で参照されました
1>D:\opencv-4.5.5\build\bin\Release\opencv_videoio455.dll : fatal error LNK1120: 1 件の未解決の外部参照
```

## CMakeに戻り、BUILD_opencv_objc_bindings_generatorのチェックを解除します。
![cmake-err1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/85496f3f-0462-f468-71e3-972233068573.png)

再度[Generate]ボタンでshを生成します。

## VisualStudioに戻り、更新されたプロジェクトファイルを再読み込み
![vc3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/529a469f-2f8b-fd4a-7802-19a1131a60e7.png)

## Linkエラーの対応
GStreamerライブラリのgstaudio-1.0.libを追加します。追加するソリューションは、エラーを表示している opencv_videoio です。

![vc4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/05f7e3ee-8145-7c14-8439-dfd7611d566d.png)


ビルドを実行します。
今回は、エラーなく終了すると思います。

# OpenCVのインストール
ビルドに成功したら、CMakeTargetsのINSTALLを選択し、ビルドを実行することでインストールが実行されます。
![vc5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/0e41a202-4615-12d1-e549-704a6c9fb9dc.png)


/Debugでも同様にビルドと、インストールを実行したら、環境の準備が完了です。
私の環境では、D:\opencv-4.5.5\build\install にインストールされました。

![vc6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568972/c5619602-b856-b6d8-2d52-fa192f63b2ea.png)