Как использовать 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