web-dev-qa-db-ja.com

Gradleを使用してopencvを使用する方法は?

Android St​​udioを使用して、Gradleビルドツールを使用してアプリを開発します。 build.gradleにOpenCVリポジトリとライブラリを挿入できません。私の.gradleファイルは以下のようなものです:

buildscript {
    repositories {
        mavenCentral()

    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'Android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.Android.support:support-v4:13.0.+'
}

Android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

プロジェクトにOpenCVを追加するにはどうすればよいですか?

59
Omer Sonmez
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'Android'

repositories {
    mavenCentral()
    maven {
        url 'http://maven2.javacv.googlecode.com/git/'
    }
}

dependencies {
    compile 'com.Android.support:support-v4:13.0.+'
    compile 'com.googlecode.javacv:javacv:0.5'
    instrumentTestCompile 'junit:junit:4.4'
}

Android {
    compileSdkVersion 14
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 14
    }
}

これは私のために働いています:)

7
Omer Sonmez

これはAndroid St​​udioで非常に簡単に行えます。

以下の手順に従って、プロジェクトにOpen CVをライブラリとして追加します。

  1. プロジェクトのメインディレクトリの下にlibrariesフォルダーを作成します。たとえば、プロジェクトがOpenCVExamplesの場合、OpenCVExamples/librariesフォルダーを作成します。

  2. SDK「\ OpenCV-2.4.8-Android-sdk\sdk」がある場所に移動すると、Javaフォルダーが見つかります。名前をopencvに変更します。

  3. 次に、完全なopencvディレクトリをSDKから作成したライブラリフォルダーにコピーします。

  4. ここで、opencvディレクトリに次の内容のbuild.gradleファイルを作成します

    apply plugin: 'Android-library'
    
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.Android.tools.build:gradle:0.9.+'
        }
    }
    
    Android {
        compileSdkVersion 19
        buildToolsVersion "19.0.1"
    
        defaultConfig {
            minSdkVersion 8
            targetSdkVersion 19
            versionCode 2480
            versionName "2.4.8"
        }
    
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                Java.srcDirs = ['src']
                resources.srcDirs = ['src']
                res.srcDirs = ['res']
                aidl.srcDirs = ['src']
            }
        }
    }
    
  5. アプリケーションのメインディレクトリでsettings.gradleファイルを編集し、次の行を追加します。

    include ':libraries:opencv'
    
  6. プロジェクトをGradleと同期すると、次のようになります

    screen 1

  7. プロジェクトを右クリックし、Open Module Settingsをクリックしてから、左側のリストからモジュールを選択し、アプリケーションのモジュールをクリックして、[依存関係]タブをクリックし、[+]ボタンをクリックして新しいモジュールの依存関係を追加します。

    enter image description here

  8. Module dependencyを選択します。選択するモジュールのリストを含むダイアログが開きます。 「:libraries:opencv」を選択します。

    enter image description here

  9. /app/src/main/の場所にjniLibsフォルダーを作成し、OpenCV SDKからjniLibsにある* .soファイル(armeabi、armeabi-v7a、mips、x86)を含むすべてのフォルダーをコピーします。

    enter image description here

  10. OKをクリックします。これですべてが完了し、OpenCVをお楽しみください。

129
Ajay S

OpenCV docs( 1 )によると、OpenCV managerを使用する以下の手順は、生産にOpenCVを使用する推奨方法ですが実行されます。ただし、OpenCVマネージャー( 2 )は、Google Playストアからの追加インストールです。したがって、自己完結型のapk(OpenCVマネージャーを使用しない)を好む場合、または現在development/testingフェーズにある場合は、 https:// stackoverflow。 com/a/27421494/1180117

OpenCVマネージャーを使用してAndroid St​​udioでOpenCVを使用するための推奨手順。

  1. OpenCV.orgからダウンロードしたOpenCV Android sdkを解凍します()
  2. File -> Import Moduleから、解凍されたopencvアーカイブのsdk/Javaフォルダーを選択します。
  3. インポートしたOpenCVモジュールの下のbuild.gradleを更新して、プロジェクトのbuild.gradle a)compileSdkVersion b)buildToolsVersion c)minSdkVersionおよび4)targetSdkVersionに一致する4つのフィールドを更新します。
  4. Application -> Module Settingsでモジュールの依存関係を追加し、Dependenciesタブを選択します。下部(または右)にある[+]アイコンをクリックし、Module Dependencyを選択して、インポートしたOpenCVモジュールを選択します。

最後のステップとして、Activityクラスで、以下のスニペットを追加します。

    public class SampleJava extends Activity  {

        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch(status) {
                case LoaderCallbackInterface.SUCCESS:
                    Log.i(TAG,"OpenCV Manager Connected");
                    //from now onwards, you can use OpenCV API
                    Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
                    break;
                case LoaderCallbackInterface.INIT_FAILED:
                    Log.i(TAG,"Init Failed");
                    break;
                case LoaderCallbackInterface.INSTALL_CANCELED:
                    Log.i(TAG,"Install Cancelled");
                    break;
                case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
                    Log.i(TAG,"Incompatible Version");
                    break;
                case LoaderCallbackInterface.MARKET_ERROR:
                    Log.i(TAG,"Market Error");
                    break;
                default:
                    Log.i(TAG,"OpenCV Manager Install");
                    super.onManagerConnected(status);
                    break;
            }
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        //initialize OpenCV manager
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    }
}

注:onManagerConnectedメソッドで成功コールバックを受け取った後にのみOpenCV呼び出しを行うことができます。実行中に、PlayストアからOpenCVマネージャーをインストールするように求められます(まだインストールされていない場合)。開発中にPlayストアにアクセスできない場合、またはemualtorを使用している場合は、ダウンロードしたOpenCV sdkアーカイブの下のapkフォルダーにある適切なOpenCVマネージャーapkを使用します。

長所

  • Apkサイズを約40 MB削減(アップグレードも検討)。
  • OpenCVマネージャーは、ハードウェア向けに最適化されたバイナリをインストールします。
  • OpenCVマネージャーをアップグレードすると、アプリがOpenCVのバグから救われる可能性があります。
  • 異なるアプリが同じOpenCVライブラリを共有できます。

短所

  • エンドユーザーエクスペリエンス-アプリケーションからのインストールプロンプトが気に入らない場合があります。
25
Kiran

OpenCVの統合はこのような努力であるため、事前にパッケージ化し、JCenter経由で公開しました: https://github.com/quickbirdstudios/opencv-Android

これをモジュールのbuild.gradle依存関係セクションに含めるだけです

dependencies {
  implementation 'com.quickbirdstudios:opencv:3.4.1'
}

これはプロジェクトのbuild.gradleリポジトリセクションにあります

repositories {
  jcenter()
}

Gradleインポート後にlintエラーは発生しませんが、MainActivityでこのようなOpenCVライブラリを初期化することを忘れないでください

public class MainActivity extends Activity {
    static {
        if (!OpenCVLoader.initDebug())
            Log.d("ERROR", "Unable to load OpenCV");
        else
            Log.d("SUCCESS", "OpenCV loaded");
    }
...
...
...
...
9
Malte

JavaCVを使用したくない場合、これは私のために機能します...

ステップ1-リソースのダウンロード

OpenCV Android SDKを http://opencv.org/downloads.html からダウンロードします

ステップ2-OpenCVバイナリをAPKにコピーする

Libopencv_info.soとlibopencv_Java.soをコピーします

OpenCV-2.?.?-Android-sdk -> sdk -> native -> libs -> armeabi-v7a

Project Root -> Your Project -> lib - > armeabi-v7a

Libフォルダーを圧縮して、そのZipの名前をwhatever-v7a.jarに変更します。

この.jarファイルをコピーして、プロジェクトのここに配置します

Project Root -> Your Project -> libs

依存関係セクションのプロジェクトbuild.gradleにこの行を追加します

compile files('libs/whatever-v7a.jar')

コンパイルすると、おそらく.apkが約4MB大きくなっていることがわかります。

(ARMv6もサポートしたい場合は、「armeabi」を繰り返します。おそらくもう必要ありません。)

ステップ3-Java sdkをプロジェクトに追加する

Javaフォルダーをここからコピーします

OpenCV-2.?.?-Android-sdk -> sdk

Project Root -> Your Project -> libs(.jarファイルと同じ場所);

(「Java」フォルダー名を「OpenCV」に変更できます)

この新しくコピーされたフォルダーに、典型的なbuild.gradleファイルを追加します。私はこれを使用しました:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:0.6.+'
    }
}

apply plugin: 'Android-library'

repositories {
    mavenCentral();
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            Java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

プロジェクトルートのsettings.gradleファイルで、次のように変更します。

include ':Project Name:libs:OpenCV', ':Project Name'

プロジェクトルート->プロジェクト名-> build.gradleファイルの依存関係セクションで、次の行を追加します。

compile project(':Project Name:libs:OpenCV')

ステップ4-プロジェクトでOpenCVを使用する

再構築すると、プロジェクトでOpenCVをインポートして使用できるようになります。

import org.opencv.Android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}

少しハックすればこれを知っていますが、とにかく投稿すると思いました。

9
Paito

Android St​​udioとGradleを使用してOpenCVを含むAndroid NDKアプリケーションを構築する方法に関する新しい投稿を投稿しました。より多くの情報を見ることができます here 、私は2つの方法をまとめました:

(1)Gradleタスク内でndk-buildを実行します

