4

有没有办法使用 NDK(ndk-build)为 Android 编译库 OpenALPR(https://github.com/openalpr/openalpr)?

4

4 回答 4

11

这是为 android 编译库的指南:

为 Android 设备编译 OpenALPR 的教程

[步骤 0]

  • 下载并部署android-ndk
  • 将 android-ndk 根文件夹的符号链接指向 /opt

[第1步]

[第2步]

[步骤 3]

  • 下载并安装 Android CMake 项目 ( https://code.google.com/p/android-cmake/ ) 您最终应该得到一个用于生成 android 项目的工具链。如果你必须选择使用哪个编译器,我推荐 gcc4.6,因为我没有使用指向 gcc4.8 编译器的工具链来编译 OpenALPR...

  • 在 /opt 中创建一个指向 android-toolchain 文件夹的符号链接(即:sudo ln -s PATH_TO_ANDROID_TOOLCHAIN /opt/android-toolchain)。(android-toolchain文件夹是在Android CMake项目部署过程中生成的!)

[第4步]

  • 从 github ( https://github.com/openalpr/openalpr )下载 openalpr-master
  • 在 openalpr-master 目录中创建一个文件夹“build”
  • 转到 src 目录并编辑 CMakeLists.txt 文件:

    • 替换这一行: SET(OpenCV_DIR "${CMAKE_SOURCE_DIR}/../libraries/opencv/")
    • 与:SET(OpenCV_DIR“path_to_OpenCV4Android/sdk/native/jni”)

    然后评论生成 alprd 的部分(或删除它):

    在基于 Unix 的操作系统上编译 alprd 库

    IF(非 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”(默认)并选择“Specify toolchain for cross-compile”然后点击“Next”
  • 指定要使用的工具链文件:如果你实现了第 3 步,它应该位于 $ANDROID_CMAKE/toolchain/android.toolchain.cmake 下(确保将 $ANDROID_CMAKE 替换为其对应的绝对路径)
  • 点击完成

应该没有任何错误,但有一些警告......没关系

  • 按生成

[步骤 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 (你应该先创建这个目录)
  • 在 openalpr-master 的根路径中创建这些目录“libraries/tesseract-ocr/api/.libs”(mkdir -p libraries/tesseract-ocr/api/.libs)
  • 将 path_to_tess-two/tess-two/libs/armeabi-v7a/libtess.so 复制并粘贴到 openalpr-master/libraries/tesseract-ocr/api/.libs/libtesseract.so (确保将其从 libtess.so 重命名为libtesseract.so !)
  • 打开终端并转到构建文件夹(openalpr-master/build)
  • 做吧”

一切都应该顺利编译。您可以在 openalpr-master/src/libs/armeabi-v7a 中找到 alpr 库

就是这样,让我知道你的成功和失败,我会尽力帮助你

于 2014-07-31T10:00:37.937 回答
3

如果您仍在寻求实现它,以下是我在 Android 设备上使用 OpenAlpr 所遵循的步骤:

我在 Windows 8.1 和 Ubuntu 13.10/14.04 上尝试过,两者都运行良好

这些是构建库的主要步骤,您还需要编写一个 Android.mk 文件来使用该库。

如果你有兴趣(或其他人)让我知道,我会写一个正确的分步教程

于 2014-06-19T14:34:46.063 回答
0

是的,这应该是可能的。您需要先获取 Android 版本的 OpenCV 和 Tesseract 设置。但是一旦完成,OpenALPR 应该可以在 Android 下干净地编译。

不过,我怀疑在手机上的性能不会很好。车牌识别是一个计算密集型的过程。

于 2014-01-31T01:12:29.380 回答
0

这是我使用的 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)

这是Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a

在 Android.mk 文件中,NativeAlpr.cpp 文件包含使用 OpenALPR 库所需的本机代码

于 2014-07-31T08:00:52.203 回答