Как использовать OpenCV в использовании Gradle?

Я хочу использовать Android Studio для разработки приложения с использованием инструмента сборки Gradle. Я не могу вставить build.gradle OpenCV и библиотеку в build.gradle. Мой файл .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 в свой проект?

Ответ 1

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
    }
}

Это сработало для меня:)

Ответ 2

Вы можете сделать это очень легко в Android Studio.

Следуйте приведенным ниже инструкциям, чтобы добавить Open CV в проект как библиотеку.

  • Создайте папку libraries под основным каталогом проекта. Например, если ваш проект OpenCVExamples, вы должны создать папку OpenCVExamples/libraries.

  • Перейдите в папку, где есть SDK "\ OpenCV-2.4.8-android-sdk\sdk", здесь вы найдете папку java, переименуйте ее в opencv.

  • Теперь скопируйте полный каталог opencv из SDK в только что созданную папку библиотек.

  • Теперь создайте файл build.gradle в каталоге opencv со следующим содержимым

    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']
            }
        }
    }
    
  • Измените файл settings.gradle в главном каталоге приложений и добавьте эту строку:

    include ':libraries:opencv'
    
  • Синхронизируйте проект с помощью Gradle, и он должен выглядеть следующим образом

    screen 1

  • Щелкните правой кнопкой мыши на своем проекте, затем выберите Open Module Settings, затем выберите "Модули" в левом списке, нажмите на свой модуль приложений, нажмите вкладку "Зависимости" и нажмите кнопку "+", чтобы добавить новый модульной зависимости.

    enter image description here

  • Выберите Module dependency. Он откроет диалог со списком модулей на выбор; выберите ": libraries: opencv".

    enter image description here

  • Создайте папку jniLibs в каталоге /app/src/main/ и скопируйте всю папку с *.so файлами (armeabi, armeabi-v7a, mips, x86) в jniLibs из OpenCV SDK.

    enter image description here

  • Нажмите "ОК". Теперь все сделано, пойдите и наслаждайтесь OpenCV.

Ответ 3

В соответствии с документами OpenCV (1) ниже шаги с использованием OpenCV-менеджера - это рекомендуемый способ использования OpenCV для production работает. Но менеджер OpenCV (2) является дополнительной установкой из магазина Google Play. Итак, если вы предпочитаете автономный apk (не используя менеджер OpenCV) или в настоящее время на стадии разработки/тестирования, я предлагаю ответить на fooobar.com/questions/55203/....

Рекомендуемые шаги для использования OpenCV в Android Studio с менеджером OpenCV.

  • Unzip OpenCV Android sdk загружен с OpenCV.org(3)
  • В File -> Import Module выберите папку sdk/java в распакованном архиве opencv.
  • Обновить build.gradle в импортированном модуле OpenCV для обновления 4 полей в соответствии с вашим проектом build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion и 4) targetSdkVersion.
  • Добавьте зависимость модуля от 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);
    }
}

Примечание. Вы можете делать вызовы OpenCV только после того, как вы получили успешный обратный вызов по методу onManagerConnected. Во время прогона вам будет предложено установить менеджер OpenCV из магазина воспроизведения, если он еще не установлен. Во время разработки, если у вас нет доступа к магазину воспроизведения или находится на emualtor, используйте соответствующий менеджер apk OpenCV, присутствующий в папке apk в загруженном архиве OpenCV sdk.

Pros

  • Уменьшение размера Apk примерно на 40 МБ (рассмотрите также обновления).
  • Менеджер OpenCV устанавливает оптимизированные двоичные файлы для вашего оборудования, которые могут помочь ускорить работу.
  • Обновление до менеджера OpenCV может спасти ваше приложение от ошибок в OpenCV.
  • В разных приложениях может использоваться одна и та же библиотека OpenCV.

Против

  • Опыт конечных пользователей - может не понравиться приглашение на установку с помощью приложение.

Ответ 4

Если вы не хотите использовать 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

to

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

Замените папку lib вверх и переименуйте этот zip на все-v7a.jar.

Скопируйте этот .jar файл и поместите его здесь в свой проект

Project Root -> Your Project -> libs

Добавьте эту строку в свои проекты build.gradle в разделе зависимостей

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

При компиляции теперь вы, вероятно, увидите, что ваш .apk имеет размер около 4 МБ.

