AR技术之--基于opencv的人脸识别(四)

第二种方法也是纯jni的,但是是动态链接库,在第一种基础上,修改Android.mk文件中配置

OPENCV_LIB_TYPE := STATIC
修改为OPENCV_LIB_TYPE:=SHARED

注意上面的OPENCV_LIB_TYPE属性的改动,从STATIC改为了SHARED,这时候再用ndkBuild一下,你会发现会输出一些警告以及一部分红色部分的内容

下午3:02:54: Executing external task 'ndkBuild'...
Incremental java compilation is an incubating feature.
:android-opencv-library:ndkBuild
Android NDK: WARNING:/Users/lisc/Documents/examples/ar/android-opencv-library/src/main/jni/Android.mk:OpenCV: non-system libraries in linker flags: -lopencv_java3    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    
Android NDK: WARNING:/Users/lisc/Documents/examples/ar/android-opencv-library/src/main/jni/Android.mk:OpenCV: non-system libraries in linker flags: -lopencv_java3    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    

[armeabi] Compile++ thumb: OpenCV <= com_lisc_android_opencv_lib_OpenCVHelper.cpp
[armeabi] SharedLibrary  : libOpenCV.so
[armeabi] Install        : libOpenCV.so => libs/armeabi/libOpenCV.so
[armeabi-v7a] Compile++ thumb: OpenCV <= com_lisc_android_opencv_lib_OpenCVHelper.cpp
[armeabi-v7a] SharedLibrary  : libOpenCV.so
[armeabi-v7a] Install        : libOpenCV.so => libs/armeabi-v7a/libOpenCV.so



BUILD SUCCESSFUL


Total time: 5.394 secs
下午3:03:00: External task execution finished 'ndkBuild'.

生成的so库的大小为366k,小了好几倍,这时候如果你直接取运行程序,会报错误

E/AndroidRuntime(31026): Process: com.lisc.android.ar, PID: 31026
E/AndroidRuntime(31026): java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libopencv_java3.so" needed by "libOpenCV.so"; caused by library "libopencv_java3.so" not found
E/AndroidRuntime(31026): at java.lang.Runtime.loadLibrary(Runtime.java:364)
E/AndroidRuntime(31026): at java.lang.System.loadLibrary(System.java:538)
E/AndroidRuntime(31026): at com.lisc.android.opencv.lib.OpenCVHelper.<clinit>(OpenCVHelper.java:9)
E/AndroidRuntime(31026): at com.lisc.android.ar.MainActivity$GrayRunnable$1.run(MainActivity.java:40)
E/AndroidRuntime(31026): at android.app.Activity.runOnUiThread(Activity.java:4784)
E/AndroidRuntime(31026): at com.lisc.android.ar.MainActivity$GrayRunnable.run(MainActivity.java:33)
E/AndroidRuntime(31026): at android.os.Handler.handleCallback(Handler.java:733)
E/AndroidRuntime(31026): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(31026): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(31026): at android.app.ActivityThread.main(ActivityThread.java:5032)
E/AndroidRuntime(31026): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(31026): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(31026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/AndroidRuntime(31026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/AndroidRuntime(31026): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 2590):   Force finishing activity com.lisc.android.ar/.MainActivity
D/PowerManagerService( 2590): set home button brightness by screen_brightness = 130

原因是我们使用的是动态库加载方式,还需要将依赖的so加进去,这个so就是图中的libopencv_java3.so,他在我们的最开始加到项目里的native目录中


将它拷到我们的jniLibs目录中去,这里只拷贝armeabi和armeabi-v7a中的,至于其他的按需拷贝

在src/main在新建jniLibs目录


在执行ndkBuild时,还是会出现之前看到的警告,运行下试试吧

这时候运行就不会报错了。

既然我们使用了动态链接库,那么我们同样也可以使用java层的接口,优点是java开发速度相对快一点。

代码下载:

http://download.csdn.net/detail/ha000/9561895

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值