Поиск…


замечания

Библиотеки Open CV можно найти в Интернете с помощью поисковой системы.

Готча :

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

инструкции

Протестировано с AS v1.4.1, но должно работать и с более новыми версиями.

  1. Создайте новый проект Android Studio с помощью мастера проекта (Меню: / Файл / Новый проект):

    • Назовите это « cvtest1 »
    • Форм-фактор: API 19, Android 4.4 (KitKat)
    • Пустое действие под названием MainActivity

    У вас должен быть каталог cvtest1, в котором хранится этот проект. (строка заголовка студии Android показывает, где cvtest1 при открытии проекта)

  1. Убедитесь, что приложение работает правильно. Попробуйте изменить что-то вроде текста «Hello World», чтобы подтвердить, что цикл сборки / тестирования подходит для вас. (Я тестирую эмулятор устройства API 19).

  2. Загрузите пакет OpenCV для Android v3.1.0 и разархивируйте его в каком-нибудь временном каталоге. (Убедитесь, что это пакет специально для Android, а не только для пакета OpenCV для Java.) Я назову этот каталог « unzip-dir ». Ниже unzip-dir вы должны иметь каталог sdk / native / libs с подкаталогами, которые начинаются с такие вещи, как рука ..., mips ... и x86 ... (по одному для каждого типа «архитектуры» Android работает)

  3. Из Android Studio импортируйте OpenCV в свой проект как модуль: Menu: / File / New / Import_Module :

    • Исходный каталог: {unzip-dir} / sdk / java
    • Имя модуля: Студия Android автоматически заполняет это поле с помощью openCVLibrary310 (точное имя, вероятно, не имеет значения, но мы пойдем с этим).
    • Нажмите дальше . Вы получаете экран с тремя флажками и вопросами о банках, библиотеках и опциях импорта. Все три должны быть проверены. Нажмите « Готово».

    Android Studio начинает импортировать модуль, и вам будет показан файл import-summary.txt, в котором есть список того, что не было импортировано (в основном файлы javadoc) и другие фрагменты информации.
    введите описание изображения здесь

    Но вы также получаете сообщение об ошибке, в котором не удалось найти цель с хеш-строкой «андроид-14» .... Это происходит из-за того, что файл build.gradle в загруженном zip-файле OpenCV говорит, что он компилируется с использованием API-интерфейсов Android версии 14, который по умолчанию у вас нет в Android Studio v1.4.1. введите описание изображения здесь

  1. Откройте диалог структуры проекта ( меню: / File / Project_Structure ). Выберите модуль «приложение», перейдите на вкладку « Зависимости » и добавьте : openCVLibrary310 в качестве зависимости от модуля. Когда вы выбираете Add / Module_Dependency, он должен появиться в списке модулей, которые вы можете добавить. Теперь он будет отображаться как зависимость, но вы получите еще несколько ошибок can not-find-android-14 в журнале событий.

  2. Посмотрите файл build.gradle для своего модуля приложения. В проекте Android есть несколько файлов build.gradle. Тот, который вы хотите, находится в каталоге cvtest1 / app, и из представления проекта он выглядит как build.gradle (Module: app) . Обратите внимание на значения этих четырех полей:

    • compileSDKVersion (мой говорит 23)
    • buildToolsVersion (мой говорит 23.0.2)
    • minSdkVersion (мой говорит 19)
    • targetSdkVersion (мой говорит 23)
  3. Теперь у вашего проекта есть каталог 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 вы должны увидеть такие строки:

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

(Я не знаю, почему эта строка с сообщением об ошибке)

  1. Теперь попробуйте использовать некоторый код openCV. В приведенном ниже примере я скопировал файл .jpg в каталог кэша приложения cvtest1 на эмуляторе Android. Приведенный ниже код загружает это изображение, запускает алгоритм обнаружения байтового края и затем записывает результаты обратно в .png-файл в том же каталоге.
Put this code just below the code from the previous step and alter it to match your own files/directories.
 
    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);
  1. Запустите приложение. Ваш эмулятор должен создать черно-белое «краевое» изображение. Вы можете использовать Android Device Monitor для получения вывода или записи активности для его отображения.


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow