見出し画像

OpenCV for Unity 入門 (1) - 事始め

「OpenCV for Unity」のインストールとサンプルの実行方法をまとめました。

・Unity 2019.4.f1
・OpenCV for Unity 2.4.3

1. OpenCV for Unity

OpenCV for Unity」はUnityでOpenCVを利用するためのアセットです。PCはもちろん、iOSやAndroidなど多くのプラットフォームをサポートしています。有料で$95になります。

APIリファレンスは、次のとおりです。

2. サンプルの実行

Macでサンプルを実行します。

(1) アセットストアで「OpenCV for Unity」を購入してダウンロードおよびインポート。
プラグインはmacOSのみ選択します。

画像2

(2) メニュー「Tools → OpenCV for Unity → Set Plugin Import Settings」を選択。
(3) メニュー「Edit → Project Settings → Player → Other Settings → Configuration」の「Camera Usage Description」にカメラ用途の説明を記述。

画像6

(4) 「Assets/OpenCVForUnity/StreamingAssetsフォルダ」を「Assetsフォルダ直下」に移動。

画像1

(5) 「Assets/OpenCVForUnity/Examplesフォルダ」内の全Sceneを検索。

画像3

(5) メニュー「File → Build Settings」の「Scene In Build」に「Examples内の全Scene」をドラッグ&ドロップ。

画像4

(6) 「Build And Runボタン」で実行。

画像5

3. Q & A

Q1
アセットのサイズが大きい。
A1
OpenCVforUnityのインストール時に、不必要なプラグインを削除してください。

Q2
Webプラットフォームをサポートしますか?
A2
WebGLプラットフォームをサポートしています。

Q3
OpenCVの学び方は?
A3
OpenCV公式ドキュメントOpenCVチュートリアルを参照してください。

Q4
C++で定義されたMatクラス演算子を変換するには?
A4
Way to translation of Mat class operators defined in C++」を参照してください。

Q5
サンプル実行時に「DllNotFoundException: opencvforunity」が表示されます。
A5
プラグインの読み込みに失敗しています。セットアップ手順を確認してください。

Q6
サンプル実行時に「ArgumentException: The output Mat object has to be of the same size」と表示されます。
A6
プラグインをセットアップした後、Unityを再起動するとプラグインが正常に機能する場合があります。

Q7
サンプル実行時に「Level 'Texture2DtoMatExample' (-1) could not be loaded because it has not been added to the build settings.」と表示されます。
A7.
「Assets/OpenCVForUnity/Examplesフォルダ」の全シーンをBuildSettingsの「Scene InBuild」に追加してください。

Q8
DetectFaceExampleまたはWebCamTextureDetectFaceExampleで、顔の周囲に赤い長方形が表示されません。
A8
haarcascade_frontalface_alt.xmlの読み込みに失敗しています。StreamingAssetsフォルダが正しい位置にあるか確認してください。

Q9
iOSのApp Storeへの送信時に「Unsupported Architecture. Your executable contains unsupported architecture ‘[x86_64, i386]’.」と表示されます。
A9
サポートされていないアーキテクチャのバイナリをApp Storeに送信することは許可されていないため、送信前に不要なアーキテクチャを最終的なバイナリから「手動で」削除する必要があります。

Q2のエラーを解決の解決方法は2あります。

(1) このスクリプトを「BuildPhases→RunScript」に追加。
(2) ターミナルで以下のコマンドを実行。

// i386アーキテクチャ
lipo -remove i386 opencv2.framework/opencv2 -o opencv2.framework/opencv2

// x86_64アーキテクチャの削除
lipo -remove x86_64 opencv2.framework/opencv2 -o opencv2.framework/opencv2

// アーキテクチャのチェック
lipo -info opencv2.framework/opencv2

Q10
SIFTまたはSURFアルゴリズムを使用するにはどうすればよいですか?
A10
OpenCVForUnityに含まれるネイティブライブラリは、OPENCV_ENABLE_NONFREEフラグを無効にして構築されています。SIFTおよびSURFアルゴリズムを使用するには、OPENCV_ENABLE_NONFREEを有効にしてOPENCVライブラリを再構築します。 詳細については、ReadMe.pdfの「How to use OpenCV Dynamic Link Library with customized build settings」を参照してください。

Q11
ネイティブOpenCVのエラーコード(CVException)をキャッチする方法は?
A11
ネイティブopencvのエラーコードを表示するには、コードをUtils.setDebugMode(true)とUtils.setDebugMode(false)で囲んでください。

Utils.setDebugMode(true); ------------ Utils.setDebugMode(false);

詳しくは「[Tips] How to catch native OpenCV’s errors code (CVException handling」を参照してください。

Q12
アセットに必要な最小ファイル構成は何ですか?
A12
アセットの全てのファイルをインポートする必要はありません。サンプルシーンを試す必要がない場合の最小ファイル構成は次のとおりです。

画像7

次回



この記事が気に入ったらサポートをしてみませんか?