- Добавление библиотеки OpenCV в проект Android Studio
- Вступление
- 1. Загрузка OpenCV SDK для Android
- 2. Установка OpenCV в проект Android Studio
- 3. Разработка примера приложения OpenCV для Android
- OpenCV in Android
- Захват видео с камеры
- Файлы приложения «Capture video from the camera»
- Отслеживание лица, используя каскад Хаара
- A Beginner’s Guide to Setting up OpenCV Android Library on Android Studio
Добавление библиотеки OpenCV в проект Android Studio
Вступление
Добрый день, уважаемые читатели! Всем давно известно, что мобильные устройства всё чаще комплектуются мощным аппаратным обеспечением. Процессоры современных смартфонов почти сравнялись с настольными аналогами, а проблемы с возможной нехваткой оперативной и внешней памяти уходят на второй план. Сегодня уже не встретишь телефоны или планшеты без внушительной программной платформы вроде Android, iOS или Windows, а кроме того, все мобильные устройства имеют те или иные встроенные модули, вроде фотокамеры. В данной статье речь пойдёт о встраивании библиотеки компьютерного зрения OpenCV в проект приложения для Android. Вероятно, данная статья не имела бы никакой значимой ценности, однако все инструкции в ней предназначены для Android Studio, новой официальной среды разработки от Google. К тому же, в статье описывается статическая инициализация OpenCV в Android без использования OpenCV Manager. Ниже представлен план руководства:
- Загрузка OpenCV SDK для Android
- Установка OpenCV в проект Android Studio
- Разработка примера приложения OpenCV для Android
Не будем терять времени и начнём работу.
1. Загрузка OpenCV SDK для Android
Для того, чтобы использовать OpenCV в своих приложениях, необходимо загрузить соответствующий SDK. Сделать это можно на официальном сайте opencv.org. На рисунке ниже показана ссылка на скачивание нужного архива:
В архив OpenCV SDK для Android входят двоичные файлы библиотек под разные архитектуры микропроцессоров, обёртка на языке программирования Java, которая использует Java Native Interface (JNI) для вызова функций из платформо-зависимых библиотек, исходные коды примеров программ и файлы .apk для установки OpenCV Manager. Следующий шаг — добавление модуля OpenCV в проект Android Studio.
2. Установка OpenCV в проект Android Studio
Импорт модуля OpenCV в проект Android Studio не представляет труда. Для этого нужно выбрать меню File -> New -> Import Module. и указать путь sdk/java из распакованного архива SDK. Все остальные настройки импорта менять не обязательно. На рисунке ниже показано окно мастера с указанием пути импорта модуля и его нового имени в проекте:
После импорта модуля в его build.gradle нужно обязательно обновить параметры compileSdkVersion, buildToolsVersion, minSdkVersion и targetSdkVersion, чтобы они совпадали с соответствующими параметрами из модуля приложения. После того, как модуль OpenCV был добавлен, его нужно присоединить в качестве зависимости к модулю приложения. Для этого нужно выбрать меню File -> Project Structure. и для модуля app указать зависимость от opencv. На рисунке ниже показано окно настройки зависимостей:
Последнее, что осталось сделать — добавить двоичные библиотеки OpenCV в проект, чтобы при сборке они были упакованы в .apk приложения. Для этого нужно скопировать папку sdk/native/libs из OpenCV SDK в папку проекта по пути app/src/main. Затем нужно переименовать папку libs в jniLibs. Следует отметить, что не нужно упаковывать статические библиотеки OpenCV (расширение .a) в .apk и хранить их в проекте. В образовавшейся папке jniLibs для каждой архитектуры можно оставить только файлы с расширением .so. На рисунке ниже показана получившаяся структура папок в Проводнике Windows:
3. Разработка примера приложения OpenCV для Android
Для того, чтобы быстрее начать работу с OpenCV, разработаем простое приложение для вывода изображения с камеры. Ниже приведено содержимое исходных файлов, которые необходимо изменить для запуска программы:
Источник
OpenCV in Android
Скачиваю с сайта OpenCV архив opencv-3.4.3-android-sdk.zip, распаковываю его и размещаю папку из распакованного архива в корень диска C.
Создаю в в Android Studio проект: File -> New -> New Project. Даю проекту имя opencv_project. Нажимаю Next -> Next -> Next -> Finish.
Выбираю меню File -> New -> Import Module… и указываю путь sdk/java из распакованного SDK архива:
В окне «Android» должен появиться модуль openCVLibrary343:
При этом еще откроется файл import_summary.txt. В нем предлагается вручную загрузить необходимые для проекта файлы. Закройте его. В этом проекте ничего догружать не нужно. Возможно это понадобится в других проектах.
В окне «Android» можно увидеть 3 файла с именем build.gradle, один из них принадлежит модулю openCVLibrary343:
Открываю этот файл и обновляю в нем параметры compileSdkVersion, buildToolsVersion, minSdkVersion и targetSdkVersion, чтобы они совпадали с соответствующими параметрами из файла build.gradle (Module:app).
После того, как модуль OpenCV был добавлен, его нужно присоединить в качестве зависимости к модулю приложения. Выбираю меню File -> Project Structure… В открывшемся окне выбираю app -> Dependencies -> + -> Module dependency -> OpenCVLibrary343 -> OK.
Последнее, что осталось сделать — добавить двоичные библиотеки OpenCV в проект, чтобы при сборке они были упакованы в .apk приложения. Для этого копирую папку sdk/native/libs из OpenCV SDK в папку проекта opencv_project/app/src/main. Переименовываю скопированную в проект папку libs в jniLibs.
В общем инсталляция OpenCV закончена. Сейчас можно проверить, что ничего в проекте не повреждено и по прежнему запускается «Hello World». Дополнительные установки и подключения для конкретных задач рассмотрены в примерах ниже.
Захват видео с камеры
Заменяю код в исходных файлах activity_main.xml и Main_Activity.java . Запускаю программу. Получаю вот такой результат:
«It seems that you r device does not support camera (or it is locked). Application will be locked.»
«Кажется, Ваше устройство не поддерживает камеру (или она заблокирована). Приложение будет закрыто.»
Для устранения этой ошибки выполняю следующее:
Первое. Ввожу в файл AndroidManifest.xml перед тегом application следующую строку:
Второе. В Android устройстве последовательно нажимаю выделенные красным прямоугольником кнопки
Кнопка напротив «Camera» должна быть активной при запуске проекта приложения, которое работает с камерой.
Третье. Вызываю AVD Manager кнопкой в правом верхнем углу Android Studio
открывается окно редактирования эмуляторов (у меня их 2), редактирую тот, что активный
В открывшемся окне нажимаю кнопку ShowAdvancedSettings и в блоке Camera выбираю Webcam0 для Front и Back.
Запускаю приложение и получаю ожидаемый результат:
Файлы приложения «Capture video from the camera»
activity_main.xml
Main_Activity.java
Отслеживание лица, используя каскад Хаара
Заимствую пример из интернет. Создаю новый проект, заменяю код в файле Main_Activity.java.
Код незначительно отличается от примера из интернет. Изменения вызваны обновленной версией OpenCV.
Через контекстное меню создаю директорию raw в папке res.
Копирую в эту папку файл lbpcascade_frontalface.xml из папки …\etc\lbpcascades установленного opencv-3.4.3-android-sdk:
В программу можно загружать и подключать разные каскады — в зависимости от ожидаемого результата (детектирование лица, глаз, кисти руки и т.п.). Часть каскадов находится в папке …\etc\… , другие можно поискать в интернет.
Запускаю программу. Получаю вот такой результат:
Очевидно, инсталляция еще не до конца выполнена, хотя предыдущая программа все же запускалась.
На сайте по ссылке описано, как можно решить эту проблему при работе с Android Studio в различных ОС (у меня Windows 10). Для инсталляции OpenCV Manager в эмуляторе выполняю следующее:
Копирую APK файл из установленного у меня на компьютере пакета opencv-3.4.3-android-sdk в директорию …android\sdk\platform-tools:
Через кнопку поисковика запускаю окно командной строки Windows: cmd
В окне командной строки последовательно ввожу команды, которые обеспечивают выход на соответствующую директорию и инсталляцию apk файла:
Перебирал несколько файлов для установки, пока не добился успешного результата (Succces) с файлом OpenCV_3.4.3_Manager_3.43_x86.apk. Другие подгруженные apk файлы из директории …android\sdk\platform-tools можно удалить.
Запускаю приложение после выполненных настроек и получаю ожидаемый результат (квадраты отслеживают положение лиц):
В случае использования другого эмулятора инсталляцию OpenCV Manager необходимо повторить, иначе снова будет появляться сообщение об ошибке «Package not found …»
Источник
A Beginner’s Guide to Setting up OpenCV Android Library on Android Studio
Aug 13, 2018 · 6 min read
I recently started a project that involved working with OpenCV on Android. Most of the guides on setting up the library on Android were outdated or not complete. So, after getting multiple requests from team mates on how to set this up, I decided to just write a dead simple guide on this.
Step 1: Download OpenCV Android Library
Go to the OpenCV Android Sourceforge page and download the latest OpenCV Android library. As at the time of writing this post, the latest available version was 3.4.1.
When the down l oad completes, you should extract the contents of the zip file into a folder.
Step 2: Setup project
Create a new Android project using Android Studio only if you have not created one already for your computer vision project.
Note: Skip this step if you already have an Android project you want to use the OpenCV library in.
Step 3: Import OpenCV Module
After successfully creating an Android project, it is time to import the OpenCV module into your Android project. Click on File -> New -> Import Module…
It should bring up a popup like the image below where you can select the path to the module you want to import.
Browse to the folder where you extracted the OpenCV Android library zip file contents. Select the java folder inside of the sdk folder .
After selecting the correct path and clicking OK, you should get a screen like the image below.
Click on Next to go to the next screen. On the next screen (the image below) you should leave the default options checked and click on Finish to complete the module import.
Step 4: Fixing Gradle Sync Errors
You should get a Gradle build error after you finish importing the OpenCV library. This happens because the library is using an old Android SDK that you probably don’t have installed yet.
To quickly fix this error, switch from the Android pane to the Project pane on the left side of Android Studio.
Browse to OpenCV library module and open its build.gradle file.
To fix the error, you just have to change the compileSdkVersion and targetSdkVersion to the latest Android SDK version or the one you have installed on your PC. After changing the version you should click on the sync button so that Gradle can sync the project.
Quick tip: buildToolsVersion can be ignored
Step 5: Add the OpenCV Dependency
To work with the OpenCV Android library, you have to add it to your app module as a dependency. To easily do this on Android Studio, click on File -> Project Structure.
When the project structure dialog opens, click on the app module or any other module that you want to use OpenCV library in.
After navigating to the module, click on the Dependencies tab. You should see a green plus button on the far right of the dialog, click on it and select Module dependency.
When the choose modules dialog opens, select the OpenCV library module and click on OK.
When you return to the dependencies page, confirm that the module was actually added as a dependency then click on the OK button to continue.
Step 6: Add Native Libraries
On your file explorer, navigate to the folder where you extracted the content of the OpenCV Android library zip file. Open the sdk folder and then the native folder (Use the image below as a guide).
Copy the libs folder in the native folder over to your project app module main folder (Usually ProjectName/app/src/main ).
Rename the libs folder you just copied into your project to jniLibs .
Step 7: Add Required Permissions
To successfully use OpenCV, your app should have the camera permission added to its AndroidManifest.xml file.
Tip: Don’t forget to request for the camera permission at runtime on Android 6 and above.
Step 8: Try out Sample
To confirm that you successfully integrated the OpenCV Android library, you can try out one of the samples included in the library zip file.
Let’s try out the color-blob-detection sample. You can see the sample in action below:
Quickly update your app main activity with the code below.
Then create a new class called ColorBlobDetector and copy the code below into it.
Finally, update your app main activity layout file with the layout code below.
Step 9: Using OpenCV Manager
Because you are bundling native libraries in your app APK, you will end up with a very large app APK size.
One way to solve this is to use ABI splits, so you only have the neccessary libraries needed for each device in an APK.
The other way around the size issue is to use the OpenCV Manager. In the folder where you extracted the library contents into, there is a folder called apk that contains the OpenCV manager for various architectures.
Select the APK with the right architecture of your test device and use ADB via command prompt/line to install it on your device.
Step 10: Test the App
Finally, hit the run button and run the app on your test device.
Note: Don’t forget to grant camera permission on Android 6 and above.
Источник