(Повторите для "armeabi", если вы хотите также поддерживать ARMv6, скорее всего, больше не понадобится.)

Шаг 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']
        }
    }
}

В настройках вашего корневого файла..gradle файл тоже выглядит примерно так:

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

В Project Root → Project Name → build.gradle файл в разделе зависимостей добавьте эту строку:

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

Шаг 4 - Использование OpenCV в вашем проекте

Восстановить, и вы должны иметь возможность импортировать и запускать OpenCV в своем проекте.

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

Я знаю это, если немного взломать, но я решил, что все равно отправлю его.

Ответ 5

Я опубликовал новое сообщение о том, как создать приложение Android NDK с включенным OpenCV используя Android Studio и Gradle. Более подробную информацию можно найти здесь, я подытожил два метода:

(1) запустите ndk-build внутри задачи Gradle

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

Более подробную информацию можно найти здесь

Ответ 6

Он также работает с Android Studio 1.2 + OpenCV-2.4.11-android-sdk (.zip).

Просто выполните следующие действия:

1) Следуйте за ответом, который начинается с "Вы можете сделать это очень легко в Android Studio. Для добавления OpenCV в проект в качестве библиотеки выполните следующие действия". TGMCians.

2) Измените в папке <yourAppDir>\libraries\opencv ваш вновь созданный build.gradle на (шаг 4 в ответе TGMCians, , адаптированный для 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) *.so файлы, расположенные в каталогах "armeabi", "armeabi-v7a", "mips", "x86", можно найти в разделе (по умолчанию OpenCV-location): ..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs (шаг 9 в ответе TGMCians).

Наслаждайтесь, и если это поможет, пожалуйста, дайте положительную репутацию. Мне нужно ответить 50 непосредственно на ответы (19 слева):)

Ответ 7

Поскольку интеграция OpenCV является такой попыткой, мы предварительно упаковали ее и опубликовали через JCenter здесь: https://github.com/quickbirdstudios/opencv-android

Просто включите это в раздел зависимостей build.gradle вашего модуля

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

и это в вашем проекте build.gradle раздел репозиториев

repositories {
  jcenter()
}

Вы не получите ошибку lint после импорта gradle, но не забудьте инициализировать библиотеку OpenCV, как это в MainActivity

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

Ответ 8

Это шаги, необходимые для использования OpenCV с Android Studio 1.2:

  • Загрузите OpenCV и извлеките архив
  • Откройте проект приложения в Android Studio
  • Перейдите в Файл → Создать → Модуль импорта...
  • Выберите sdk/java в каталоге, который вы извлекли до
  • Установите Имя модуля на opencv
  • Нажмите Далее, затем Готово
  • Откройте build.gradle под импортированным модулем OpenCV и обновите compileSdkVersion и buildToolsVersion до версий, которые у вас есть на вашем компьютере.
  • Добавьте compile project(':opencv') в свое приложение build.gradle

    dependencies {
        ...
        compile project(':opencv')
    }
    
  • Нажмите Проект синхронизации с Gradle Файлы

Ответ 9

Я импортировал проект Java из OpenCV SDK в проект Android Studio gradle и сделал его доступным по адресу https://github.com/ctodobom/OpenCV-3.1.0-Android

Вы можете включить его в свой проект, добавив только две строки в файл build.gradle благодаря службе jitpack.io.

Ответ 10

В файле 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"/>

Ответ 11

В 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 {
}

Ответ 12

OpenCV, Android Studio 1.4.1, gradle -experimental плагин 0.2.1

Ни один из ответов не помог мне. Вот что сработало для меня. Я использую образец учебника-1 из opencv, но я буду использовать NDK в своем проекте, поэтому я использую gradle-experimental плагин, который имеет другую структуру, чем плагин gradle.

Android-студия должна быть установлена, Android NDK должен быть установлен через Android SDK Manager, а OpenCV Android SDK должен быть загружен и распакован.

Это куски bash script, чтобы сохранить его компактным, но полным. Это также все в командной строке, потому что из-за больших проблем у меня было то, что инструкции in-IDE были устаревшими по мере разработки IDE.

Сначала установите расположение корневого каталога SDK OpenCV.

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). Измените buildToolsVersion, если у вас нет 23.0.2.

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 Studio и открыть проект.

Постройте tutoral в командной строке с помощью следующей команды:

./gradlew assembleDebug

Он должен построить ваш apk, вставив его./build/outputs/apk