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.

  1. Повторно протестируйте проект, а затем очистите его/восстановите. (Меню:/Build/Clean_Project) Он должен очищать и строить без ошибок и вы должны увидеть много ссылок на: openCVLibrary310 на экране 0: Сообщения.

    введите здесь описание изображения

    В этот момент модуль должен отображаться в иерархии проекта как openCVLibrary310, как приложение. (Обратите внимание, что в этом маленьком раскрывающемся меню я переключился с Project View на Android View). Вы также должны увидеть дополнительный файл build.gradle в разделе "Gradle Scripts", но я обнаружил, что интерфейс Android Studio немного глючит, и иногда он не делает этого сразу. Поэтому попробуйте выполнить повторную синхронизацию, очистку и даже перезагрузку Android Studio.

    Вы должны увидеть модуль openCVLibrary310 со всеми функциями OpenCV в java, как на этом скриншоте:

    введите описание изображения здесь

  2. Скопируйте каталог {unzip-dir}/sdk/native/libs (и все под ним) в проект Android, в cvtest1/OpenCVLibrary310/src/main/, а затем переименуйте свою копию от libs до jniLibs. Теперь у вас должен быть каталог cvtest1/OpenCVLibrary310/src/main/jniLibs. Повторно проследуйте свой проект, и теперь этот каталог отображаются в представлении проекта под openCVLibrary310.

    введите описание изображения здесь

  3. Перейдите в метод 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 вы должны увидеть такие строки: введите описание изображения здесь (Я не знаю, почему эта строка содержит сообщение об ошибке)

  4. Теперь попробуйте использовать некоторый код 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);
    
  5. Запустите приложение. Ваш эмулятор должен создать черно-белое "краевое" изображение. Вы можете использовать Android Device Monitor для получения вывода или записи активности для его отображения.

Gotchas:

  • Если вы понизите целевую платформу ниже KitKat, некоторые из библиотек OpenCV больше не будут работать, в частности классы, связанные с org.opencv.android.Camera2Renderer и другие связанные классы. Вероятно, вы можете обойти это, просто удалив соответствующие файлы OpenCV.java.
  • Если вы поднимите свою целевую платформу на Lollipop или выше моего примера загрузки файла, возможно, это не сработает, потому что использование абсолютных путей к файлу недоверчиво. Поэтому вам может потребоваться изменить пример загрузки файла из галереи или где-то еще. Есть множество примеров, плавающих вокруг.

Ответ 3

Для всех, кто чувствовал, что они хотят убежать со всеми шагами и снимками экрана на (отлично!) Выше ответах, это работало для меня с android studio 2.2.1:

  1. Создайте новый проект, назовите его как хотите и выберите значение по умолчанию (minSdkVersion 15 вполне подойдет).
  2. Загрузите zip файл отсюда: https://sourceforge.net/projects/opencvlibrary/files/opencv-android/ (я скачал версию 3.1.0, но могут быть и более новые версии).
  3. Разархивируйте zip файл, лучшее место в вашей рабочей папке, но это не имеет большого значения.
  4. Внутри Android Studio нажмите File->New-> Import Module и перейдите к \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java и нажмите Ok, затем примите все диалоговые окна по умолчанию.
  5. В файле 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

  1. Загрузите отсюда последнюю версию zip файла opencv (в моем случае версию 4.1.0) и разархивируйте его в рабочей области или в другой папке.
  2. Создайте новый проект Android Studio как обычно. Нажмите File->New->Import Module, перейдите к /path_to_unzipped_files/OpenCV-android-sdk/sdk/java, установите имя модуля как opencv, нажмите Next и снимите все опции на экране.

  3. Включите режим просмотра файлов 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.

  4. Добавьте эту строку в блок зависимостей в файле app/build.gradle

    dependencies {
        ...
        implementation project(path: ':opencv')
        ...
    }
    
  5. Выберите снова режим просмотра файлов Android. Щелкните правой кнопкой мыши на модуле app и New->Folder->JNI Folder. Выберите изменить местоположение папки и установите src/main/jniLibs/.

  6. Снова выберите режим просмотра файла Project и скопируйте все папки из /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs в app/src/main/jniLibs.

  7. Снова в режиме просмотра файлов 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'
}