WIN7 openCV face detection Sample报错解决

网上关于这一块的东西,人云亦云,我这里基于最新的一些东西写出来分享给大家。主要是查来查去,要么是很老的说cywin,要么是ubuntu环境。我今天主要讲几个点:

1. NDK编译, r7以上都不需要cywin或者linux环境;

2. win7,eclipse配置NDK环境这一块;

3. openCV sample face detection报错解决,调试运行OK。


问题:在win7上,eclipse导入了openCV Sample face detection的包后,一直是红色的报错,如何处理?


一. java, eclipse, adt略过(不要问为什么*_*);

二. Manager apk

手机要安装OpenCV android SDK对应的manager APK。(很早之前的openCV没这玩意,目前较新的都有,但是要注意版本相互对应)。

三. 导入OpenCV Library代码


它提供了基本的jar。它存在于openCV android sdk中的sdk\java下,其实你也可以直接选择他的根目录,自己单选即可。如果该代码报错,说明的android环境有误。

如果library无问题,右键点击face detection工程的properties->android,你会看到有个红色的,所以将它删掉,点击add,选择Open CV Library,就能加载进来。对于纯java的opencv就能正常跑了。

这个时候,我们也能运行起来程序,但是到了手机就报错了。会说loadLibrary()的错误。这是因为NDK没有将lib jni库编译出来,怎么能正常运行呢?接着我们就来NDK的安装。

四. jni目录Android.mk

大家是否注意到在该文件有这么一句话,include ../../sdk/native/jni/OpenCV.mk 。这是也是导致不能编译的主要原因。

也就是说他的编译,需要依赖于opencv 的一些c代码。所以我在想要么把这个路径改掉,比如改成D:\OpenCV-android-sdk\sdk\native\jni\OpenCV.mk,这是可以的(某些很老的oepncv版本不支持绝对路径)。另外,你可以推测,这里相对的路径其实是相对该代码的目录,而不是jni的目录,所以比如我,D:\android_development\workspaceA\OpenCV Sample - face-detection倒退2个目录,拷贝一下sdk,就行了。两种方法随你选。


五.NDK环境配置

2.1系统NDK环境

我的电脑右键->高级系统设置->环境变量, 将系统变量中的Path,追加   ;D:\android_development\android_ndk_r9d

这里很多帖子一直说要个用户变量NDK_PATH,然后再%NDK_PATH%搞过去(这种方式可能需要重启)。其实也没什么必要,直接将路径追加上去,不需要重启。

注意前面有个“;”号,目录换成你的。在cmd中输入ndk-build -version查看是否成功。


2.2 eclipse环境

记得在调试的时候,要经常多重启下eclipse,比如刚刚我们配好了NDK环境,你的cmd.exe验证是否安装成功, 你的eclipse都是需要重启的,所以多重启eclipse和cmd。

这个时候,你再执行android的Run As -> android application的时候,注意查看Console中会提示:

  **** Auto Build of configuration Default for project OpenCV Sample - face-detection ****
"\\ndk-build.cmd" 
Cannot run program "\ndk-build.cmd": Launching failed

a.    window->perefence->Android->NDK, 将NDK location设置为你的ndk目录,与上面路径是一样的;

b.     window->perefence->c/c++->Build->Environment, 点击Add, 在弹出来的窗口随便起个名字,如NDKPATH,路径直接写,也是一样的路径,不点后面那个去选择。在弹出的窗口必须写成NDKROOT才能生效。 ---0517更新。

记得重启你的eclipse!

再次运行到Android手机的时候,Console提示了如下,说明我们的NDK搞定了!程序也不再报错。

Android NDK: WARNING:jni/Android.mk:detection_based_tracker: non-system libraries in linker flags: -lopencv_java    
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-v7a] Install        : libdetection_based_tracker.so => libs/armeabi-v7a/libdetection_based_tracker.so
  

猜你喜欢

转载自blog.csdn.net/jzlhll123/article/details/45626709
今日推荐