Скомпилируйте OpenALPR для Android с помощью NDK
Есть ли способ скомпилировать библиотеку OpenALPR ( https://github.com/openalpr/openalpr) для Android с помощью NDK (ndk-build)?
4 ответа
Это руководство по компиляции библиотеки для Android:
Учебник по компиляции OpenALPR для устройств Android
[Шаг 0]
- Скачать и развернуть Android-ndk
- Сделать символическую ссылку на корневую папку android-ndk в / opt
[Шаг 1]
- Загрузите и установите OpenCV для Android ( http://opencv.org/platforms/android.html) (просто следуйте инструкциям, предоставленным командой OpenCV)
[Шаг 2]
- Создайте библиотеку tess-two ( https://github.com/rmtheis/tess-two) (то же самое, что и OpenCV4Android, следуйте шагу сборки на странице GitHub)
[Шаг 3]
Загрузите и установите проект Android CMake ( https://code.google.com/p/android-cmake/). Вы должны получить набор инструментов для создания проектов Android. Если вам нужно выбрать, какой компилятор использовать, я рекомендую gcc4.6, так как я не достиг компиляции OpenALPR с помощью цепочки инструментов, указывающей на компилятор gcc4.8...
Создайте символическую ссылку на папку android-toolchain внутри /opt (т.е. sudo ln -s PATH_TO_ANDROID_TOOLCHAIN /opt/android-toolchain). (Папка android-toolchain создается во время развертывания проекта Android CMake!)
[Шаг 4]
- Загрузите openalpr-master с github ( https://github.com/openalpr/openalpr)
- Создайте папку "build" внутри директории openalpr-master
Перейдите в каталог src и отредактируйте файл CMakeLists.txt:
- Замените эту строку: SET(OpenCV_DIR "${CMAKE_SOURCE_DIR}/../library /opencv/")
- с помощью: SET(OpenCV_DIR "path_to_OpenCV4Android/sdk/native/jni")
Затем прокомментируйте раздел для генерации alprd (или просто удалите его):
Скомпилируйте библиотеку alprd в ОС на основе Unix
ЕСЛИ (НЕ WIN32) ADD_EXECUTABLE (alprd daemon.cpp videobuffer.cpp daemon / beanstalk.c daemon / beanstalk.cc daemon / uuid.cpp)
TARGET_LINK_LIBRARIES (alprd openalpr поддерживает uuid curl log4cplus ${OpenCV_LIBS} ${Tesseract_LIBS}) ENDIF()
Открыть CMake
- Укажите Исходный код в каталог openalpr-master / src
- Укажите путь сборки к каталогу openalpr-master / build
- Нажмите кнопку "Настроить"
- Выберите "Unix Makefiles" (по умолчанию) и выберите "Указать набор инструментов для кросс-компиляции", затем нажмите "Далее"
- Укажите файл цепочки инструментов, который нужно использовать: если вы выполнили шаг 3, он должен находиться в каталоге $ANDROID_CMAKE/toolchain/android.toolchain.cmake (обязательно замените $ ANDROID_CMAKE соответствующим абсолютным путем)
- Нажмите на готово
Там не должно быть никаких ошибок, но некоторые предупреждения... все в порядке
- Нажмите Generate
[Шаг 5]
- Перейдите в каталог сборки и отредактируйте этот файл: misc_utilities/CMakeFiles/benchmark.dir/link.txt: удалите опцию -lpthread (такая строка должна быть только одна). Сохранить и выйти.
- Откройте проводник и перейдите по пути path_to_tess-two/tess-two/jni/com_googlecode_tesseract_android/src
- Теперь ищите каждый заголовочный файл (нажмите кнопку поиска и введите ".h")
- Скопируйте и вставьте каждый заголовочный файл в openalpr-master/src/openalpr/tesseract (вы должны сначала создать этот каталог)
- Создает эти каталоги "library /tesseract-ocr/api/.libs" в корневом каталоге openalpr-master (библиотеки mkdir -p /tesseract-ocr/api/.libs)
- Скопируйте и вставьте path_to_tess-two/tess-two/libs/armeabi-v7a/libtess.so в openalpr-master / library /tesseract-ocr/api/.libs/libtesseract.so (не забудьте переименовать его из libtess.so в libtesseract.so!)
- Откройте терминал и перейдите в папку сборки (openalpr-master/build)
- Сделать "сделать"
Все должно скомпилироваться гладко. Вы можете найти библиотеку alpr в openalpr-master/src/libs/armeabi-v7a
Вот и все, дайте мне знать ваши успехи и неудачи, я постараюсь помочь вам как можно лучше
Если вы все еще хотите добиться этого, вот шаги, которые я выполнил, чтобы использовать OpenAlpr на устройстве Android:
- Сначала загрузите и установите OpenCV для Android ( http://opencv.org/platforms/android.html)
- Создайте библиотеку tess-two ( https://github.com/rmtheis/tess-two)
- Загрузите и установите проект Android CMake ( https://code.google.com/p/android-cmake/).
- Затем с помощью CMake вы сможете скомпилировать библиотеку OpenAlpr (в этом процессе происходит множество хитростей, чтобы зарегистрировать пути к библиотеке tesseract, opencv и т. Д.)
Я попробовал это на Windows 8.1 и Ubuntu 13.10/14.04, оба работают отлично
Итак, это основные шаги для создания библиотеки, вам также нужно написать файл Android.mk для использования библиотеки.
Если вы заинтересованы (или кто-то еще), дайте мне знать, и я напишу правильный пошаговый учебник
Да, это должно быть возможно. Сначала вам нужно будет установить Android-версию OpenCV и Tesseract. Но как только это будет сделано, OpenALPR должен скомпилироваться под Android.
Я подозреваю, что на мобильном телефоне производительность будет невелика. Распознавание номерных знаков - это сложный вычислительный процесс.
Вот контент Android.mk, который я использую:
LOCAL_PATH := $(call my-dir)
LIB_PATH := $(LOCAL_PATH)/../libs/armeabi-v7a
include $(CLEAR_VARS)
LOCAL_MODULE := leptonica
LOCAL_SRC_FILES := liblept.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := tesseract
LOCAL_SRC_FILES := libtess.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := simpleini
LOCAL_SRC_FILES := libsimpleini.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := support
LOCAL_SRC_FILES := libsupport.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := openalpr
LOCAL_SRC_FILES := libopenalpr-static.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_CAMERA_MODULES:=off
include path_to_opencv4android/OpenCV.mk
LOCAL_MODULE := nativealpr
LOCAL_SRC_FILES := NativeAlpr.cpp
LOCAL_SHARED_LIBRARIES += tesseract leptonica
LOCAL_STATIC_LIBRARIES += openalpr support simpleini
include $(BUILD_SHARED_LIBRARY)
Вот приложение.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
В файле Android.mk файл NativeAlpr.cpp содержит необходимый собственный код для использования библиотеки OpenALPR.