android版easypr车牌识别

  |   0 评论   |   1,492 浏览

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目录下生成头文件:comlczpprtestEasyPRPlateRecognizer.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。
  • LOCALSRCFILES是要编译的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文件

>