Я хочу использовать библиотеку OpenCV в своем приложении с Android Studio. Я выполнил инструкции, найденные здесь, но получаю ошибку
Конфигурация с именем default не найдена
Что может быть не так?
Я использую Android Studio 1.0 с gradle 2.2.1.
android
opencv
android-studio
gradle
Бартош Бялецки
источник
источник
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
2java.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(); }
выплевывает кучу результатов, которые мне нравятся.
источник
Получите последнюю готовую версию 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. Подключите свое устройство и запустите проект. Он должен быть установлен и успешно запущен, прежде чем мы продолжим.
Перейдите в Файл-> Создать-> Модуль импорта.
и укажите путь к 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'
Больше информации
источник