2017-11-20 19 views
1

私はユニティプロジェクトでOpenCVのを使用する方法を探していますし、私のターゲットプラットフォームは、Androidデバイスです。OpenCVの+のAndroid +ユニティ

私はUnityアセットストアにいくつかの資産が存在しますが、私はを持っていません。はあまりにも高価だと思っています。

thisチュートリアルを使用してdllでOpenCVをプリコンパイルすることで、UnityでC++ネイティブplugginsとして使用することができますが、dllはWindowsデスクトップを意味するため、Android用プロジェクトを構築するのにはあまり役に立ちません。

私はopencv jarアーカイブも見つけました。Unityに簡単にインポートできることは分かっていますが、次のステップを行う方法はわかりません。つまり、Unity C#スクリプトからOpenCVのものにアクセスする方法です。だから、

、誰もがAndroidのにビルドのユニティエディタでのOpenCVを使用していても、ハローダミー世界のプロジェクトを構成する方法を知っている、あるいはヒントを持っている場合、私はそれについてどのに関する情報を取るだろう。

ありがとうございます。

PS:私はこの質問が漠然としていることを知っていますが、GoogleでLMGFYの質問ではないと私に信頼しています。このような質問や本当の答えはありませんので、 。

UPDATE

thisチュートリアルを使用して、私は、Android Studioを使用してAndroidのためのOpenCVを構築するために管理し、それでも私は、C#のスクリプトからOpenCVのを使用する方法がわかりません。たとえば、cv :: Matを作成する方法は?

それでは、私が行うために管理:

  • ビルドのOpenCVと(Javaからなる)のAndroid Studioを使用して、いくつかのネイティブコードを実行します。
  • Unity native example(1つのC関数)を作成し、C#のスクリプトから呼び出します。

しかしOpenCV依存関係のあるC++コードを作成してこのコードをC#スクリプトから呼び出す方法はまだ分かりません。

+0

ない-1が、実際には1、と私は前にそれ年で作業しようとしたときのみ利用可能解が支払われます。私は団結世界の現在の状況は何もしませんが、私の大学は同じ仕事をしたいと思います。私は彼が箱から出て、あなたの自己を団結して外に出ることを勧めます。 –

+0

私は最終的にそれを行うことができた、それは最後に複雑ではない。誰かが興味を持っていれば後で回答を投稿しますが、良いニュースは簡単にできることです。 –

+0

"それは簡単に行うことができます"その後、答え/ Tutをステップバイステップで共有してください。お返事ありがとうございました –

答えて

1

だから私は最終的にそれが仕事を得るために管理!!!!!!!!!! =)

私はそれがここに私のために働いた道を掲示しています。ですから、私はVisual StudioでOpenCVへのリンクを持つ.so C++ライブラリをビルドするしかありませんでした。 Unityでこのライブラリをインポートし、.soライブラリで定義された非常に簡単なAndroidアプリケーション呼び出し関数を作成します。 Android携帯端末でアプリを実行します。使用

構成:Android用

  • ユニティ2017.2.0f2
  • のVisual Studio 2017
  • OpenCVの3.3.1。 OpenCV websiteからopencv-3.3.1-android-sdk.zipダウンロード可能。
  • のAndroidスマートフォン:テストの手順は、私は私のために働い説明しますが、あなたは上の別のCPUを持っている場合、それはあなたのために異なる場合がありますことをご注意

レノボPhab 2プロ(Googleのタンゴ電話)上とHTC 10あなたのAndroidデバイス(ARMの代わりにARM64用にビルドする必要がありますが、実際にはこれらの手順は単なる例に過ぎません)。

あなたはすでにAndroid SDK、NDK、Unityがコンピュータにインストールされていると仮定し、UnityでAndroidアプリを構築することができます。

STEP 1:テンプレートに行く2017年

  • ファイル>新規>プロジェクト

左側のドロップダウンメニューから、Visual StudioにC++のAndroidライブラリを作成する>のVisual C++>クロスプラットフォーム> Androidを選択し、「ダイナミック共有ライブラリ(Android)」を選択します。 (VS2017でAndroid用に構築できるVSツールをインストールする必要があるかもしれません)。この例では、デフォルトの "SharedObject1"という名前を保持します。 (次のデバッグ/リリースのドロップダウンメニューに) "ソリューションプラットフォーム" で

New Project Selection

は、 "ARM" を選択します。私はあなたがリリースでビルドすることをお勧めしますが、ここではワークフローがまったく同じであるのでデバッグに固執します。

enter image description here

