android - 使用 NDK 为 Android 编译 OpenALPR

标签 android android-ndk java-native-interface automatic-license-plate-recognition

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

最佳答案

这是为 android 编译库的指南:

为 Android 设备编译 OpenALPR 的教程

[第0步]

  • 下载并部署android-ndk
  • 将 android-ndk 根文件夹的符号链接(symbolic link)到/opt

[第一步]

[第二步]

[第三步]

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

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

[第四步]

  • 从 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 库

    如果(不是 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 替换为其相应的绝对路径)
  • 点击完成

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

  • 按生成

[第五步]

  • 转到构建目录并编辑此文件: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 库

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

关于android - 使用 NDK 为 Android 编译 OpenALPR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21309592/

相关文章:

android - 针绕其指针头旋转

android - 使用 Android NDK 和内核不支持的摄像头的原始 USB 连接实现 UVC 驱动程序

Android NDK eabi - 如何让 ndk 知道使用 hard fp?

java - 当 Java 需要这种链接约定时,为什么 Maven 在安装 native 库时会修剪 "lib"前缀?

java - 从 .dll 生成 Java 类

c++ - 无法将 boost 库连接到我的项目 "symbol lookup error"

android - 防止 Jacoco 在默认 gradle 任务中运行(这发生在每个本地构建上)

android - 无法集成 Fabric 和 Firebase

android - 蓝牙设备扫描不完整

audio - native 缓冲音频