Android + OpenCV / OpenCV / Recog.ru - Распознавание образов для программистов


Android + OpenCV

    Привет всем, сегодня я расскажу вам о сборке OpenCv для Android под управлением ОС Windows7.
    Перед началом сего процесса необходимо иметь:
  1. Android NDK; developer.android.com/sdk/ndk/index.html
  2. Android SDK; developer.android.com/sdk/index.html
  3. JDK (5 или 6); www.oracle.com/technetwork/java/javase/downloads/index.html
  4. SWIG(swigwin); www.swig.org/download.html
  5. Apache Ant; ant.apache.org/bindownload.cgi
  6. Make; gnuwin32.sourceforge.net/packages/make.htm
  7. Cmake; www.cmake.org/cmake/resources/software.html
  8. Svn клиент; sourceforge.net/projects/win32svn/
    Скачиваем, устанавливаем/распаковываем.
    Копируем файлы из хранилища code.ros.org/svn/opencv/trunk/opencv, выполнив команду(Рисунок 1):
svn  chekout https://code.ros.org/svn/opencv/trunk/opencv opencv-android

        Рисунок 1 – Создание локальной копии репозитория

    Далее нам необходимо добавить переменные окружения.
Способ первый.
1. Пуск->Выполнить-> rundll32.exe sysdm.cpl, EditEnvironmentVariables, либо
Мой Компьютер->Свойства->Дополнительные параметры системы->Переменные среды.
2. Создаем переменные:
  • ANDROID_NDK, полный путь к android ndk;
  • ANDROID_SDK, полный путь к android sdk;
  • JAVA_HOME, полный путь к JDK;
  • SWIG_DIR, полный путь к SWIG;
  • ANT_DIR, полный путь к Apache Ant;
  • MAKE_EXE, полный путь к make.exe;
  • CMAKE_EXE, полный путь к cmake.exe;
Способ второй
Сделав локальную копию репозитория переходим в папку opencv-android/android/scripts/. Здесь вы найдете файл wincfg.cmd.tmpl. Открываем, редактируем, у меня получилось что то вроде этого:
:: variables required for OpenCV build ::
:: Note: all pathes should be specified without tailing slashes!
SET ANDROID_NDK=C:\\android-ndk-r5c
SET CMAKE_EXE=C:\\Program Files\\CMake 2.8\\bin\\cmake.exe
SET MAKE_EXE=C:\\Program Files\\GnuWin32\\bin\\make.exe

:: variables required for android-opencv build ::
SET SWIG_DIR=C:\\swigwin-2.0.4
SET ANDROID_SDK=C:\\Program Files\\Android\\android-sdk
SET ANT_DIR=C:\apache-ant-1.8.2
SET JAVA_HOME=C:\\Program Files\\Java\\jdk1.6.0_25

:: configuration options ::
:::: general ARM-V7 settings
SET ARM_TARGET=armeabi
SET BUILD_DIR=build_armeabi

:::: uncomment following lines to compile for emulator or old device
::SET ARM_TARGET=armeabi
::SET BUILD_DIR=build_armeabi

:::: uncomment following lines to compile for ARM-V7 with NEON support
::SET ARM_TARGET=armeabi-v7a with NEON
::SET BUILD_DIR=build_neon

