温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于android studio开发的 opencv关于android人脸识别的DEMO

发布时间:2020-07-17 12:29:18 来源:网络 阅读:24028 作者:Mr_haha 栏目:移动开发

(2018年11月23日 在 <a href="revise_181123">链接 </a> 补充了一个新的BUG)

一个新项目的导入 可能会遇到多个问题,就这些问题 做个 解决集合,以便日后回顾,

版本 : android studio3.1.4 ,opencv-3.4.1-android-sdk

首先 我们要给 IDE 安装 ndk 的环境:

        打开 AS的 Settings:      File->Settings

基于android studio开发的 opencv关于android人脸识别的DEMO


(PS: 好像是这些。。。。具体的忘记了。。。  ̄□ ̄||)


Apply 后 就等着 下载安装吧~~~~~


环境弄好后 我们开始 看具体的 实施步骤:


一、下载OpenCV android 的SDK ,

       (2018年9月10日最新版) https://sourceforge.net/projects/opencvlibrary/files/opencv-android/3.4.1/opencv-3.4.1-android-sdk.zip/download

二、导入项目

    基于android studio开发的 opencv关于android人脸识别的DEMO

    基于android studio开发的 opencv关于android人脸识别的DEMO

    基于android studio开发的 opencv关于android人脸识别的DEMO


    8、next完后直接 finish就好了。

           不过 项目导入后 还没完,接下来


    基于android studio开发的 opencv关于android人脸识别的DEMO


    基于android studio开发的 opencv关于android人脸识别的DEMO

    

    基于android studio开发的 opencv关于android人脸识别的DEMO


基于android studio开发的 opencv关于android人脸识别的DEMO


include ':openCVLibrary341'



然而这时候 还没有结束: 

    我在编译后报出了 一个问题:

    基于android studio开发的 opencv关于android人脸识别的DEMO


这是因为 OpenCV 的 compileSdkVersion 太低了

基于android studio开发的 opencv关于android人脸识别的DEMO


我这里是 改成了和 27 就编译通过了


到这里 导入工作 也就进行了一半了:

    接下来 还要导入 .so文件,.mk文件

这些文件分别在:

    1、.so文件:

            基于android studio开发的 opencv关于android人脸识别的DEMO


    2、.mk文件在


基于android studio开发的 opencv关于android人脸识别的DEMO


然后接下来 在 android studio 的 src/main目录下 分别 新建 jni 和 jniLibs两个目录,如图

    基于android studio开发的 opencv关于android人脸识别的DEMO


然后将 之前 的    ....\OpenCV-android-sdk\samples\face-detection\jni  目录下的所有文件复制到项目的jni目录下


然后将       .....\OpenCV-android-sdk\sdk\native\libs 目录下的所有内容复制到 jniLibs目录下

        如图:

基于android studio开发的 opencv关于android人脸识别的DEMO


这时候 还要配置下 jni 的目录,配置方式如图:

    基于android studio开发的 opencv关于android人脸识别的DEMO

    

externalNativeBuild{
    ndkBuild{
        path }
}



ok 我们编译下看看~~~


结果 Duang的一下 搞了一个错误~~~

基于android studio开发的 opencv关于android人脸识别的DEMO


其实 这个东西 就是在我们刚刚 复制过来的 Android.mk中

基于android studio开发的 opencv关于android人脸识别的DEMO


只要将这个 按照我们自己的实际路径改一下 就ok了


基于android studio开发的 opencv关于android人脸识别的DEMO


这样再次编译 ok 通过了~ 赞一个先


不过这里先说一下 配置还是有问题的, 但是我们先使用OpenCV 中的 simple 看看吧 

    simple 路径:OpenCV-android-sdk\samples\face-detection

    因为这是个 Eclipse的项目, 我就简单的将 Samples 中的相关代码 复制到 项目中了。主要有这几样东西:


    1、OpenCV-android-sdk\samples\face-detection\res\raw 这个目录中是 人脸用到的文件所以是必须的


    2、OpenCV-android-sdk\samples\face-detection\src\org\opencv\samples\facedetect     目录中是 activity文件 和一个工具的java文件


    3、需要用到的权限(在这里我没遇到什么问题,所以就不多说了)

        

    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>

    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>


    4、

基于android studio开发的 opencv关于android人脸识别的DEMO


5、最后 还有FdActivity 的 layout 别忘了


ok 这个时候 可以运行 看看了,不过我可以提前说明,现在运行会崩溃的~~~

不过没关系 我们看一下bug~~~

09-10 11:17:15.555 21819-21819/com.example.china_yzh.demoopencv E/zygote64: No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(java.lang.String, int) (tried Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject and Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject__Ljava_lang_String_2I)

09-10 11:17:15.555 21819-21819/com.example.china_yzh.demoopencv D/AndroidRuntime: Shutting down VM

09-10 11:17:15.557 21819-21819/com.example.china_yzh.demoopencv E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.china_yzh.demoopencv, PID: 21819

    java.lang.UnsatisfiedLinkError: No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(java.lang.String, int) (tried Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject and Java_com_example_china_1yzh_demoopencv_DetectionBasedTracker_nativeCreateObject__Ljava_lang_String_2I)

        at com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject(Native Method)

        at com.example.china_yzh.demoopencv.DetectionBasedTracker.<init>(DetectionBasedTracker.java:9)

        at com.example.china_yzh.demoopencv.FdActivity$1.onManagerConnected(FdActivity.java:91)

        at com.example.china_yzh.demoopencv.FdActivity.onResume(FdActivity.java:149)

        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1361)

        at android.app.Activity.performResume(Activity.java:7361)

        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3765)

基于android studio开发的 opencv关于android人脸识别的DEMO


出错的原因 就是我上面红色 标出的内容:

No implementation found for long com.example.china_yzh.demoopencv.DetectionBasedTracker.nativeCreateObject


这个问题 我是找了好久 才 弄明白的。。。。

其实 这个就是我之前 导包是 留下的那个问题 ,  之前在 jni目录下 导入了 四个文件 分别是


基于android studio开发的 opencv关于android人脸识别的DEMO


之前 OpenCV.mk找不到 是因为 Android.mk 


这次的错误 是后面两个 文件 , 一个 .ccp文件 和一个 .h文件。


我们来看看文件的内容:


基于android studio开发的 opencv关于android人脸识别的DEMO


看到这个是不是觉得眼熟 ,没错 我们之前的 bug中 有类似的 文本说明:

基于android studio开发的 opencv关于android人脸识别的DEMO


很简单 将 上面说的 .h和.cpp中的 所有 都改成这个目录就好了,(ps:这里的内容是因项目路径而异的,根据实际情况来)


基于android studio开发的 opencv关于android人脸识别的DEMO


不用担心 Replace吧~


基于android studio开发的 opencv关于android人脸识别的DEMO


改完后 我们再来运行看看 

perfect ~~~




<a name="revise_181123">修改日期:2018年11月23日</a>

修改原因:遇见新的BUG

BUG: Android NDK: APP_STL gnustl_static is no longer supported.  

        AS 不再支持 gnustl_static 要换成 c++_static 或作者 c++_shared(是不是这么写的忘记了。。。不过报错的时候会有显示的)

修改位置:

基于android studio开发的 opencv关于android人脸识别的DEMO









来看看 运行效果


基于android studio开发的 opencv关于android人脸识别的DEMO


额 可能边上两个太黑了 -_-||~~~ 我不是有意的 。。。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI