android 版 easypr 车牌识别

本贴最后更新于 2733 天前,其中的信息可能已经东海扬尘

easypr 车牌识别

1.新建 java 类,申明 native 本地方法,如:

 public class PlateRecognizer {   
	 public static native String stringFromJNI();
	 public static native long initPR(String svmpath, String annpath);
	 public static native long uninitPR(long recognizerPtr); 
	 public static native byte[] plateRecognize(long recognizerPtr, String imgpath);    
 }

2.在 app 模块的 main 下新建 jni 文件夹,编译 JNI:

  1. 申明 native 方法后,点击 build --> make project,生成 class 字节码文件。一般在 app\build\intermediates\classes\debug

  2. cd 进入该目录,使用 javah 命令,生成我们想要得到的.h 头文件,如执行 javah -jni com.lczp.prtest.EasyPR.PlateRecognizer 命令之后,会在 classes 目录下生成头文件:com_lczp_prtest_EasyPR_PlateRecognizer.h,将它复制到 jni 文件夹下,该文件就是通过 javah 命令生成 jni 层代码文件。

  3. 创建.cpp 文件来实现 jni 方法,具体可百度

  4. 在 jni 目录下创建 Android.mk

     LOCAL_PATH := $(call my-dir)
       include $(CLEAR_VARS)        
      # OpenCV
      OPENCV_CAMERA_MODULES:=on 
      OPENCV_INSTALL_MODULES:=on
      include ../../../../OpencvNative/jni/OpenCV.mk 
      FILE_LIST := $(wildcard $(LOCAL_PATH)/easyPR/src/*/*.cpp)
      LOCAL_SRC_FILES := $(LOCAL_PATH)/EasyPR.cpp
      LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) 
      LOCAL_C_INCLUDES += $(LOCAL_PATH)/
      LOCAL_C_INCLUDES += $(LOCAL_PATH)/easyPR/include
      LOCAL_MODULE     := EasyPR 
      LOCAL_LDLIBS += -llog    
      include $(BUILD_SHARED_LIBRARY)         
    

其中:

  • LOCAL_PATH 是 C/C++ 代码所在目录,也就是我们的 jni 目录。
  • LOCAL_MODULE 是要编译的库的名称。编译器会自动在前面加上 lib,在后面加上.so。
  • LOCAL_SRC_FILES 是要编译的 C/C++ 文件。

然后我还需要在 Android 项目根目录下创建 Application.mk 文件:

	 APP_STL := gnustl_static  
	 APP_CPPFLAGS := -frtti -fexceptions -std=c++0x
	 APP_ABI := armeabi-v7a   
	 APP_PLATFORM := android-14
	 
	 

下载 easy 库,EasyPR_Android

复制其中的 OpencvNative 到项目根目录下下,拷贝其中的 easypr 到 jni 目录下。

  • 进入 Application.mk 文件所在目录,在命令行中使用 ndk-build 生成.so 文件

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...