:::: other options
SET ANDROID_API_LEVEL=8   
:::::: android-3 is enough for OpenCV but android-8 is recommended
    Закрываем, сохраняем, переименовываем в wincfg.cmd.
    Едем дальше.
    После завершения копирования и создания переменных, переходим к процессу сборки.
    По умолчанию проект OpenCV сконфигурирован под архитектуру ARM-v7a. Архитектура задается в переменной ARM_TARGET и может принимать следующие значения: «armeabi», «armeabi-v7a» «armeabi-v7a with NEON». Если у вас нет аппарата с ARMv7, то устанавливаем переменную ARM_TARGET=«armeabi». Так же вы можете задать уровень API android в переменной ANDROID_API_LEVEL; поскольку мой девайс использует android 2.2, то ANDROID_API_LEVEL:STRING=8;(см. выше: Создание переменных окружения).

    Приступаем к сборке OpenCV.
  1. Открываем консоль cmd.exe, переходим в каталог opencv-android;
  2. Выполняем: android\scripts\cmake_android.cmd;
  3. Ждем окончания сборки OpenCV (рисунок 2);

        Рисунок 2 – Сборка OpenCV

    В результате мы получаем набор статических библиотек вида libopencv_*.a, скомпилированных под указанную ранее архитектуру.
    Далее приступаем к сборке библиотеки libandroid-opencv, которая необходима для запуска opencv-приложений на android. Переходим в каталог ../android-opencv, выполняем cmake_android.cmd, и ждем окончания сборки (рисунок 3).

        Рисунок 3 – Сборка libandroid-opencv

    Собрав библиотеку android-opencv, мы можем приступать к разработке android приложений с использованием нашей любимой opencv, для начала можем испытать ее на примерах, поставляемых с исходными файлами проекта opencv-android, что мы сейчас и сделаем.
    Приступим.
По сути, все условия для сборки рабочего приложения соблюдены, однако, нужно еще немного пошаманить. Для начала создаем в директории файл сценария cmake_android.cmd:
@ECHO OFF
SETLOCAL
PUSHD %~dp0
SET PROJECT_NAME=CVCamera
CALL ..\..\scripts\build.cmd %*
POPD
ENDLOCAL

    Запускаем сценарий cmake_android.cmd (рисунок 4).

        Рисунок 4 – Сборка Android проекта CVCamera

    Далее необходимо получить APK-файл. Для этого нам понадобится Apache ANT и цифровая подпись приложения. Неподписанные приложения система будет отвергать, поэтому создадим сертификат. Для этой цели понадобится утилита «keytool», поставляемая с JDK и средой времени выполнения JAVA.
Выполняем:
keytool -genkey -v -keystore key-name.keystore 
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
, где key-name — имя хранилища, alias_name — имя ключа, RSA — алгоритм ключа, keysize — размер, validity — срок действия.
    Во время выполнения команды, keytool предложит вам напечатать пароли для хранилища и ключа, и затем в текущей директории вы увидите ваш key-name.keystore.
    Добавляем в local.properties, расположенный в корневой директории проекта CVCamera, строки вида:
key.store=path\\to\\key-name.keystore
key.alias=alias_name
    Для удобства добавляем в конец переменной окружения $PATH путь к ant.bat, у меня он следующий:
C:\\apache-ant-1.8.2\\bin
    Убедившись, что мы находимся в корневой директории проекта CVCamera, выполняем команду:
ant.bat release
    Во время упаковки вводим пароли, указанные при генерации ключа.
В папке «bin» проекта «CVCamera» вы найдете файл CVCamera-release.apk, который готов к установке и использованию.
    Подключаем устройство через usb, разрешаем отладку, выполняем в консоли(рисунок 5):
adb install CVCamera-release.apk

        Рисунок 5 – Установка CVCamera-release.apk

На рисунке 6 изображен результат запуска приложения на конечном устройстве.

        Рисунок 6 – Запуск CVCamera на устройстве

Спасибо за внимание!
  • +1
  • 14 июня 2011, 10:12
  • kweilin

Комментарии (4)

RSS свернуть / развернуть
+
0
Немного отредактировал топик, чуть позже добавлю сборку и тест простейшего opecv-приложения для android.
avatar

kweilin

  • 16 июня 2011, 11:01
комментарий был удален

+
0
Здравствуйте. Не подскажете как можно собрать OpenCV под Android на устройство с архитектурой x86?
avatar

Iliya

  • 02 августа 2011, 10:20
+
0
Здравствуйте. С данной проблемой я еще не сталкивался, но вполне логично, что необходимо лишь задать переменные окружения (в частности целевая архитектура). В скором времени я готовлю статью о новом подходе к использованию opencv под андроид, но на x86 пока что времени нет, к моему сожалению.
avatar

kweilin

  • 02 августа 2011, 11:26

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.