へっぽこ元ロボコニスト

ロボコンに燃え尽きた自分が日々の出来事を書くだけのブログです twitter:@mozyanari_tech

MENU

2019/4/28(UnityにOpenCVSharp3を導入)


スポンサーリンク

GW中はタケノコ掘り

 

UnityでOpenCVを使いたくて有志の方が制作したopencvsharp3を導入しました

 

schima.hatenablog.com

ネットを参考にしながらやってみましたが、エラーが発生したのでそれに関して書いておきます

 

Unityのバージョンは,Unity 2018.2.21f1 (64-bit)です

 

  • UnityにNuGetForUnity.1.1.0をインポート

以下のリンクから.unitypackageを取得します

自分が行ったときは,NuGetForUnity.1.1.0.unitypackageでした

github.com

取得した.unitypackageをunityにインポートします

 

  • OpenCVSharp3をunityへインポート

そのあと,以下のリンクに従ってOpenCVSharp3を追加します

qiita.com

 

インポートすると以下のようなAssets/Packagesが入ります

今回インポートしたOpenCVSharp3のバージョンは4.0.0でした

(NuGetはNuGetForUnity.1.1.0.unitypackageをインポートしたときのものです)

f:id:masanari7430:20190428173513p:plain

そうすると,Matなどに代表されるOpenCVの標準的なライブラリが使えるようになると思います

さっきの参考にしたページをみて試しに適当なスクリプトを作るとMatが使えるようになっているはずです

 

  • ArUcoなどの機能追加

自分がしたいのはArUcoでARマーカを認識することです

なので,以下のブログを参考にしてスクリプトを書いてみました

kobazlab.main.jp

 

けど,使おうとしたら以下のようなエラーが出ました

 

DllNotFoundException: OpenCvSharpExtern
OpenCvSharp.NativeMethods.LoadLibraries (IEnumerable`1 additionalPaths)
OpenCvSharp.NativeMethods..cctor ()
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for OpenCvSharp.NativeMethods
OpenCvSharp.VideoCapture..ctor (Int32 index)
Rethrow as OpenCvSharpException: Failed to create VideoCapture
OpenCvSharp.VideoCapture..ctor (Int32 index)
webcam.Start () (at Assets/Scripts/webcam.cs:24)

 

f:id:masanari7430:20190428214852p:plain

OpenCvSharpExtern.dllが無いようです

 

というわけで,もしNuGetForUnityを使わずにOpenCVSharp3を入れるとどういうファイル構成になるかを調べるために以下のページからバージョン4.0.0のOpenCVSharp3をダウンロードしました

github.com

この時,x64の64ビットとx86の32ビットがありますが,Unityのバージョンに合わせてダウンロードしてください

つまり,UnityのバージョンとOpenCVのバージョンを合わせてダウンロードする必要があります

(もし,バージョン違いを入れるとエラー出ます)


そして,Unity経由で入るファイルと,製作者の人が出してるソースファイルを見るとOpenCvSharpExtern.dllが足りませんでした

f:id:masanari7430:20190428215442j:plain

なので,これをドラッグ&ドロップでAssets/Packages/OpenCV..../libにOpenCvSharpExtern.dllをドラッグ&ドロップで入れます

 

そうするとエラーがなくなりました

 

これで公式のOpenCVインストーラを使うことなくOpenCVをUnityに導入することができたはずです

 

次はこれを使って画像処理をしていきます