sourceSets.main.jni.srcDirs = []

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
    ndkDir = project.plugins.findPlugin('com.Android.application').getNdkFolder()
    commandLine "$ndkDir/ndk-build",
            'NDK_PROJECT_PATH=build/intermediates/ndk',
            'NDK_LIBS_OUT=src/main/jniLibs',
            'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
            'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

(2)外部ツールでndk-buildを実行します

パラメーター:NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1

より多くの情報を見ることができます here

7
javayhu

Android St​​udio 1.2 + OpenCV-2.4.11-Android-sdk(.Zip)でも動作します。

以下を実行してください。

1)「Android St​​udioで非常に簡単にこれを行うことができます。以下の手順に従って、プロジェクトにOpenCVをライブラリとして追加します。」で始まる回答に従ってください。 TGMCiansによる。

2)<yourAppDir>\libraries\opencvフォルダーで、新しく作成したbuild.gradleを(TGMCiansの答えのステップ4、OpenCV2.4.11-Android-sdkに適応したに変更します。 gradle 1.1.0)を使用して:

apply plugin: 'Android-library'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.1.0'
    }
}

Android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 21
        versionCode 2411
        versionName "2.4.11"
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            Java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            aidl.srcDirs = ['src']
        }
    }
}

3)"armeabi", "armeabi-v7a", "mips", "x86"ディレクトリにある* .soファイルは、(デフォルトのOpenCV-location):..\OpenCV-2.4.11-Android-sdk\OpenCV-Android-sdk\sdk\native\libs(TGMCiansの答えのステップ9)にあります。

楽しんでください、そして、これが助けたならば、ポジティブな評判を与えてください。答えに直接答えるには50が必要です(残り19):)

5
Rob

これらは、OpenCVをAndroid St​​udio 1.2で使用するために必要な手順です。

  • OpenCV をダウンロードし、アーカイブを抽出します
  • Android St​​udioでアプリプロジェクトを開きます
  • File-> New-> Import Module ...に移動します...
  • 前に抽出したディレクトリでsdk/Javaを選択します
  • モジュール名opencvに設定します
  • Nextを押し、次にFinish
  • インポートされたOpenCVモジュールの下でbuild.gradleを開き、compileSdkVersionおよびbuildToolsVersionをマシン上のバージョンに更新します
  • compile project(':opencv')をアプリのbuild.gradleに追加します

    dependencies {
        ...
        compile project(':opencv')
    }
    
  • を押してプロジェクトをGradleファイルと同期します

3

OpenCV Android SDKには、役立つコメント付きのサンプルgradle.buildファイルがあります。 https://github.com/opencv/opencv/blob/master/modules/Java/Android_sdk/build.gradle .in

//
// Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
//
// This file is located in <OpenCV-Android-sdk>/sdk directory (near 'etc', 'Java', 'native' subdirectories)
//
// Add module into Android Studio application project:
//
// - Android Studio way:
//   (will copy almost all OpenCV Android SDK into your project, ~200Mb)
//
//   Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
//   Source directory: select this "sdk" directory
//   Module name: ":opencv"
//
// - or attach library module from OpenCV Android SDK
//   (without copying into application project directory, allow to share the same module between projects)
//
//   Edit "settings.gradle" and add these lines:
//
//   def opencvsdk='<path_to_opencv_Android_sdk_rootdir>'
//   // You can put declaration above into gradle.properties file instead (including file in HOME directory),
//   // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_Android_sdk_rootdir>
//   include ':opencv'
//   project(':opencv').projectDir = new File(opencvsdk + '/sdk')
//
//
//
// Add dependency into application module:
//
// - Android Studio way:
//   "Open Module Settings" (F4) -> "Dependencies" tab
//
// - or add "project(':opencv')" dependency into app/build.gradle:
//
//   dependencies {
//       implementation fileTree(dir: 'libs', include: ['*.jar'])
//       ...
//       implementation project(':opencv')
//   }
//
//
//
// Load OpenCV native library before using:
//
// - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
//   It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
//
// - use "System.loadLibrary("opencv_Java3")" or "OpenCVLoader.initDebug()"
//   TODO: Add accurate API to load OpenCV native library
//
//
//
// Native C++ support (necessary to use OpenCV in native code of application only):
//
// - Use find_package() in app/CMakeLists.txt:
//
//   find_package(OpenCV 3.4 REQUIRED Java)
//   ...
//   target_link_libraries(native-lib ${OpenCV_LIBRARIES})
//
// - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
//   Documentation about CMake options: https://developer.Android.com/ndk/guides/cmake.html
//
//   defaultConfig {
//       ...
//       externalNativeBuild {
//           cmake {
//               cppFlags "-std=c++11 -frtti -fexceptions"
//               arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
//           }
//       }
//   }
//
// - (optional) Limit/filter ABIs to build ('Android' scope of 'app/build.gradle'):
//   Useful information: https://developer.Android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
//
//   splits {
//       abi {
//           enable true
//           reset()
//           include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
//           universalApk false
//       }
//   }
//

