OpenCV в Android Studio
Я хочу использовать библиотеку OpenCV в своем приложении с Android Studio. Я выполнил инструкции, найденные здесь, но я получаю сообщение об ошибке
Конфигурация с именем 'default' not found
Что может быть неправильным?
Я использую Android Studio 1.0 с gradle 2.2.1.
Ответы
Ответ 1
Ниже приведены шаги для использования Android OpenCV sdk в Android Studio. Это упрощенная версия этого ответа (1).
- Загрузите последнюю версию OpenCV sdk для Android из OpenCV.org и распакуйте zip файл.
- Импортировать OpenCV в Android Studio, из файла → Создать → Модуль импорта, выберите папку sdk/java в распакованном архиве opencv.
- Обновить build.gradle в импортированном модуле OpenCV для обновления 4 полей в соответствии с вашим проектом build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion и d) targetSdkVersion.
- Добавить зависимость модуля от приложения → Настройки модуля и выберите вкладку "Зависимости". Нажмите "+" внизу, выберите "Dependency Module" и выберите импортированный модуль OpenCV.
- Для Android Studio v1.2.2 для доступа к настройкам модуля:
в представлении проекта щелкните правой кнопкой мыши зависимый модуль
- > Открыть настройки модуля
- Скопировать папку libs под sdk/native в Android Studio под приложением /src/main.
- В Android Studio переименуйте скопированный каталог libs в jniLibs, и мы закончили.
Шаг (6) заключается в том, что Android-студия ожидает родные библиотеки в app/src/main/jniLibs
вместо старой libs
папки. Для тех, кто новичок в Android OpenCV, не пропустите ниже шагов
- include
static{ System.loadLibrary("opencv_java"); }
(Примечание: для OpenCV версии 3 на этом этапе вы должны вместо этого загрузить библиотеку opencv_java3
.)
- Для шага (5), если вы игнорируете любые платформы, такие как x86, убедитесь, что ваше устройство/эмулятор не находится на этой платформе.
OpenCV написан на C/С++. Оболочки Java
- Android OpenCV SDK. OpenCV.org поддерживает оболочку Java Java. Я предлагаю этот вариант.
- OpenCV Java - OpenCV.org поддерживает автоматически созданный рабочий стол Java-оболочки.
- JavaCV. Популярная оболочка Java, поддерживаемая независимыми разработчиками. Не для Android. Эта библиотека может выйти из синхронизации с более новыми версиями OpenCV.
Ответ 2
Интеграция OpenCV v3.1.0 в Android Studio v1.4.1, инструкции с дополнительными подробностями и скриншоты типа "что-бы вы должны" получить.
Большая часть кредитов принадлежит Kiran, Kool, 1 "и SteveLiles на opencv.org за их объяснения. Я добавляю этот ответ, потому что я считаю, что интерфейс Android Studio теперь достаточно стабилен, чтобы работать с этим типом а также я должен написать эти инструкции в любом случае для нашего проекта.
Опытный А.С. разработчики найдут некоторые из этих педантичных. Этот ответ предназначен для людей с ограниченным опытом работы в Android Studio.
-
Создайте новый проект Android Studio с помощью мастера проекта (Меню:/Файл/Новый проект):
- Назовите его "cvtest1"
- Форм-фактор: API 19, Android 4.4 (KitKat)
-
Пустое действие с именем MainActivity
У вас должен быть каталог cvtest1, в котором хранится этот проект. (строка заголовка студии Android показывает, где cvtest1 при открытии проекта)
-
Убедитесь, что ваше приложение работает правильно. Попробуйте изменить что-то вроде текста "Hello World", чтобы подтвердить, что цикл сборки/тестирования подходит для вас. (Я тестирую эмулятор устройства API 19).
-
Загрузите пакет OpenCV для Android v3.1.0 и разархивируйте его в каком-нибудь временном каталоге. (Убедитесь, что это пакет специально для Android, а не только для пакета OpenCV для Java.) Я назову этот каталог "unzip-dir". Ниже unzip-dir вы должны иметь каталог sdk/native/libs с подкаталогами, которые начинаются с такие вещи, как рука..., mips... и x86... (по одному для каждого типа "архитектуры" Android работает)
-
Из Android Studio импортируйте OpenCV в свой проект как модуль:
Меню:/File/New/Import_Module:
- Исходный каталог: {unzip-dir}/sdk/java
- Имя модуля: Студия Android автоматически заполняет это поле с помощью openCVLibrary310 (точное имя, вероятно, не имеет значения, но мы пойдем с этим).
-
Нажмите дальше. Вы получаете экран с тремя флажками и вопросами о банках, библиотеках и опциях импорта. Все три должны быть проверены. Нажмите "Готово".
Android Studio начинает импортировать модуль, и вам будет показан файл import-summary.txt, в котором есть список того, что не было импортировано (в основном файлы javadoc) и другие фрагменты информации.
![введите описание изображения здесь]()
Но вы также получите сообщение об ошибке, в котором не удалось найти цель с хеш-строкой 'android-14'.... Это происходит потому, что файл build.gradle в загруженном zip файле OpenCV говорит, что он компилируется с использованием API Android версии 14,
который по умолчанию у вас нет с Android Studio v1.4.1.
![введите описание изображения здесь]()
-
Откройте диалог структуры проекта (меню:/File/Project_Structure). Выберите модуль "приложение", перейдите на вкладку "Зависимости" и добавьте: openCVLibrary310 в качестве зависимости от модуля. Когда вы выбираете Add/Module_Dependency, он должен появиться в списке модулей, которые вы можете добавить.
Теперь он будет отображаться как зависимость, но вы получите еще несколько ошибок can not-find-android-14 в журнале событий.
-
Посмотрите файл build.gradle для своего модуля приложения. В проекте Android есть несколько файлов build.gradle. Тот, который вы хотите, находится в каталоге cvtest1/app, и из представления проекта он выглядит как build.gradle(Module: app). Обратите внимание на значения этих четырех полей:
- compileSDKVersion (мои говорит 23)
- buildToolsVersion (мой говорит 23.0.2)
- minSdkVersion (мои говорит 19)
- targetSdkVersion (мои сообщения 23)
-
В вашем проекте теперь есть каталог cvtest1/OpenCVLibrary310, но он не отображается в представлении проекта:
![введите описание изображения здесь]()
Используйте другой инструмент, например любой менеджер файлов, и перейдите в этот каталог. Вы также можете переключить представление проекта с Android на файлы проекта, и вы можете найти этот каталог, как показано на этом скриншоте:
![введите описание изображения здесь]()
Внутри есть еще один файл build.gradle(он выделен на скриншоте выше). Обновите этот файл четырьмя значениями с шага 6.
-
Повторно протестируйте проект, а затем очистите его/восстановите. (Меню:/Build/Clean_Project) Он должен очищать и строить без ошибок
и вы должны увидеть много ссылок на: openCVLibrary310 на экране 0: Сообщения.
![введите здесь описание изображения]()
В этот момент модуль должен отображаться в иерархии проекта как openCVLibrary310, как приложение. (Обратите внимание, что в этом маленьком раскрывающемся меню я переключился с Project View на Android View). Вы также должны увидеть дополнительный файл build.gradle в разделе "Gradle Scripts", но я обнаружил, что интерфейс 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:
- Если вы понизите целевую платформу ниже KitKat, некоторые из библиотек OpenCV больше не будут работать, в частности классы, связанные с org.opencv.android.Camera2Renderer и другие связанные классы. Вероятно, вы можете обойти это, просто удалив соответствующие файлы OpenCV.java.
- Если вы поднимите свою целевую платформу на Lollipop или выше моего примера загрузки файла, возможно, это не сработает, потому что использование абсолютных путей к файлу недоверчиво. Поэтому вам может потребоваться изменить пример загрузки файла из галереи или где-то еще. Есть множество примеров, плавающих вокруг.
Ответ 3
Для всех, кто чувствовал, что они хотят убежать со всеми шагами и снимками экрана на (отлично!) Выше ответах, это работало для меня с android studio 2.2.1
:
- Создайте новый проект, назовите его как хотите и выберите значение по умолчанию (minSdkVersion 15 вполне подойдет).
- Загрузите zip файл отсюда: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (я скачал версию 3.1.0, но могут быть и более новые версии).
- Разархивируйте zip файл, лучшее место в вашей рабочей папке, но это не имеет большого значения.
- Внутри
Android Studio
нажмите File->New-> Import Module
и перейдите к \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
и нажмите Ok, затем примите все диалоговые окна по умолчанию. -
В файле gradle
вашего модуля app
добавьте это в блок зависимостей:
dependencies {
compile project(':openCVLibraryXYZ')
//rest of code
}
Где XYZ - это точная версия, которую вы скачали, например, в моем случае:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Ответ 4
Отображается любой, кто сталкивается с проблемой n при создании jniLibs cpp. Просто добавьте ndk..
Ответ 5
Это сработало для меня и было так же просто, как добавить зависимость от gradle:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
Единственное предостережение в том, что мне пришлось использовать аппаратное отладочное устройство, так как эмуляторы манипуляторов помогли мне слишком медленно (как говорит AVD Manager), и, как описано в README для репозитория, эта версия не включает поддержку x86 или x86_64.
Похоже на сборку и предложенный тест:
static {
OpenCVLoader.initDebug();
}
выплевывает кучу выводов, которые выглядят прямо мне.
Ответ 6
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
. Выберите Build System ndk-build
и OpenCV.mk
путь к файлу /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.
path_to_unzipped_files
не должен содержать пробелов, иначе вы получите ошибку!
Чтобы проверить инициализацию OpenCV, добавьте сообщение Toast в методе onCreate()
:
Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
Если инициализация прошла успешно, вы увидите true
в сообщении Toast, иначе вы увидите false
.
Ответ 7
Вы также можете добавить эту библиотеку в build.gradle
dependencies{
compile 'org.opencv:opencv-android:2.4.8'
}