STEP 2:Android用のOpenCVと、このC++のAndroidプロジェクトをリンクします。

  • あなたは(あなたがこの場所にファイルを保持する必要がありますので、それにもかかわらず、場所を選択して、覚えて)好きな場所opencv-3.3.1-android-sdk.zipを抽出します。 "apk"、 "samples"、 "sdk"という3つのサブフォルダを持つフォルダが必要です。
  • Visual Studioで、[プロジェクト]> [SharedObject1のプロパティ]に移動します。設定では、 "すべての設定"を選択し(デバッグとリリースの両方に適用されるように)、プラットフォームは "ARM"を選択します。次に:
    • C/C++では、OpenCVのインクルードファイルへの完全パスを「追加インクルードディレクトリ」に追加します。このパスはC:\ Path-to-OpenCV-android-sdk \ sdk \ native \ jni \ includeです。
    • リンカー>全般の下で、OpenCVのライブラリへのフルパスを「追加ライブラリディレクトリ」に追加します。このパスはC:\ Path-to-OpenCV-android-sdk \ sdk \ native \ libs \ armeabi-v7aです。
    • リンカ>入力の下で、OpenCVのライブラリファイルへのフルパスを「追加の依存関係」に追加します。このパスはC:\ Path-to-OpenCV-android-sdk \ sdk \ native \ libs \ armeabi-v7a \ libopencv_java3.soです。

あなたがそれらを設定する方法を知っていれば代わりにフルパスで、あなたは環境変数を使用できます。ここでは説明しません。

STEP 3:それ

ShareObject1.h

extern "C" 
{ 
    namespace SharedObject1 
    { 
     float Foopluginmethod(); 
    } 
} 

ShareObject1.cpp

#include "SharedObject1.h" 
#include <opencv2\core.hpp> // use OpenCV in this C++ Android Library 

extern "C" 
{ 
    float SharedObject1::Foopluginmethod() 
    { 
     cv::Mat img(10,10,CV_8UC1); // use some OpenCV objects 
     return img.rows * 1.0f;  // should return 10.0f 
    } 
} 
を私たちのライブラリのいくつかのC++/OpenCVのコードを記述し、構築するための時間

次に、ライブラリをビルドします。ビルド>ビルドソリューション。 「ファイルが見つかりませんblablabla」のようなエラーがある場合は、ステップ2で完全なパスを入れていることを確認するか、環境変数を確認してください。あなたが他のエラーを持っているなら、私は知らない、コメントで尋ねる。

これは、Path-to-your-VS-Project \ SharedObject1 \ ARM \ Debug(またはRelease)の下にlibSharedObject1.soファイルを生成しているはずです。

STEP 4:あなたが望むようにそれを新しいユニティプロジェクトを作成し、名前ユニティ

  • に行きましょう。
  • 新しいシーンを作成して保存します。
  • [ファイル]> [ビルド設定]をクリックします。 Platformの下でAndroidを選択し、 "Plateformを切り替える"をクリックします。
  • プレーヤーの設定をクリックします。 「その他の設定」で、パッケージ名を現時点での気分に変更します(Unityはデフォルト値が気に入らない)。デバイスフィルタに「ARMv7」を選択します。
  • シーンをビルドに追加します。

シーン内でメインカメラを選択し、「CallNativeCode」という名前の新しいC#スクリプト「Add Component」に「CallNativeCode」>「New Script」>「Create And Add」と入力します。インスペクタで、クリアフラグで「ソリッドカラー」を選択し、暗い色を入れます(これはクイックデモ用です)。

CallNativeCode.cs資産フォルダの下

using UnityEngine; 
using System.Collections; 
using System.Runtime.InteropServices; 

public class CallNativeCode : MonoBehaviour 
{  
    [DllImport("SharedObject1")] 
    private static extern float Foopluginmethod(); 

    void OnGUI() 
    { 
     // This Line should display "Foopluginmethod: 10" 
     GUI.Label(new Rect(15, 125, 450, 100), "Foopluginmethod: " + Foopluginmethod()); 
    } 
} 

は、「プラグイン」(スペルが重要です)という名前のサブフォルダを作成し、プラグインの下に他のサブフォルダが「アンドロイド」と呼ばれます。このフォルダに、libSharedObject1.solibopencv_java3.soのファイルをコピーします(これらの2つのファイルへのパスは、ステップ2と3にあります)。ユニティ・エディタでUnity Editor

選択libSharedObject1.soとインスペクタでプラグインの選択plaformsが唯一のAndroidをチェックし、CPUはのARMv7であるとしていることを確認:だから、あなたはそのような何かを持っている必要があります。 libopencv_java3.soについても同じ操作を行います。

これで、アプリを携帯電話でビルドして実行して楽しむことができます。 ;-)

これは単なるダミーアプリケーションですが、正しいフレーズを表示します。 =)つまり、Android UnityのアプリケーションでOpenCV C++コードを呼び出すことができました。より複雑なOpenCV C++コードに関しては、これはここでは話題ではなく、あなたの創造性を発揮させるときです。

ScreenShot of what you should have