apply plugin: 'com.Android.library'

println "OpenCV: " + project.buildscript.sourceFile

Android {
    compileSdkVersion 27
    //buildToolsVersion "27.0.3" // not needed since com.Android.tools.build:gradle:3.0.0

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['native/libs']
            Java.srcDirs = ['Java/src']
            aidl.srcDirs = ['Java/src']
            res.srcDirs = ['Java/res']
            manifest.srcFile 'Java/AndroidManifest.xml'
        }
    }
}

dependencies {
}
2
W1M0R

OpenCV SDKからJavaプロジェクトをAndroid St​​udio gradleプロジェクトにインポートし、 https://github.com/ctodobom/OpenCV-3.1で利用可能にしました。 .0-Android

Jitpack.ioサービスのおかげで、build.gradleファイルに2行追加するだけでプロジェクトに含めることができます。

2
allgood

AndroidManifest.xmlファイルには、次のダイアログボックスが表示されますが、次のアクセス許可と機能が必要です。

「お使いのデバイスはカメラをサポートしていない(またはロックされているようです。アプリケーションは終了します)

  <uses-permission Android:name="Android.permission.CAMERA"/>

    <uses-feature Android:name="Android.hardware.camera" Android:required="false"/>
    <uses-feature Android:name="Android.hardware.camera.autofocus" Android:required="false"/>
    <uses-feature Android:name="Android.hardware.camera.front" Android:required="false"/>
    <uses-feature Android:name="Android.hardware.camera.front.autofocus" Android:required="false"/>
1
Swadesh

OpenCV、Android St​​udio 1.4.1、gradle-experimentalプラグイン0.2.1

他の答えはどれも私を助けませんでした。これが私のために働いたものです。 opencvのtutorial-1サンプルを使用していますが、プロジェクトでNDKを使用するので、gradleプラグインとは異なる構造を持つ gradle-experimental プラグインを使用しています。

Androidスタジオをインストールし、Android NDKをAndroid SDKマネージャー経由でインストールし、 OpenCV Android SDK をインストールする必要があります。ダウンロードして解凍しました。

これは、コンパクトでありながら完全な状態を保つために、bashスクリプトの塊になっています。 IDEの進化に伴い、IDE内の命令が廃止されたという大きな問題があったため、すべてコマンドラインにもあります。

まず、OpenCV SDKのルートディレクトリの場所を設定します。

export OPENCV_SDK=/home/user/wip/OpenCV-2.4.11-Android-sdk
cd $OPENCV_SDK

Gradleビルドファイルを作成...

まずOpenCVライブラリ

cat > $OPENCV_SDK/sdk/Java/build.gradle <<'==='


apply plugin: 'com.Android.model.library'
model {
    Android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with {
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        }
    }

    Android.buildTypes {
        release {
            minifyEnabled = false
        }
        debug{
            minifyEnabled = false
        }
    }
   Android.sources {
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.Java.source.srcDirs +=  "src"
   }

}


===

次に、チュートリアルサンプルに、ライブラリのラベルの付け方と場所を伝えます。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'==='


include ':openCVLibrary2411'
project(':openCVLibrary2411').projectDir = new File('../../sdk/Java')


===

チュートリアル用のビルドファイルを作成します。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle <<'==='


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle-experimental:0.2.1'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.Android.model.application'

model {
    Android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with {
            applicationId = "org.opencv.samples.tutorial1"
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        }
    }

    Android.sources {
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.Java.source.srcDirs +=  "src"
    } 

    Android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
        debug {
             minifyEnabled = false
        }
    }
}

dependencies {
    compile project(':openCVLibrary2411')
}


===

ビルドツールのバージョンを正しく設定する必要があります。インストールしたものを確認する簡単な方法を次に示します。 (Android SDK Managerを介して他のバージョンをインストールできます)。 23.0.2がない場合は、buildToolsVersionを変更します。

echo "Your buildToolsVersion is one of: "
ls $Android_HOME/build-tools

最初の行の環境変数をバージョン番号に変更します

REP=23.0.2 #CHANGE ME
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/sdk/Java/build.gradle
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle

最後に、正しいgradleラッパーをセットアップします。これを行うには、Gradleにクリーンディレクトリが必要です。

pushd $(mktemp -d)

gradle wrapper --gradle-version 2.5

mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd

これで準備は完了です。これで、Android St​​udioを使用してこのディレクトリを参照し、プロジェクトを開くことができます。

次のコマンドを使用して、コマンドラインでチュートリアルを作成します。

./gradlew assembleDebug

Apkをビルドし、。/ build/outputs/apkに配置する必要があります

0
hauptmech