Я хочу использовать библиотеку OpenCV в своем приложении с Android Studio. Я выполнил инструкции, найденные здесь, но получаю ошибку
Конфигурация с именем default не найдена
Что может быть не так?
Я использую Android Studio 1.0 с gradle 2.2.1.
Я хочу использовать библиотеку OpenCV в своем приложении с Android Studio. Я выполнил инструкции, найденные здесь, но получаю ошибку
Конфигурация с именем default не найдена
Что может быть не так?
Я использую Android Studio 1.0 с gradle 2.2.1.
native
каталог в моем sdk
каталоге. Я что-то упустил?
Ответы:
Следующие шаги для использования Android OpenCV sdk в Android Studio. Это упрощенная версия этого ( 1 ) ответа SO.
Шаг (6) связан с тем, что студия Android ожидает, что app/src/main/jniLibs
вместо старой libs
папки будут использоваться собственные библиотеки . Для тех, кто плохо знаком с Android OpenCV, не пропустите следующие шаги
static{ System.loadLibrary("opencv_java"); }
(Примечание: для OpenCV версии 3 на этом этапе вы должны вместо этого загрузить библиотеку opencv_java3
.)OpenCV написан на C / C ++. Оболочки Java
javadocs
каталог?». Он также предлагает мне установить, android sdk 14
хотя я нацелен на устройства, которые поддерживаютandroid sdk 15
sdk
установочном каталоге в моей системе, в то время как вы говорили о каталоге, который поставляется с Android Open CV SDK
.Ok, завершил шаг 6. Где я могу включить static{ System.loadLibrary("opencv_java"); }
?
android-14
ошибка после импорта модуля на шаге 2, вам необходимо вручную отредактировать build.gradle
файл в каталоге openCV в вашем проекте, как показано на шаге 3.
Интеграция OpenCV v3.1.0 в Android Studio v1.4.1 , инструкции с дополнительными подробностями и скриншоты типа "это то, что вы должны получить".
Большая заслуга в объяснениях Kiran, Kool, 1 "и SteveLiles на opencv.org. Я добавляю этот ответ, потому что считаю, что интерфейс Android Studio теперь достаточно стабилен, чтобы работать с этим типом интеграции. Кроме того, я все равно должен написать эти инструкции для нашего проекта.
Опытные разработчики AS найдут часть этого педантизма. Этот ответ предназначен для людей с ограниченным опытом работы с Android Studio.
Создайте новый проект Android Studio с помощью мастера проектов (Меню: / Файл / Новый проект):
Пустое действие с именем MainActivity
У вас должен быть каталог cvtest1, в котором хранится этот проект. (строка заголовка Android studio показывает, где находится cvtest1, когда вы открываете проект)
Убедитесь, что ваше приложение работает правильно. Попробуйте изменить что-нибудь вроде текста «Hello World», чтобы убедиться, что цикл сборки / тестирования вам подходит. (Тестирую с эмулятором устройства API 19).
Загрузите пакет OpenCV для Android v3.1.0 и распакуйте его где-нибудь во временном каталоге. (Убедитесь, что это пакет специально для Android, а не только пакет OpenCV для Java.) Я назову этот каталог « unzip-dir ». Ниже unzip-dir у вас должен быть каталог sdk / native / libs с подкаталогами, которые начинаются с такие вещи, как arm ..., mips ... и x86 ... (по одному для каждого типа "архитектуры", на которой работает Android)
Из Android Studio импортируйте OpenCV в свой проект как модуль: Menu: / File / New / Import_Module :
Нажмите " Далее" . Вы получите экран с тремя флажками и вопросами о jar-файлах, библиотеках и параметрах импорта. Следует проверить все три. Щелкните Готово.
Android Studio начинает импортировать модуль, и вам отображается файл import-summary.txt , содержащий список того, что не было импортировано (в основном файлы javadoc), и другую информацию.
Но вы также получите сообщение об ошибке , говорящее не удалось найти цель с хэш строки «андроид-14» ... . Это происходит из-за того, что файл build.gradle в загруженном вами zip-файле OpenCV говорит о компиляции с использованием Android API версии 14, чего по умолчанию у вас нет в Android Studio v1.4.1.
Откройте диалог структуры проекта ( Меню: / Файл / Структура_проекта ). Выберите модуль «приложение», щелкните вкладку « Зависимости » и добавьте : openCVLibrary310 в качестве зависимости модуля. Когда вы выбираете Add / Module_Dependency, он должен появиться в списке модулей, которые вы можете добавить. Теперь он будет отображаться как зависимость, но вы получите еще несколько ошибок « невозможно найти-android-14» в журнале событий.
Найдите в файле build.gradle свой модуль приложения. В проекте Android есть несколько файлов build.gradle. Тот, который вам нужен, находится в каталоге cvtest1 / app, и с точки зрения проекта он выглядит как build.gradle (Module: app) . Обратите внимание на значения этих четырех полей:
Теперь в вашем проекте есть каталог cvtest1 / OpenCVLibrary310, но он не отображается в представлении проекта:
Воспользуйтесь другим инструментом, например, файловым менеджером, и перейдите в этот каталог. Вы также можете переключить представление проекта с Android на файлы проекта, и вы можете найти этот каталог, как показано на этом снимке экрана:
Внутри есть еще один файл build.gradle (он выделен на скриншоте выше). Обновите этот файл четырьмя значениями из шага 6.
Выполните повторную синхронизацию проекта, а затем очистите / перестройте его. (Меню: / Build / Clean_Project ) Он должен очищать и строить без ошибок, и вы должны увидеть много ссылок на : openCVLibrary310 на экране 0: Сообщения .
На этом этапе модуль должен появиться в иерархии проекта как openCVLibrary310 , как и app . (Обратите внимание, что в этом маленьком раскрывающемся меню я переключился обратно с Project View на Android View ). Вы также должны увидеть дополнительный файл build.gradle в разделе «Сценарии Gradle», но я считаю, что интерфейс Android Studio немного глючит, и иногда он делает это не сразу. Так что попробуйте повторно синхронизировать, очистить или даже перезапустить Android Studio.
Вы должны увидеть модуль openCVLibrary310 со всеми функциями OpenCV под java, как на этом снимке экрана:
Скопируйте каталог {unzip-dir} / sdk / native / libs (и все, что находится под ним) в свой проект Android в cvtest1 / OpenCVLibrary310 / src / main / , а затем переименуйте свою копию из libs в jniLibs . Теперь у вас должен быть каталог cvtest1 / OpenCVLibrary310 / src / main / jniLibs . Выполните повторную синхронизацию проекта, и теперь этот каталог должен появиться в представлении проекта в openCVLibrary310 .
Перейдите к методу onCreate файла MainActivity.java и добавьте этот код:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
Затем запустите ваше приложение. Вы должны увидеть такие строки в Android Monitor: (я не знаю, почему там эта строка с сообщением об ошибке)
Теперь попробуйте на самом деле использовать некоторый код openCV. В приведенном ниже примере я скопировал файл .jpg в каталог кеша приложения cvtest1 на эмуляторе Android. Приведенный ниже код загружает это изображение, запускает алгоритм распознавания краев и затем записывает результаты обратно в файл .png в том же каталоге.
Поместите этот код чуть ниже кода из предыдущего шага и измените его, чтобы он соответствовал вашим собственным файлам / каталогам.
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
Запустите ваше приложение. Ваш эмулятор должен создать черно-белое "краевое" изображение. Вы можете использовать Android Device Monitor для получения вывода или написать действие, чтобы показать его.
В Gotchas :
OpenCV error: Cannot load info library for OpenCV
2 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
что это за ошибка я сделал шаг за шагом, как вы написали.
Для всех, кто чувствовал, что они хотят убежать со всеми шагами и снимками экрана в ответах (отлично!) Выше, это сработало для меня с android studio 2.2.1
:
Создайте новый проект, назовите его как хотите и используйте значение по умолчанию (minSdkVersion 15 подойдет).
Загрузите zip-файл отсюда: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (я загрузил версию 3.2.0, но могут быть и более новые версии).
Разархивируйте zip-файл, лучше всего в папке рабочей области, но это не имеет особого значения.
Внутри Android Studio
щелкните File->New-> Import Module
и перейдите к \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
окну, затем примите все диалоговые окна по умолчанию.
В gradle
файле вашего app
модуля добавьте это в блок зависимостей:
dependencies {
compile project(':openCVLibraryXYZ')
//rest of code
}
Где XYZ - это точная версия, которую вы скачали, например, в моем случае:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Android Studio 3.4 + OpenCV 4.1
Загрузите последний zip-файл OpenCV отсюда ( последняя версия - 4.1.0) и распакуйте его в своем рабочем пространстве или в другой папке.
Создайте новый проект Android Studio обычным образом. Щелкните File->New->Import Module
, перейдите к /path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, установите имя модуля как opencv
, щелкните Next
и снимите флажки со всех параметров на экране.
Включите Project
режим просмотра файлов (режим по умолчанию Android
). В opencv/build.gradle
файле измените apply plugin: 'com.android.application'
на apply plugin: 'com.android.library'
и замените application ID "org.opencv"
на
minSdkVersion 21
targetSdkVersion 28
(согласно значениям в app/build.gradle
). Синхронизировать проект с файлами Gradle.
Добавьте эту строку в блок зависимостей в app/build.gradle
файле
dependencies {
...
implementation project(path: ':opencv')
...
}
Снова Android
выберите режим просмотра файлов. Щелкните правой кнопкой мыши app
модуль и перейдите к New->Folder->JNI Folder
. Выберите изменить расположение папки и установите src/main/jniLibs/
.
Снова Project
выберите режим просмотра файлов и скопируйте все папки из /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
в app/src/main/jniLibs
.
Снова в Android
режиме просмотра файлов щелкните правой кнопкой мыши app
модуль и выберите Link C++ Project with Gradle
. Выберите систему сборки ndk-build
и путь к OpenCV.mk
файлу /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.
path_to_unzipped_files
не должно содержать пробелов, иначе вы получите ошибку!
Чтобы проверить инициализацию OpenCV, добавьте сообщение Toast в onCreate()
метод MainActivity :
Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
Если инициализация прошла успешно, вы увидите true
сообщение Toast, иначе вы увидите false
.
application ID "org.opencv"
строку двумя строками: minSdkVersion 21
и targetSdkVersion 28
(в соответствии со значениями в файле app / build.gradle)
Это сработало для меня и было так же просто, как добавить зависимость от градиента:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
Единственное предостережение: мне пришлось использовать аппаратное отладочное устройство, так как эмуляторы рук работали для меня слишком медленно (как утверждает AVD Manager), и, как описано в README репозитория, эта версия не включает поддержку x86 или x86_64.
Вроде строится и предлагаемый тест:
static {
OpenCVLoader.initDebug();
}
выплевывает кучу результатов, которые мне нравятся.
Download
Получите последнюю готовую версию OpenCV для Android с https://github.com/opencv/opencv/releases готовую версию и распакуйте ее (например, opencv-4.4.0-android-sdk.zip).
Создайте пустой проект Android Studio
Open Android Studio. Start a new project.
Оставьте целевые настройки по умолчанию.
Используйте шаблон «Пустое действие». Назовите действие MainActivity с соответствующим макетом activity_main. Подключите свое устройство и запустите проект. Он должен быть установлен и успешно запущен, прежде чем мы продолжим.
Add OpenCV dependency
Перейдите в Файл-> Создать-> Модуль импорта.
и укажите путь к unpacked_OpenCV_package / sdk / java. Название модуля определяется автоматически. Отключите все функции, которые Android Studio предложит вам в следующем окне.
Настройте свою библиотеку build.gradle (openCVLibrary build.gradle)
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
Внедрить библиотеку в проект (приложение build.gradle)
implementation project(':openCVLibrary330')
Отображается любой, кто сталкивается с проблемой при создании jniLibs cpp .. просто добавьте ndk ..
В вашем build.gradle
repositories {
jcenter()
}
implementation 'com.quickbirdstudios:opencv:4.1.0'