Unity+UnrealEngine4+Blog.

UnityやUnrealEngine4とかについて学習したことを書いてます

OpencCVSharpをUnityへ入れてONNXフォーマットを読み込む。あと画像検出のあれこれ

onnxをUnityで読み込むためにOpencCVSharpを使った際にエラーが出たため記録!

 

★バージョンなど

Unity 2018.4.10f1

Opencvsharp4

win10

 

★読み込めたonnx

・tiny-yolo2.onnx

・vgg16-7.onnx

 注意:onnxは読み込めるものと読み込めないものがある。読み込めないもののほうが多い

 

nugetからOpencCVSharpをUnityへ入れるので、

まずは下からnugetパッケージをダウンロードします。

github.com

f:id:nabesi777:20200504142158p:plain

 

パッケージをUnityへインポートすると上部メニュバーへNuGetが表示されます。

f:id:nabesi777:20200504142337p:plain

 

ManageNugetPackagesを開いて

f:id:nabesi777:20200504142356p:plain

 

OpenCVSharp4を検索してinstall

f:id:nabesi777:20200504142840p:plain

 

簡単なコードを書いてちゃんと動くか確認すると

f:id:nabesi777:20200504143202p:plain

 

DllNotFouundException エラーが出ます。OpenCvSharpExternがないようです。

f:id:nabesi777:20200504143305p:plain

 

なので本物のNugetよりOpenCvSharpExtern.dllを別途落とす必要があります。

(nugetへ登録してない場合は登録が必要です)

 

下のページからOpenCvSharp4.runtime.winのパッケージをダウンロードします。

(このときUnityに落としたOpecCVのバージョンにあったものを落とすように注意します)

www.nuget.org

 

 

OpecCVのバージョンは下なので

f:id:nabesi777:20200504143756p:plain

 

下を選択

f:id:nabesi777:20200504143854p:plain

 

画面右側のDownload packageからダウンロード(Infoの一番下)

 

f:id:nabesi777:20200504143941p:plain

 

デスクトップでもどこでもいいので適当にフォルダを作り、その中へ入れて拡張子をZipにリネームして解凍します。

f:id:nabesi777:20200504144153p:plain

 

OpenCvSharpExtern.dllはruntimes>win-x64>nativeに入ってるので

このままUnityへドラッグアンドドロップで下の階層へ入れます。

f:id:nabesi777:20200504144554p:plain

f:id:nabesi777:20200504144527p:plain

 

これで再度テスト!先ほどのエラーが出なくなったらとりあえずOpencvsharpのインストールができました。

 

★以下よりonnxの参考

いろいろな検出器モデルのonnxフォーマットがダウンロードできるページ

github.com

 

ダウンロードしたらドラッグアンドドロップでUnityへ入れることができます。

適当なフォルダを作って入れた図

f:id:nabesi777:20200504145039p:plain

 

テスト!

f:id:nabesi777:20200504145427p:plain

f:id:nabesi777:20200504145525p:plain

 

読み込み成功!

f:id:nabesi777:20200504145547p:plain

 

 一応読み込みが成功したonnxモデルで検出までできましたが。使用したい検出器がこのやり方では読み込めなかったので結局OpenCvForUnity(95ドル)を使うことにしました。

 

UnityのBarracudaも試しましたが、これも多分同様です。読み込めるものと読み込めないものがありました。現状ならBarracudaよりOpencvSharpを使うほうがなんとなく良さそうですが今後に期待ですね!

 

【参考】OpenCvForUnityでの画像検出は下の記事を見ればできるはず!このやり方はweightsフォーマットを読み込みます。

qiita.com

 

★OpencvSharpの参考リンク

qiita.com

 

★UnityBarracudaサンプルプロジェクト

github.com