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:
-
申明 native 方法后,点击 build --> make project,生成 class 字节码文件。一般在 app\build\intermediates\classes\debug
-
cd 进入该目录,使用 javah 命令,生成我们想要得到的.h 头文件,如执行 javah -jni com.lczp.prtest.EasyPR.PlateRecognizer 命令之后,会在 classes 目录下生成头文件:com_lczp_prtest_EasyPR_PlateRecognizer.h,将它复制到 jni 文件夹下,该文件就是通过 javah 命令生成 jni 层代码文件。
-
创建.cpp 文件来实现 jni 方法,具体可百度
-
在 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 文件
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于